unsigned long timing;
#include <ESP32Servo.h>
Servo myservo;
#include "DHT.h"
#define DHTPIN 14
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int ntcPin = 32; // пин для термометра
const double Beta = 3950; //переменные для датчика
const double Tnul = 298.15;
const double Rnul = 10000;
const double Rresistor = 10000;
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(115200);
dht.begin();
myservo.attach(27);
pinMode(17, OUTPUT);
pinMode(16, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
if (millis() - timing > 2000) { // Функция задержки
timing = millis();
lcd.clear();
float h = dht.readHumidity(); // переменная температуры
float t = dht.readTemperature(); // переменная влажности
int rawADC = analogRead( ntcPin);
double voltage = (double) rawADC * 3.3 / 4096.0; //вычисления
double R = (voltage * Rresistor) / (3.3 - voltage);
double x = Rnul * exp( -Beta / Tnul);
double kelvin = Beta / (log(R/x));
double celsius = kelvin - 273.15;
if (t > 30) {
digitalWrite(17, HIGH); //кондиционер работает потому что жарко
}
if (t < 30) {
digitalWrite(17, LOW); //кондиционер НЕ работает потому что прохладно
}
if (t < 20) {
digitalWrite(16, HIGH); //обогреватель работает потому что холодно
}
if (t > 20) {
digitalWrite(16, LOW); //обогреватель НЕ работает потому что тепло
myservo.write(180); //форточка открыта для того чтобы проветрить помещение
if (t > 30) {
myservo.write(0); //форточка закрыта потому что работает кондиционер
}
}
if (celsius < 18) {
digitalWrite(4, HIGH);
}
if (celsius > 18) {
digitalWrite(4, LOW);
}
lcd.setCursor(0, 0);
lcd.print("Humidity: "); // вывод данных
lcd.print(h);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("temp AIR: ");
lcd.print(t);
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("temp SOIL: ");
lcd.print(celsius);
lcd.print("C");
}
}