Как самому сделать автомат поддержания максимальной температуры в теплице на базе набора "Arduino"
Пример автомата поддержания максимальной температуры в теплице
Работа автомата поддержания максимальной температуры в теплице
Температурный режим поддерживается включением принудительной вентиляции при превышении критической максимальной температуры : 35 градусов по Цельсию. Почему выбран такой критерий?
- Выше 35 градусов по Цельсию цветки томатов стерилизуются.
- С другой стороны, цветки-плоды дыни завязываются при температуре выше 30 градусов по Цельсию.
Информация о работе автомата высвечивается на жидко-кристаллическом индикаторе. Если в этом необходимости нет, индикатор и его библиотеки можно исключить.
Использованные материалы и детали
- Плата Arduino-Uno;
- Жидко-кристаллический индикатор LCD 16x2;
- Датчик влажности и температуры DHT11.
- Любой вытяжной вентилятор
Использованные библиотеки
- DHT.h - библиотека датчика температуры и влажности;
- LiquidCrystal.h - библиотека люминисцентного индикатора:
- kiril_lcd.h - библиотека набора кирилицы для LiquidCrystal;
- С целью экономии энергии в алгоритм работы включена библиотека Narcoleptic. Если экономия не нужна библиотеку Narcoleptic можно не использовать.
Текст программы на C
/************* */ #define VERSION 2-02.6 #define DEBUG true // include the library code: #include "DHT.h" #include "Narcoleptic.h" #include "kiril_lcd.h" #include "LiquidCrystal.h"
// initialize the library by associating any needed LCD interface pin // with the arduino pin number it is connected to const char rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
/* add sensor t/h
DHT11:
1->Vcc=5V
2->signal
3-nil
4->GND
*/
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define RELEPIN 13 float t_wentilator=35; const char *test="--test--";
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
lcd.clear();
lcd.createChar(0,bo);
lcd.createChar(1,bl);
lcd.createChar(2,bu);
lcd.createChar(3,bii);
lcd.createChar(4,btsh);
lcd.createChar(5,bz);
lcd.createChar(6,byy);
lcd.createChar(7,bd);
dht.begin(); pinMode(RELEPIN,OUTPUT);
if (DEBUG) {Serial.begin(9600);};
/* --test--*/
if (DEBUG) {Serial.println(test);};
lcd.setCursor(0,0);
lcd.print(test);
digitalWrite(RELEPIN,HIGH);
Narcoleptic.delay(2000);
digitalWrite(RELEPIN,LOW);
lcd.clear();
lcd.write(byte(5));
lcd.write(byte(7));
lcd.print("PABCTB");
lcd.write(byte(2));
lcd.write(byte(3));
lcd.print("TE !");
Narcoleptic.delay(10000);
lcd.clear();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
// float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) ){ // || isnan(f)) {
if (DEBUG) {Serial.println(F("Failed to read from DHT sensor!"));};
lcd.print("Failed to read from DHT sensor!");
};
lcd.print("T=");lcd.print(t);lcd.write(byte(0));lcd.print(" ");
if (DEBUG) {Serial.println(t);};
lcd.print("To=");lcd.print(t_wentilator);
lcd.setCursor(0, 1);
lcd.print("B=");lcd.print((int)h);lcd.print("%");
if (DEBUG) {Serial.println(h);};
if (t>t_wentilator) {
lcd.print(" BK");lcd.write(byte(1));
digitalWrite(RELEPIN,HIGH);
}else{
lcd.print(" OTK");lcd.write(byte(1));
digitalWrite(RELEPIN,LOW);
}
lcd.home(); Narcoleptic. delay(2000); }
Эпилог
Функции программы документированы, переменные имеют доступные имена.
Но если понадобится помощь -- обращайтесь