การตรวจวัดคุณภาพอากาศ
การตรวจสอบคุณภาพอากาศโดยการวัดมลพิษจากปริมาณก๊าซที่อยู่ในอากาศ
โค้ดสำหรับโปรเจกต์:
/* ระบบตรวจวัดมลพิษทางอากาศ
โดยใช้ Arduino และ MQ135 Air Quality Sensor
www.Electroduino.com
*/
#include "MQ135.h"
//ไลบรารีสำหรับจอแสดงผล OLED
#include
#include
#include
#include
#define SCREEN_WIDTH 128 // ความกว้างของจอแสดงผล OLED หน่วยเป็นพิกเซล
#define SCREEN_HEIGHT 64 // ความสูงของจอแสดงผล OLED หน่วยเป็นพิกเซล
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//อินพุตและเอาต์พุต
int RedLed = 9;
int GreenLed = 8;
int Buzzer = 7;
void setup()
{
pinMode(RedLed, OUTPUT); // กำหนดค่าขา RedLed แบบดิจิทัลเป็นเอาต์พุต
pinMode(GreenLed, OUTPUT); // กำหนดค่าขา GreenLed แบบดิจิทัลเป็นเอาต์พุต
pinMode(Buzzer, OUTPUT); // กำหนดค่าขา Buzzer แบบดิจิทัลเป็นเอาต์พุต
// เริ่มการสื่อสารอนุกรมระหว่าง Arduino และคอมพิวเตอร์ของคุณ
Serial.begin(9600);
//เริ่มต้นด้วยแอดเดรส I2C 0x3C (128x64)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
delay(10);
// แสดงข้อความบนจอ
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("ELECTRODUIN0"); // แสดงข้อความ
display.display();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 20);
display.println("Air Pollution");
display.display();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 35);
display.println(" Monitoring");
display.display();
delay(2000);
}
void loop()
{
// อ่านค่าจากเซ็นเซอร์
MQ135 gasSensor = MQ135(A0);
float air_quality = gasSensor.getPPM();
// แสดงค่าจากเซ็นเซอร์บนหน้าต่าง Serial Monitor
Serial.print("Air Quality: ");
Serial.print(air_quality);
Serial.println(" PPM");
Serial.println();
//แสดงค่าจากเซ็นเซอร์หรือดัชนีคุณภาพอากาศบนจอแสดงผล OLED
display.clearDisplay();
display.setCursor(0, 0); //ตำแหน่งบนจอแสดงผล OLED
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("Air Quality Index");
display.setCursor(0, 20); //ตำแหน่งบนจอแสดงผล OLED
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(air_quality);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(" PPM");
display.display();
// เมื่อค่าคุณภาพอากาศน้อยกว่า 1000 PPM
if (air_quality<=1000)
{
digitalWrite(GreenLed, HIGH); // เปิดไฟ Green LED
digitalWrite(RedLed, LOW); // ปิดไฟ Red LED
noTone(Buzzer); // ปิด Buzzer
// แสดงข้อความบนจอแสดงผล OLED
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 45);
display.println("Fresh Air"); // ข้อความ
display.display();
delay(2000);
}
// เมื่อค่าคุณภาพอากาศมากกว่า 1000 PPM และน้อยกว่า 2000 PPM
elseif( air_quality>=1000 && air_quality<=2000 )
{
digitalWrite(GreenLed, LOW); // ปิดไฟ Green LED
digitalWrite(RedLed, HIGH ); // เปิดไฟ Red LED
noTone(Buzzer); // ปิด Buzzer
// แสดงข้อความบนจอแสดงผล OLED
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 45);
display.println(" Poor Air"); // ข้อความ
display.display();
delay(2000);
}
// เมื่อค่าคุณภาพอากาศมากกว่า 2000 PPM
elseif (air_quality>=2000 )
{
digitalWrite(GreenLed, LOW); // ปิดไฟ Green LED
digitalWrite(RedLed, HIGH); // เปิดไฟ Red LED
tone(Buzzer, 1000, 200); // เปิด Buzzer
// แสดงข้อความบนจอแสดงผล OLED
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 45);
display.println("Danger!!"); // ข้อความ
display.display();
delay(2000);
}
}
รายละเอียดทางเทคนิคเพิ่มเติม
การวิเคราะห์สารเคมีแบบพกพา
โปรเจกต์นี้จัดหาเครื่องมือที่ใช้งานง่ายสำหรับการระบุมลพิษทางอากาศภายในอาคารและ VOCs (Volatile Organic Compounds)
- Multi-Pollutant Sensing: ผนวก MQ-135 sensor (สำหรับ CO2, Alcohol, ควัน) และ SDS011 sensor (สำหรับฝุ่นละออง PM2.5/PM10) โดย Arduino จะเก็บตัวอย่างข้อมูลอินพุตเหล่านี้ทุกๆ 2 วินาที
- Health-Index Dashboard: แสดง "คะแนนคุณภาพอากาศ" ที่คำนวณได้ (ตั้งแต่ 0 ถึง 500) บน I2C OLED ที่มีคอนทราสต์สูง โดยใช้การแจ้งเตือนแบบรหัสสีเพื่อระบุสภาวะที่ปลอดภัยเทียบกับสภาวะอันตราย
การบันทึกข้อมูล
- Calibration Routine: มีขั้นตอน "อากาศบริสุทธิ์" ในซอฟต์แวร์ตอนเริ่มต้น เพื่อให้แน่ใจว่า MQ sensors วัดการเปลี่ยนแปลงสัมพัทธ์ได้อย่างแม่นยำ