#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define SOIL_MOISTURE_PIN A0
#define LIGHT_SENSOR_PIN A1
#define RELAY_PIN 4
#define SERVO_PIN 3
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(128, 64, &Wire, -1);
Servo windowServo;
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Initialize DHT sensor
dht.begin();
// Initialize Servo
windowServo.attach(SERVO_PIN);
// Initialize Relay pin
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Start with relay off
// Initialize OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
// Read temperature and humidity from DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read soil moisture from potentiometer
int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);
// Read light intensity from LDR
int lightLevel = analogRead(LIGHT_SENSOR_PIN);
// Control servo based on temperature (simulate window opening/closing)
if (temperature > 30) {
windowServo.write(90); // Open window
} else {
windowServo.write(0); // Close window
}
// Control relay for water pump or grow lights based on soil moisture
if (soilMoistureValue < 300) {
digitalWrite(RELAY_PIN, HIGH); // Turn on pump
} else {
digitalWrite(RELAY_PIN, LOW); // Turn off pump
}
// Display data on OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println(F("Greenhouse Monitoring"));
display.setCursor(0, 10);
display.print(F("Temp: "));
display.print(temperature);
display.println(" C");
display.setCursor(0, 20);
display.print(F("Humidity: "));
display.print(humidity);
display.println(" %");
display.setCursor(0, 30);
display.print(F("Soil: "));
display.print(soilMoistureValue);
display.setCursor(0, 40);
display.print(F("Light: "));
display.print(lightLevel);
display.display();
delay(2000); // Update every 2 seconds
}
#isiq su pompa isitme soyutma