#include "DHT.h"
#define DHTPIN 13
#define DHTTYPE DHT22
const int lightPin = A0;
const int humidifierRelayPin = 10;
const int fanRelayPin = 9;
const int backlightLedPin = 8;
const int heaterRelayPin = 7;
const int wateringRelayPin = 2;
const float BETA = 3950;
const float GAMMA = 0.7;
const float RL10 = 50;
float ldrValue = 0;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(humidifierRelayPin, OUTPUT);
pinMode(fanRelayPin, OUTPUT);
pinMode(backlightLedPin, OUTPUT);
pinMode(wateringRelayPin, OUTPUT);
pinMode(heaterRelayPin, OUTPUT);
pinMode(lightPin, INPUT);
}
void loop() {
uint32_t timeSeconds = millis() / 1000ul;
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int analogValue = analogRead(lightPin);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
ldrValue = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
ldrValue = (ldrValue / 100916.51) * 255;
//Влажность
if (humidity < 60) {
digitalWrite(humidifierRelayPin, HIGH);
Serial.println("Низкая влажность! Включение увлажнителя.");
}
else {
digitalWrite(humidifierRelayPin, LOW);
Serial.println("Приемлемая влажность. Отключение увлажнителя.");
}
//Температура
if (temperature > 35) {
digitalWrite(fanRelayPin, HIGH);
digitalWrite(heaterRelayPin, LOW);
Serial.println("Высокая температура! Включение вентилятора.");
}
else if (temperature < 25) {
digitalWrite(heaterRelayPin, HIGH);
digitalWrite(fanRelayPin, LOW);
Serial.println("Низкая температура! Включение обогревателя.");
}
else {
digitalWrite(fanRelayPin, LOW);
digitalWrite(heaterRelayPin, LOW);
Serial.println("Приемлемая температура.");
}
//Освещение
if (ldrValue < 128) {
Serial.println("Слишком темно! Включение освещения.");
digitalWrite(backlightLedPin, HIGH);
} else {
Serial.println("Приемлемое освещение.");
digitalWrite(backlightLedPin, LOW);
}
if ((timeSeconds % 11) == 5) {
digitalWrite(wateringRelayPin, LOW);
Serial.println("Отключение автоматического полива");
}
if ((timeSeconds % 11) == 10) {
digitalWrite(wateringRelayPin, HIGH);
timeSeconds = 0;
Serial.println("Включение автоматического полива");
}
Serial.println();
delay(1000);
}