โปรเจคนี้ออกแบบมาเพื่อสร้างเครื่องวัดฝุ่น PM2.5 และตรวจสอบอุณหภูมิ/ความชื้นโดยใช้ Arduino Uno R3 พร้อมเซ็นเซอร์วัดฝุ่น Keyestudio GP2Y1014AU และ วัด อุณหภูมิ/ความชื้น ด้วย DHT22 แสดงผลที่ หน้าจอ LCD 1602 นอกจากนี้ยังมีการแจ้งเตือนด้วยเสียงผ่าน Standard Passive Speaker Buzzer Module เมื่อค่าฝุ่น PM2.5 เท่ากับหรือเกิน 300 µg/m³ เพื่อเพิ่มความสะดวกและปลอดภัยในการเฝ้าระวังคุณภาพอากาศ
อธิบายการทำงาน
- เซ็นเซอร์ GP2Y1014AU ใช้ตรวจจับความเข้มข้นของฝุ่น PM2.5 และส่งค่าออกมาเป็นแรงดันไฟฟ้าที่แปลงเป็นหน่วย µg/m³
- เซ็นเซอร์ DHT22 ตรวจวัดอุณหภูมิและความชื้นแล้วส่งค่าไปยัง Arduino
- เมื่อค่าฝุ่น PM2.5 มีค่า ≥ 300 µg/m³ ระบบจะส่งสัญญาณไปยัง Buzzer เพื่อแจ้งเตือนด้วยเสียง
- ข้อมูลทั้งหมดจะแสดงผลที่จอ LCD
หน่วยวัดค่าฝุ่น PM2.5 ใช้ ไมโครกรัมต่อเมตรลูกบาศก์ (µg/m³) ซึ่งหมายถึงปริมาณของฝุ่นละอองขนาดเล็กที่มีเส้นผ่านศูนย์กลางไม่เกิน 2.5 ไมครอนที่มีอยู่ในอากาศ 1 ลูกบาศก์เมตร
รายละเอียด:
- PM2.5 หมายถึงฝุ่นละอองขนาดเล็กที่สามารถเข้าสู่ระบบทางเดินหายใจและกระแสเลือดได้ง่าย
- หน่วยนี้ใช้ในการตรวจสอบคุณภาพอากาศและเป็นตัวบ่งชี้ที่สำคัญของมลพิษทางอากาศ
- ค่า PM2.5 ที่สูงเกินเกณฑ์มาตรฐาน อาจส่งผลกระทบต่อสุขภาพ เช่น โรคทางเดินหายใจหรือโรคหัวใจ
ข้อมูลเปรียบเทียบกับคุณภาพอากาศ:
3000 + = Very Bad
1050-3000 = Bad
300-1050 = Ordinary
150-300 = Good
75-150 = Very Good
0-75 = Tiptop
1. อุปกรณ์ที่ใช้
1. เซ็นเซอร์วัดฝุ่น PM2.5 Keyestudio GP2Y1014AU
2. DHT22 Temperature and Humidity Sensor
3. Arduino UNO R3
4. Sensor Shield V 5.0
5.โมดูล I2C LCD พร้อมหน้าจอ LCD 1602
6. Standard Passive Speaker Buzzer Module
7. Jumper (F2F) 20cm Female to Female
8. แผ่นอะคริลิคใส
9. เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 8 mm
10. เสารองแผ่นพีซีบีแบบโลหะ ยาว 25 มม.
11. Adapter DC 9V 1A Power Supply
2 . การต่อวงจร
ประกอบ sensor shield v 5.0 เข้า กับ Arduino Uno R3
Arduino Shield เวอร์ชัน 5 บอร์ดขยายพอร์ท Arduino สำหรับเสียบกับสายเซนเซอร์ หรืออุปกรณ์ต่อพ่วงต่าง ๆ ได้อย่างสะดวก
Arduino ทุกเวอร์ชั่น (ยกเว้นพวกที่เป็น SMD และ เวอร์ชั่นที่ทำขึ้นกันเอง) จะถูกออกแบบให้มี Layout ของ Pin ต่างๆในรูปแบบเดียวกัน เพื่อให้สามารถใช้อุปกรณ์เสริมหลายๆอย่างร่วมกันได้ โดยวิธี Plug n’ play หมายถึงแค่เสียบลงไปแล้วก็นำไปใช้งานได้เลย …. ทำให้อุปกรณ์เสริมที่นำมาใช้ต่อพ่วงร่วมกันเรียกว่า Shield (ซึ่งหมายถึง เกราะ หรืออะไรประมาณนั้น ประมาณว่า สวมเกราะเสร็จ ออกไปรบได้เลย)
Shield ส่วนใหญ่จะใช้ ICSP Connector ในการเชื่อมต่อกับ Arduino board (หรือ Galileo board) โดยเมื่อเชื่อมต่อ Shield แล้วเรายังสามารถใช้งาน Digital pin และ Analog pin บางอันได้อยู่
เชื่อมต่อสาย จอ LCD 1602

