This circuit is designed to monitor air quality by measuring temperature, humidity, gas concentration, and dust density. It uses an Arduino UNO microcontroller to process sensor data and display the results on an OLED screen. The circuit also includes LEDs and a buzzer to provide visual and auditory alerts based on the air quality index (AQI).
Arduino UNO
GP2Y1010AU0F
Resistor
Electrolytic Capacitor
LED: Two Pin (yellow)
LED: Two Pin (green)
LED: Two Pin (red)
OLED 1.3"
DHT22
MQ 135
Buzzer
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define MQ135_PIN A0
#define DUST_SENSOR_LED 3
#define DUST_SENSOR_OUT A1
#define GREEN_LED 4
#define YELLOW_LED 5
#define RED_LED 6
#define BUZZER 7
void setup() {
Serial.begin(9600);
dht.begin();
if (!display.begin(0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
pinMode(DUST_SENSOR_LED, OUTPUT);
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);
}
void loop() {
float humidity = dht.readHumidity();
float temperatureC = dht.readTemperature();
if (isnan(humidity) || isnan(temperatureC)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
int mq135_value = analogRead(MQ135_PIN);
float gasQuality = map(mq135_value, 0, 1023, 0, 500);
digitalWrite(DUST_SENSOR_LED, LOW);
delayMicroseconds(280);
int dustValue = analogRead(DUST_SENSOR_OUT);
digitalWrite(DUST_SENSOR_LED, HIGH);
delayMicroseconds(9680);
float dustDensity = (dustValue - 500) * 0.5;
float combinedAQI = (gasQuality + dustDensity) / 2;
Serial.print("Temp: "); Serial.print(temperatureC); Serial.print(" C, ");
Serial.print("Humidity: "); Serial.print(humidity); Serial.print(" %, ");
Serial.print("Gas AQI: "); Serial.print(gasQuality);
Serial.print(", Dust Density: "); Serial.print(dustDensity);
Serial.print(" ug/m3, Combined AQI: "); Serial.println(combinedAQI);
if (combinedAQI <= 50) {
digitalWrite(GREEN_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
} else if (combinedAQI > 50 && combinedAQI <= 150) {
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
} else {
digitalWrite(GREEN_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER, HIGH);
}
display.clearDisplay();
display.setTextSize