В этом посте показано, как создать регистратор данных Arduino. Мы будем использовать DHT11 для измерения температуры, модуль часов реального времени (RTC) для отметок времени и модуль SD-карты для сохранения данных на SD-карте.
Необходимые компоненты
Вот полный список частей, необходимых для этого проекта:
- Arduino UNO
- Модуль SD-карты
- Микро SD-карта
- Датчик температуры и влажности DHT11
- RTC модуль
- Макетная плата
- Перемычки
Примечание: в качестве альтернативы модулю SD-карты вы можете использовать Data Logging Shield. Data Logging Shield поставляется со встроенным RTC и зоной прототипирования для паяных соединений, датчиков и т. д.
Схематика проекта
На следующем рисунке показана схема для этого проекта.
Установка библиотеки датчиков DHT
Для этого проекта вам необходимо установить библиотеку DHT для чтения с датчика DHT11.
- Нажмите здесь, чтобы загрузить библиотеку DHT-sensor. У вас должен быть файл .zip в папке «Загрузки»
- Разархивируйте .zip, и вы получите папку DHT-sensor-library-master
- Переименуйте вашу папку в DHT
- Переместите папку DHT в папку библиотек установки Arduino IDE
- Наконец, снова откройте ваш Arduino IDE
Скетч
Скопируйте следующий код в Arduino IDE и загрузите его в свою плату Arduino.
// 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 () и функцию loggingTempera (), которые мы вызываем в loop () для записи времени и температуры в файл DATA.txt на SD-карте.
Откройте Serial Monitor со скоростью 9600 бод и проверьте, все ли работает правильно.
Получение данных с SD-карты
Позвольте этому проекту работать в течение нескольких часов, чтобы собрать приличный объем данных, и когда вы будете довольны периодом регистрации данных, выключите Arduino и извлеките SD из модуля SD-карты.
Вставьте SD-карту в компьютер, откройте ее, и у вас должен быть файл DATA.txt с собранными данными.
Вы можете открыть данные в текстовом редакторе или использовать электронную таблицу для анализа и обработки ваших данных.
Данные разделены запятыми, и каждое чтение находится в новой строке. В этом формате вы можете легко импортировать данные в Excel или другое программное обеспечение для обработки данных.
Итог
Это отличный проект, чтобы узнать, как использовать модуль SD-карты с Arduino для создания регистратора данных. Вы можете применить эту концепцию практически в любом проекте, который вам нравится.