Arduino: Регистратор данных температуры с модулем SD-карты

В этой статье показано, как создать регистратор данных температуры на Arduino. Мы будем использовать DHT11 для измерения температуры, модуль часов реального времени (RTC) для записи временных меток и модуль SD-карты для сохранения данных на SD-карту.

Arduino регистратор данных температуры с модулем SD-карты

Рекомендуемые ресурсы:

Необходимые компоненты

Вот полный список компонентов, необходимых для этого проекта:

Компоненты для регистратора данных температуры Arduino

Примечание: вместо модуля SD-карты вы можете использовать шилд для регистрации данных. Шилд для регистрации данных поставляется со встроенным RTC и областью для прототипирования для пайки соединений, датчиков и т.д.

Вы можете использовать приведенные выше ссылки или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Схема подключения

На следующем рисунке показана принципиальная схема для этого проекта.

Схема подключения регистратора данных температуры Arduino

Примечание: убедитесь, что ваша SD-карта отформатирована и работает правильно. Прочитайте «:doc:`Руководство по модулю SD-карты с Arduino </arduino/rnt/guide-to-sd-card-module-with-arduino/index>`_».

Установка библиотеки датчика DHT

Для этого проекта вам необходимо установить библиотеку DHT для чтения данных с датчика DHT11.

  1. Нажмите здесь, чтобы скачать библиотеку DHT-sensor-library. У вас должна появиться .zip-папка в папке Downloads

  2. Распакуйте .zip-папку, и вы должны получить папку DHT-sensor-library-master

  3. Переименуйте папку из DHT-sensor-library-master в DHT

  4. Переместите папку DHT в папку библиотек вашей Arduino IDE

  5. Наконец, перезапустите вашу Arduino IDE

Код

Скопируйте следующий код в вашу Arduino IDE и загрузите его на вашу плату Arduino.

/*
 * Rui Santos
 * Complete Project Details https://randomnerdtutorials.com
 */

#include <SPI.h> //for the SD card module
#include <SD.h> // for the SD card
#include <DHT.h> // for the DHT sensor
#include <RTClib.h> // for the RTC

//define DHT pin
#define DHTPIN 2     // what pin we're connected to

// uncomment whatever type you're using
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

// change this to match your SD shield or module;
// Arduino Ethernet shield and modules: pin 4
// Data loggin SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;

// Create a file to store the data
File myFile;

// RTC
RTC_DS1307 rtc;

void setup() {
  //initializing the DHT sensor
  dht.begin();

  //initializing Serial monitor
  Serial.begin(9600);

  // setup for the RTC
  while(!Serial); // for Leonardo/Micro/Zero
    if(! rtc.begin()) {
      Serial.println("Couldn't find RTC");
      while (1);
    }
    else {
      // following line sets the RTC to the date & time this sketch was compiled
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }
    if(! rtc.isrunning()) {
      Serial.println("RTC is NOT running!");
    }

  // setup for the SD card
  Serial.print("Initializing SD card...");

  if(!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  //open file
  myFile=SD.open("DATA.txt", FILE_WRITE);

  // if the file opened ok, write to it:
  if (myFile) {
    Serial.println("File opened ok");
    // print the headings for our data
    myFile.println("Date,Time,Temperature ºC");
  }
  myFile.close();
}

void loggingTime() {
  DateTime now = rtc.now();
  myFile = SD.open("DATA.txt", FILE_WRITE);
  if (myFile) {
    myFile.print(now.year(), DEC);
    myFile.print('/');
    myFile.print(now.month(), DEC);
    myFile.print('/');
    myFile.print(now.day(), DEC);
    myFile.print(',');
    myFile.print(now.hour(), DEC);
    myFile.print(':');
    myFile.print(now.minute(), DEC);
    myFile.print(':');
    myFile.print(now.second(), DEC);
    myFile.print(",");
  }
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.println(now.day(), DEC);
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.println(now.second(), DEC);
  myFile.close();
  delay(1000);
}

void loggingTemperature() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  //float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if  (isnan(t) /*|| isnan(f)*/) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  //debugging purposes
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C");
  //Serial.print(f);
  //Serial.println(" *F\t");

  myFile = SD.open("DATA.txt", FILE_WRITE);
  if (myFile) {
    Serial.println("open with success");
    myFile.print(t);
    myFile.println(",");
  }
  myFile.close();
}

void loop() {
  loggingTime();
  loggingTemperature();
  delay(5000);
}

Просмотреть исходный код

В этом коде мы создаем функцию loggingTime() и функцию loggingTemperature(), которые вызываем в loop() для записи времени и температуры в файл DATA.txt на SD-карте.

Откройте монитор порта на скорости 9600 бод и проверьте, все ли работает правильно.

Получение данных с SD-карты

Дайте этому проекту поработать несколько часов, чтобы собрать достаточное количество данных, и когда вы будете довольны периодом записи данных, выключите Arduino и извлеките SD-карту из модуля SD-карты.

Вставьте SD-карту в компьютер, откройте её, и у вас должен быть файл DATA.txt с собранными данными.

Файл DATA.txt на SD-карте

Вы можете открыть данные в текстовом редакторе или использовать электронную таблицу для анализа и обработки ваших данных.

Данные температуры в текстовом файле

Данные разделены запятыми, и каждое показание находится на новой строке. В таком формате вы можете легко импортировать данные в Excel или другое программное обеспечение для обработки данных.

Заключение

Это отличный проект для изучения работы с модулем SD-карты совместно с Arduino для создания регистратора данных. Вы можете применить эту концепцию практически в любом проекте, который вам нравится.

Если вам нравятся проекты Arduino, обязательно ознакомьтесь с нашим последним курсом Arduino: `Arduino Step-by-step Projects – Build 23 Projects <https://randomnerdtutorials.com/arduino-step-by-step-projects/>`__

Надеемся, вы нашли этот проект полезным.

Спасибо за чтение.