Самодельный регистратор температуры внутри холодильника на 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, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение