Главная » Ардуино » Регистратор температуры Arduino с модулем SD-карты

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

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

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

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

  • Arduino UNO
  • Модуль SD-карты
  • Микро SD-карта
  • Датчик температуры и влажности DHT11
  • RTC модуль
  • Макетная плата
  • Перемычки

Примечание: в качестве альтернативы модулю SD-карты вы можете использовать Data Logging Shield. Data Logging Shield поставляется со встроенным RTC и зоной прототипирования для паяных соединений, датчиков и т. д.

Схематика проекта

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

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

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

  1. Нажмите здесь, чтобы загрузить библиотеку DHT-sensor. У вас должен быть файл .zip в папке «Загрузки»
  2. Разархивируйте .zip, и вы получите папку DHT-sensor-library-master
  3. Переименуйте вашу папку в DHT
  4. Переместите папку DHT в папку библиотек установки Arduino IDE
  5. Наконец, снова откройте ваш 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 для создания регистратора данных. Вы можете применить эту концепцию практически в любом проекте, который вам нравится.

 

 

 

 

 

 

 

 

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*