#include "DHT.h"
#define DHTPIN 2 // DATA DHT22
#define DHTTYPE DHT22
#define RELAY_PIN 7 // IN реле
#define MOISTURE_THRESHOLD_LOW 30 // включение насоса
#define MOISTURE_THRESHOLD_HIGH 35 // гистерезис
#define PUMP_DURATION 5000 // 5 секунд
DHT dht(DHTPIN, DHTTYPE);
bool pumpState = false;
void setup() {
Serial.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // реле выключено
dht.begin();
Serial.println("Soil Moisture Monitoring Simulation using DHT22");
}
void loop() {
float humidity = dht.readHumidity();
if (isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
delay(2000);
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
// ===== ЛОГИКА НАСОСА =====
if (!pumpState && humidity < MOISTURE_THRESHOLD_LOW) {
Serial.println("Moisture low! Turning pump ON...");
digitalWrite(RELAY_PIN, HIGH); // включаем реле
pumpState = true;
delay(PUMP_DURATION);
digitalWrite(RELAY_PIN, LOW); // выключаем реле
Serial.println("Pump OFF (after 5 sec)");
}
// Гистерезис
if (pumpState && humidity > MOISTURE_THRESHOLD_HIGH) {
pumpState = false;
Serial.println("Pump ready for next cycle");
}
Serial.println("--------------------------");
delay(2000);
}