Самодельный регистратор температуры внутри холодильника на Arduino


Что происходит с температурой, когда вы открываете дверцу холодильника? Очевидно, что холодный воздух выходит и температура повышается. Но насколько? А как часто включается система охлаждения?
Чтобы ответить на эти вопросы — можно собрать простую самодельную систему регистрации данных. Для этого понадобятся только: контроллер Arduino Uno, температурный сенсор (DHT22, TMP36), фоторезистор (для отслеживания открытия двери холодильника), экран и модуль для работы с картами памяти формата microSD (для хранения данных).

Скетч для Arduino (Arduino_SD_card_Datalogger_DHT22__PhotoSnsr_w2x16.ino)

/* micro SD card Datalogger for:
DHT22 Temp and Humidity
Photo Resistor
TMP36 Temp Sensor (physical)
Copy and pasted by Ryan, poorly. 
*/
const int analogTemp1 = A0;   // Analog input pin for TMP36 Temp sensor
const int analogTemp2 = A1;   // Analog input pin for TMP36 Temp sensor

const int analogInPin2 = A2;   // Analog input pin that the photoresistor is attached to
int sensorValueA = 0;          // value read from the photoresistor

const int analogInPin3 = A3;   // Analog input pin that the photoresistor is attached to
int sensorValueB = 0;          // value read from the photoresistor
int led4 = 4;  
int led5 = 5; 
int led6 = 6;        



// include the library code
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
//#include "Adafruit_seesaw.h"

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address for a 16 chars and 2 line display

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN 2  // Digital pin connected to the DHT sensor
#include <SPI.h>
#include <SD.h>
uint32_t delayMS;


// Uncomment the type of sensor in use:
//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)
DHT_Unified dht(DHTPIN, DHTTYPE);
const int chipSelect = 10;
float Ftemp;


void setup() {
    Serial.begin(9600);
 
    pinMode(led4,OUTPUT);  pinMode(led5,OUTPUT);  pinMode(led6,OUTPUT);
    digitalWrite(led6,HIGH); delay(250);   //red
    digitalWrite(led5,HIGH); delay(250);  //yellow
    digitalWrite(led4,HIGH); delay(250);  //green
    digitalWrite(led4,LOW);delay(250);  digitalWrite(led5,LOW);delay(250); digitalWrite(led6,LOW);
    //digitalWrite(leds[random(0,sizeof(leds)/sizeof(int))],LOW);
    
 

  
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
  dht.begin();
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  dht.humidity().getSensor(&sensor);
  delayMS = sensor.min_delay / 1000;
  // Open serial communications and wait for port to open:

    
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.print("Initializing SD card...");
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
  Serial.println("card initialized."); 
  digitalWrite(led4,HIGH);  //turn green led one

Serial.println("Data format is:");
Serial.println("Temp_F, %Humitidy, PhotoRes_A2, PhotoRes_A3, T1, T2, time(sec) elasped");
}


void loop() {
  //---------------------TMP36 sensor---------------------------------
 delay(50); int Temp1 = analogRead(analogTemp1); 
 delay(50); int Temp2 = analogRead(analogTemp2);
 
 float voltage1 = Temp1 * 5.0;
 voltage1 /=  1024.0;
 float Temp1C = (voltage1 - 0.5) * 100 ;
 float Temp1F = (Temp1C * 9.0 / 5.0) + 32.0;
 

 float voltage2 = Temp2 * 5.0;
 voltage2 /=  1024.0;
 float Temp2C = (voltage2 - 0.5) * 100 ;
 float Temp2F = (Temp2C * 9.0 / 5.0) + 32.0;  //

 
  int timeSec = millis()/1000;
  //-------------Photo Resistor----------------------------------
  sensorValueA = analogRead(analogInPin2);    // read the analog in value:
    //map the photo resistor analog value to something more comprehendable (0-100 range)
  sensorValueA= map(sensorValueA,0,1023,0,100); 

  sensorValueB = analogRead(analogInPin3);    // read the analog in value:
    //map the photo resistor analog value to something more comprehendable (0-100 range)
  sensorValueB= map(sensorValueB,0,1023,0,100); 

  
  //-------------DHT11 Temp & Humidity----------------------------
  digitalWrite(led5,LOW);
  delay(delayMS);
  digitalWrite(led5,HIGH);
  sensors_event_t event; // Get temperature event and print its value.
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println(F("Error reading temperature!"));
  }
  else {
    //Serial.print(F("Temperature: "));
    //Serial.print((1.8*event.temperature+32));
    Ftemp = ((event.temperature)*1.8)+32;
    //Serial.print(",");
  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println(F("Error reading humidity!"));
  }
  else {
    //Serial.print(F("Humidity: "));
    //Serial.println(event.relative_humidity);
    //Serial.println(F("%"));
  }
//-------------Formatting for SD card writing----------------------------
//// make a single line string for assembling the data to log:
  String dataString = ""; // this is a string now, its not numerical value....
  dataString += String((Ftemp));                         dataString += ",";
  dataString += String(round(event.relative_humidity));  dataString += ",";
  dataString += String(sensorValueA);                    dataString += ",";
  dataString += String(sensorValueB);                    dataString += ",";
  dataString += String(round(Temp1F));                   dataString += ",";
  dataString += String(round(Temp2F));                   dataString += ",";
  dataString += String(timeSec);
    

//---------------------------SD CARD Write function------------------
  digitalWrite(led6,HIGH); delay(50);
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);  // print to the serial port too:
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
digitalWrite(led6,LOW);
//-----------------------print to LCD-----------------------------
  lcd.setCursor(0,0); lcd.print("PR2 "); lcd.print(sensorValueA);
  lcd.setCursor(0,1); lcd.print("T1 "); lcd.print(round(Temp1F)); lcd.print("F");
  lcd.setCursor(11,0);
  lcd.print(round(Ftemp)); lcd.print("*F"); 
  lcd.setCursor(10,1); lcd.print("RH "); lcd.print(round(event.relative_humidity)); lcd.print("%");
 
}


Ссылки
Refrigerator Data Logger

По теме
Практическое программирование Arduino — Аналоговый датчик температуры – LM335
Практическое программирование Arduino — температурный 1-Wire датчик DS18S20
Чёрный ящик для автомобиля на Arduino Mega
Arduino в ближнем космосе: 27 км над Землёй

Arduino
Ардуино что это и зачем?
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
  • 0
  • 26 сентября 2019, 11:25
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.