เชื่อมต่อสาย DHT22

เชื่อมต่อสาย Buzzer

เชื่อมต่อสาย Buzzer

- OUT <-> A0
- LED <-> 4
- GND <-> G
- VCC <-> V
3. อัพโหลดโค้ด

ติดตั้ง Arduino IDE
https://www.arduino.cc/en/software

โค้ด
#include <Wire.h> // ใช้สำหรับการสื่อสาร I2C ระหว่างไมโครคอนโทรลเลอร์และอุปกรณ์ต่าง ๆ
#include <LiquidCrystal_I2C.h> // ไลบรารีสำหรับควบคุมจอ LCD ผ่าน I2C
#include <DHT.h>; // ไลบรารีสำหรับเซ็นเซอร์ DHT
#define DHTPIN 2 // กำหนดขา 2 สำหรับเซ็นเซอร์ DHT
#define DHTTYPE DHT22 // ระบุประเภทของเซ็นเซอร์ DHT (DHT22)
DHT dht(DHTPIN, DHTTYPE); // สร้างอ็อบเจ็กต์ DHT
LiquidCrystal_I2C lcd(0x27, 16, 2); // สร้างอ็อบเจ็กต์ LCD I2C (ที่อยู่ 0x27, ขนาด 16x2)
int measurePin = 0; // กำหนดขา 0 สำหรับอ่านข้อมูลจากเซ็นเซอร์ฝุ่น
int ledPower = 4; // กำหนดขา 4 สำหรับควบคุมไฟ LED ของเซ็นเซอร์ฝุ่น
int samplingTime = 280; // เวลาสำหรับการเก็บข้อมูล (280 ไมโครวินาที)
int deltaTime = 40; // เวลาหน่วงระหว่างการอ่านข้อมูล (40 ไมโครวินาที)
int sleepTime = 9680; // เวลารอของเซ็นเซอร์ก่อนอ่านค่าใหม่ (9680 ไมโครวินาที)
float voMeasured = 0; // ค่าแรงดันที่อ่านได้จากเซ็นเซอร์
float calcVoltage = 0; // ค่าแรงดันที่คำนวณได้
float dustDensity = 0; // ความหนาแน่นของฝุ่น (ug/m3)
float temp; // ตัวแปรสำหรับเก็บค่าอุณหภูมิ
float humi; // ตัวแปรสำหรับเก็บค่าความชื้น
float set_dust; // ค่าเกณฑ์สำหรับความหนาแน่นฝุ่น
int buzzer = 8; // กำหนดขา 8 สำหรับควบคุมเสียง buzzer
void setup() {
Serial.begin(9600); // เริ่มต้นการสื่อสารผ่าน Serial ที่ความเร็ว 9600 bps
dht.begin(); // เริ่มต้นการใช้งานเซ็นเซอร์ DHT
lcd.init(); // เริ่มต้นการใช้งานจอ LCD
lcd.backlight(); // เปิดไฟ backlight ของจอ LCD
pinMode(buzzer, OUTPUT); // ตั้งค่าขา buzzer เป็นขา OUTPUT
pinMode(ledPower, OUTPUT); // ตั้งค่าขา ledPower เป็นขา OUTPUT
set_dust = 300; // ตั้งค่าเกณฑ์ฝุ่นที่ 300 ug/m3
}
void loop() {
temp = dht.readTemperature(); // อ่านค่าอุณหภูมิจากเซ็นเซอร์ DHT
humi = dht.readHumidity(); // อ่านค่าความชื้นจากเซ็นเซอร์ DHT
digitalWrite(ledPower, LOW); // เปิดใช้งานเซ็นเซอร์ฝุ่น
delayMicroseconds(samplingTime); // รอเวลาเพื่อให้ได้ค่าการวัดที่เสถียร
voMeasured = analogRead(measurePin); // อ่านค่าจากเซ็นเซอร์ฝุ่น
delayMicroseconds(deltaTime); // หน่วงเวลาเล็กน้อย
digitalWrite(ledPower, HIGH); // ปิดการทำงานเซ็นเซอร์ฝุ่น
delayMicroseconds(sleepTime); // รอเวลาให้เซ็นเซอร์พร้อมสำหรับการวัดครั้งถัดไป
calcVoltage = voMeasured * (5.0 / 1024.0); // แปลงค่า ADC เป็นแรงดันไฟฟ้า
dustDensity = 170 * calcVoltage - 0.1; // คำนวณค่าความหนาแน่นของฝุ่น (สูตรเฉพาะ)
if (dustDensity >= set_dust) { // ถ้าค่าฝุ่นเกินค่าเกณฑ์ที่กำหนด
lcd.setCursor(0, 0); // ตั้งตำแหน่ง cursor ที่บรรทัดแรก
lcd.print("T:" + String(temp) + "C/H:" + String(humi)); // แสดงค่าอุณหภูมิและความชื้น
lcd.setCursor(0, 1); // ตั้งตำแหน่ง cursor ที่บรรทัดที่สอง
lcd.print("DUST:" + String(dustDensity) + (" ug/m3\n")); // แสดงค่าฝุ่น
buzzer_on(); // เปิด buzzer แจ้งเตือน
} else {
lcd.setCursor(0, 0); // ตั้งตำแหน่ง cursor ที่บรรทัดแรก
lcd.print("T:" + String(temp) + "C/H:" + String(humi)); // แสดงค่าอุณหภูมิและความชื้น
lcd.setCursor(0, 1); // ตั้งตำแหน่ง cursor ที่บรรทัดที่สอง
lcd.print("DUST:" + String(dustDensity) + (" ug/m3\n")); // แสดงค่าฝุ่น
}
delay(1000); // รอ 1 วินาที ก่อนเริ่มรอบถัดไป
}
void buzzer_on() {
unsigned char i, j; // ตัวแปรสำหรับใช้ในลูปการแจ้งเตือน
for (i = 0; i < 80; i++) { // ลูปแจ้งเตือนแรก
digitalWrite(buzzer, HIGH); // เปิด buzzer
delay(1); // หน่วงเวลา 1 มิลลิวินาที
digitalWrite(buzzer, LOW); // ปิด buzzer
delay(1); // หน่วงเวลา 1 มิลลิวินาที
}
for (i = 0; i < 100; i++) { // ลูปแจ้งเตือนที่สอง
digitalWrite(buzzer, HIGH); // เปิด buzzer
digitalWrite(buzzer, LOW); // ปิด buzzer
delay(2); // หน่วงเวลา 2 มิลลิวินาที
}
}
ตรวจสอบ Port ของบอร์ด Arduino โดย คลิกที่ Device Manager

ที่ Ports (COM & LPT) จะพบ Port ของบอร์ด Arduino ในตัวอย่างเป็น Arduino Uno (COM19)

ไปที่ Tools -> Board -> Arduino AVR Boards -> Arduino Uno

เลือก Port โดยไปที่ Tools -> Port -> COM19
(โดย COM19 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)


คลิกที่ Upload

รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
