#include "DHT.h"
// Define pins for each DHT22 sensor
#define DHTPIN1 4
#define DHTPIN2 5
#define DHTPIN3 6
#define DHTPIN4 7
#define DHTTYPE DHT22
// Initialize each DHT22 sensor
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
DHT dht3(DHTPIN3, DHTTYPE);
DHT dht4(DHTPIN4, DHTTYPE);
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
myservo.attach(9);
myservo.write(0);
// Begin all DHT sensors
dht1.begin();
dht2.begin();
dht3.begin();
dht4.begin();
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop() {
// Read humidity from all four sensors
float humidity1 = dht1.readHumidity();
float humidity2 = dht2.readHumidity();
float humidity3 = dht3.readHumidity();
float humidity4 = dht4.readHumidity();
// Calculate average humidity, ignoring any NaN readings
int validReadings = 0;
float totalHumidity = 0;
if (!isnan(humidity1)) {
totalHumidity += humidity1;
validReadings++;
}
if (!isnan(humidity2)) {
totalHumidity += humidity2;
validReadings++;
}
if (!isnan(humidity3)) {
totalHumidity += humidity3;
validReadings++;
}
if (!isnan(humidity4)) {
totalHumidity += humidity4;
validReadings++;
}
float avgHumidity = (validReadings > 0) ? (totalHumidity / validReadings) : 0;
// Read temperature from the first sensor (for simplicity)
float temperature = dht1.readTemperature();
// Check if average humidity is below threshold
if (avgHumidity < 15) {
myservo.write(90); // Move servo to watering position
lcd.setCursor(0, 0);
lcd.print("Humid: ");
lcd.print(avgHumidity);
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
delay(3000); // Watering duration
myservo.write(0); // Return servo to initial position
lcd.clear();
}
// Display average humidity and temperature continuously
lcd.setCursor(0, 0);
lcd.print("Humid: ");
lcd.print(avgHumidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temp=");
lcd.print(temperature);
lcd.print("C");
delay(1000);
lcd.clear();
}