Prototype
The implemented Code :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Adafruit_BMP085.h> // For BMP180
// -------- Pin Definitions --------
#define DHTPIN 2
#define DHTTYPE DHT11
#define LEDPIN 7
#define BUZZER 8
// -------- Object Creation --------
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp; // BMP180 object
LiquidCrystal_I2C lcd(0x27, 16, 2); // Change to 0x3F if needed
void setup() {
Serial.begin(9600);
pinMode(LEDPIN, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
dht.begin();
// BMP180 start
if (!bmp.begin()) {
lcd.setCursor(0,0);
lcd.print("BMP180 Error!");
Serial.println("BMP180 not found!");
while (1);
}
lcd.setCursor(0,0);
lcd.print(“Weather Station”);
delay(2000);
lcd.clear();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
float pressure = bmp.readPressure() / 100.0; // Convert to hPa
float altitude = bmp.readAltitude(); // Altitude in meters
// -------- Check DHT --------
if (isnan(temperature) || isnan(humidity)) {
lcd.setCursor(0,0);
lcd.print("DHT Error ");
Serial.println("DHT Failed!");
delay(2000);
return;
}
// -------- Serial Monitor --------
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print(" C Hum: ");
Serial.print(humidity);
Serial.print(" % Pressure: ");
Serial.print(pressure);
Serial.print(" hPa Alt: ");
Serial.print(altitude);
Serial.println(" m");
// -------- LCD Display --------
lcd.setCursor(0,0);
lcd.print(“T:”);
lcd.print(temperature);
lcd.print("C ");
lcd.print(“H:”);
lcd.print(humidity);
lcd.print("% ");
lcd.setCursor(0,1);
lcd.print(“P:”);
lcd.print(pressure);
lcd.print("hPa ");
// -------- Alert System --------
if (temperature > 35) {
digitalWrite(LEDPIN, HIGH);
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(LEDPIN, LOW);
digitalWrite(BUZZER, LOW);
}
delay(2000);
}