#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHTPIN 14
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Soil Moisture (Potentiometer)
#define SOIL_MOISTURE_PIN 34
// Soil PH (NTC Thermistor – analog input)
#define SOIL_PH_PIN 35
// DS18B20 Soil Temperature
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Relay + Pump Indicator LED
#define RELAY_PIN 5
#define LED_PIN 2
void setup() {
Serial.begin(115200);
pinMode(DHTPIN, INPUT_PULLUP);
dht.begin();
delay(2000);
sensors.begin();
sensors.setWaitForConversion(true);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Pump off
digitalWrite(LED_PIN, LOW); // LED off
}
void loop() {
// Read DHT22
float airTemp = dht.readTemperature();
float airHum = dht.readHumidity();
// Read Soil Moisture (0–4095)
int soilMoistRaw = analogRead(SOIL_MOISTURE_PIN);
int soilMoistPercent = map(soilMoistRaw,4095, 0, 0, 100);
// Read Soil pH (simulated analog)
int soilPhRaw = analogRead(SOIL_PH_PIN);
float soilPH = map(soilPhRaw, 0, 4095, 3, 10); // Dummy conversion
// Read DS18B20 Soil Temperature
sensors.requestTemperatures();
float soilTemp = sensors.getTempCByIndex(0);
// Print all values
Serial.println("========== Sensor Readings ==========");
Serial.print("Air Temp (°C): "); Serial.println(airTemp);
Serial.print("Air Humidity (%): "); Serial.println(airHum);
Serial.print("Soil Moisture (%): "); Serial.println(soilMoistPercent);
Serial.print("Soil pH: "); Serial.println(soilPH);
Serial.print("Soil Temperature (°C): "); Serial.println(soilTemp);
Serial.println("=====================================");
Serial.println();
// Pump control logic
if (soilMoistPercent < 30) {
digitalWrite(RELAY_PIN, HIGH); // Turn pump ON
digitalWrite(LED_PIN, HIGH); // LED ON
Serial.println("Pump: ON");
} else {
digitalWrite(RELAY_PIN, LOW); // Pump OFF
digitalWrite(LED_PIN, LOW); // LED OFF
Serial.println("Pump: OFF");
}
delay(2000);
}