Arduino: Регистратор данных температуры с модулем SD-карты
В этой статье показано, как создать регистратор данных температуры на Arduino. Мы будем использовать DHT11 для измерения температуры, модуль часов реального времени (RTC) для записи временных меток и модуль SD-карты для сохранения данных на SD-карту.
Рекомендуемые ресурсы:
Необходимые компоненты
Вот полный список компонентов, необходимых для этого проекта:
Arduino UNO – читайте Лучшие стартовые наборы Arduino
Примечание: вместо модуля SD-карты вы можете использовать шилд для регистрации данных. Шилд для регистрации данных поставляется со встроенным RTC и областью для прототипирования для пайки соединений, датчиков и т.д.
Вы можете использовать приведенные выше ссылки или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
На следующем рисунке показана принципиальная схема для этого проекта.
Примечание: убедитесь, что ваша SD-карта отформатирована и работает правильно. Прочитайте «:doc:`Руководство по модулю SD-карты с Arduino </arduino/rnt/guide-to-sd-card-module-with-arduino/index>`_».
Установка библиотеки датчика DHT
Для этого проекта вам необходимо установить библиотеку DHT для чтения данных с датчика DHT11.
Нажмите здесь, чтобы скачать библиотеку DHT-sensor-library. У вас должна появиться .zip-папка в папке Downloads
Распакуйте .zip-папку, и вы должны получить папку DHT-sensor-library-master
Переименуйте папку из DHT-sensor-library-master в DHT
Переместите папку DHT в папку библиотек вашей Arduino IDE
Наконец, перезапустите вашу 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 с собранными данными.
Вы можете открыть данные в текстовом редакторе или использовать электронную таблицу для анализа и обработки ваших данных.
Данные разделены запятыми, и каждое показание находится на новой строке. В таком формате вы можете легко импортировать данные в Excel или другое программное обеспечение для обработки данных.
Заключение
Это отличный проект для изучения работы с модулем SD-карты совместно с Arduino для создания регистратора данных. Вы можете применить эту концепцию практически в любом проекте, который вам нравится.
Если вам нравятся проекты Arduino, обязательно ознакомьтесь с нашим последним курсом Arduino: `Arduino Step-by-step Projects – Build 23 Projects <https://randomnerdtutorials.com/arduino-step-by-step-projects/>`__
Надеемся, вы нашли этот проект полезным.
Спасибо за чтение.