#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// ✅ OLED Display Configuration
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ✅ Pin Definitions
#define AIR_SENSOR_PIN 34 // Simulated Air Quality Sensor (Potentiometer)
#define GREEN_LED 26 // Good Air Quality Indicator
#define YELLOW_LED 27 // Moderate Air Quality Indicator
#define RED_LED 14 // Poor Air Quality Indicator
#define BUZZER 25 // Alarm for Poor Air Quality
// ✅ AQI Thresholds
const int GOOD_AQI = 100;
const int MODERATE_AQI = 200;
const int POOR_AQI = 300;
void setup() {
Serial.begin(115200);
pinMode(AIR_SENSOR_PIN, INPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
// ✅ Initialize OLED Display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("❌ SSD1306 allocation failed!");
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 10);
display.println("Indoor Air Quality");
display.display();
delay(2000);
}
void loop() {
// ✅ Simulate Air Quality Sensor Data
int airValue = analogRead(AIR_SENSOR_PIN);
int airQuality = map(airValue, 0, 4095, 0, 500); // Convert to AQI scale (0-500)
Serial.print("Air Quality Index (AQI): ");
Serial.println(airQuality);
// ✅ Update OLED Display
display.clearDisplay();
display.setCursor(0, 10);
display.print("AQI: ");
display.print(airQuality);
// ✅ Air Quality Conditions & Alerts
if (airQuality < GOOD_AQI) { // Good Air Quality
digitalWrite(GREEN_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
display.println(" - Good 😊");
}
else if (airQuality >= GOOD_AQI && airQuality < MODERATE_AQI) { // Moderate Air Quality
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
display.println(" - Moderate 😐");
}
else if (airQuality >= MODERATE_AQI && airQuality < POOR_AQI) { // Poor Air Quality
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER, HIGH);
display.println(" - Poor! ⚠️");
}
else { // Extremely Poor Air Quality
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER, HIGH);
display.println(" - Hazardous!! 🚨");
}
display.display();
delay(2000); // Update every 2 seconds
}