#include <LiquidCrystal.h>
#include <DHT.h>
LiquidCrystal lcd(D7, D8, D9, D10, D11, D12);
#define DHTPIN D5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Sensor pins
#define TRIG_PIN D2
#define ECHO_PIN D3
#define GAS_PIN A0
// LED pins
#define RED_LED D4
#define BLUE_LED D6
#define GREEN_LED D13
void setup() {
lcd.begin(16, 2);
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(RED_LED, LOW);
digitalWrite(BLUE_LED, LOW);
digitalWrite(GREEN_LED, LOW);
}
void loop() {
// 🔊 Distance
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
// 🌡️ DHT22
float temp = dht.readTemperature();
float humi = dht.readHumidity();
// 💨 MQ2 (analogRead returns 0–1023)
int gasRaw = analogRead(GAS_PIN);
float gasPPM = (gasRaw / 1023.0) * 1000.0; // Rescale to ~PPM
// 🚨 LED Alerts
digitalWrite(RED_LED, (distance > 100.0) ? HIGH : LOW);
digitalWrite(BLUE_LED, (temp > 45.0 || humi > 40.0) ? HIGH : LOW);
digitalWrite(GREEN_LED, (gasPPM > 400.0) ? HIGH : LOW);
// 🖥 LCD Output
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp, 0);
lcd.print(" H:");
lcd.print(humi, 0);
lcd.setCursor(0, 1);
lcd.print("D:");
lcd.print(distance, 0);
lcd.print(" G:");
lcd.print(gasPPM, 0);
lcd.print(" "); // Clear extra
delay(500);
}Loading
st-nucleo-c031c6
st-nucleo-c031c6