เครื่องวัดคุณภาพอากาศด้วยเซ็นเซอร์ GP2Y1010AU0F
nextbackseo@gmail.com | Posted on |
สารบัญ
Toggleเครื่องวัดคุณภาพอากาศด้วยเซ็นเซอร์ GP2Y1010AU0F
เครื่องวัดคุณภาพอากาศด้วยเซ็นเซอร์ GP2Y1010AU0F บน ESP8266 NodeMCU ด้วย MicroPython และส่งข้อมูลไปยัง MySQL อธิบายการสร้างเครื่องวัดคุณภาพอากาศโดยใช้เซ็นเซอร์วัดฝุ่น GP2Y1010AU0F ร่วมกับบอร์ด ESP8266 NodeMCU ที่เขียนโปรแกรมด้วย MicroPython พร้อมส่งข้อมูลที่วัดได้ไปยังฐานข้อมูล MySQL เพื่อนำไปใช้งานต่อ เช่น การแสดงผลผ่าน Dashboard หรือการแจ้งเตือนแบบ Real-time GP2Y1010AU0F เป็นเซ็นเซอร์วัดฝุ่นละอองแบบออปติคอลจาก Sharp ที่สามารถตรวจจับอนุภาคฝุ่นที่มีขนาดเล็กกว่า 0.8 ไมโครเมตรได้ โดยหลักการทำงานจะใช้ LED อินฟราเรดและโฟโตทรานซิสเตอร์ที่จัดวางในแนวทแยงเพื่อตรวจจับแสงที่สะท้อนจากอนุภาคฝุ่นในอากาศ ค่าเอาต์พุตจะเป็นแรงดันไฟฟ้าแอนะล็อกซึ่งแปรผันตามความหนาแน่นของฝุ่น ซึ่งเป็นสาเหตุที่เซ็นเซอร์ตัวนี้ได้รับความนิยมในงานเครื่องฟอกอากาศและระบบตรวจสอบคุณภาพอากาศ ส่วนประกอบฮาร์ดแวร์และวงจร ส่วนประกอบที่ต้องเตรียมมีดังนี้ เครื่องวัดคุณภาพอากาศด้วยเซ็นเซอร์ GP2Y1010AU0F
- ESP8266 NodeMCU บอร์ดหลักสำหรับประมวลผลและเชื่อมต่อ WiFi
- GP2Y1010AU0F เซ็นเซอร์วัดฝุ่นละออง
- ตัวต้านทาน 150Ω สำหรับจำกัดกระแสให้ LED ภายในเซ็นเซอร์
- ตัวเก็บประจุ 220µF สำหรับกรองสัญญาณรบกวน
- สายไฟจัมเปอร์
- GP2Y1010AU0F มีขาทั้งหมด 6 ขา โดยขาที่สำคัญในการเชื่อมต่อคือ
- VCC +5V
- ND Ground
- LED ขาควบคุมไฟ LED (ใช้ GPIO เพื่อเปิด-ปิด)
- OUT ขาเอาต์พุตแบบแอนะล็อก (ต่อกับ ADC ของ ESP8266)
การเขียนโปรแกรมด้วย Micro Python
การต่อวงจร ต่อขา VCC ของเซ็นเซอร์เข้ากับ +5V ของ ESP8266 ต่อขา GND เข้ากับ GND ต่อขา LED เข้ากับ GPIO pin (เช่น GPIO4) ต่อขา OUT เข้ากับขา A0 (ADC) ของ ESP8266 ต่อตัวต้านทาน 150Ω ระหว่าง VCC และขา LED ต่อตัวเก็บประจุ 220µF ระหว่าง VCC และ GND เพื่อลดสัญญาณรบกวน ข้อควรระวัง ESP8266 ทำงานด้วยแรงดัน 3.3V ในขณะที่เอาต์พุตของเซ็นเซอร์ (ขา OUT) มีช่วงแรงดันที่สูงกว่าได้ ดังนั้นการใช้ตัวแบ่งแรงดัน (voltage divider) เพื่อลดแรงดันให้ไม่เกิน 3.3V อาจมีความจำเป็นเพื่อป้องกันความเสียหายของพอร์ต ADC ของ ESP8266 การเขียนโปรแกรมด้วย Micro Python ขั้นตอนการทำงานของเซ็นเซอร์ เซ็นเซอร์ GP2Y1010AU0F ต้องได้รับการกระตุ้น (trigger) ด้วยการเปิดไฟ LED ก่อนทำการอ่านค่า โดยมีลำดับการทำงานดังนี้ เปิดไฟ LED ที่ขา LED รอเวลา sampling time ประมาณ 0.28 มิลลิวินาที อ่านค่าแอนะล็อกจากขา OUT รอเวลา delta time ประมาณ 0.04 มิลลิวินาที ปิดไฟ LED รอเวลา sleep time ประมาณ 9.68 มิลลิวินาที ก่อนเริ่มรอบใหม่
- โค้ดตัวอย่างการอ่านค่าด้วย MicroPython
from machine import Pin, ADC
import time
# กำหนดขา
led_pin = Pin(4, Pin.OUT) # ขาควบคุมไฟ LED ของเซ็นเซอร์
adc = ADC(0) # ขา A0 สำหรับอ่านค่าแอนะล็อก
# พารามิเตอร์เวลา (หน่วยเป็น microseconds)
sampling_time = 280
delta_time = 40
sleep_time = 9680
def read_dust_density():
# เปิดไฟ LED
led_pin.off()
time.sleep_us(sampling_time)
# อ่านค่าแอนะล็อก
raw_value = adc.read()
# ปิดไฟ LED
led_pin.on()
time.sleep_us(delta_time)
time.sleep_us(sleep_time)
# แปลงค่าแรงดันไฟฟ้า (ESP8266 ADC อ่านค่า 0-1023 ที่ 0-1V)
voltage = raw_value * (1.0 / 1024.0) # แรงดันอ้างอิง 1V
# แปลงเป็นความหนาแน่นฝุ่น (หน่วย µg/m³)
# สมการเชิงเส้นจาก Chris Nafis: dustDensity = (0.17 * voltage – 0.1) * 1000
dust_density = (0.17 * voltage – 0.1) * 1000.0
return dust_density
การเชื่อมต่อ WiFi และการส่งข้อมูลไปยัง MySQL
การเชื่อมต่อ WiFi และการส่งข้อมูลไปยัง MySQL MicroPython บน ESP8266 มีข้อจำกัดด้านหน่วยความจำ (RAM) ค่อนข้างมาก การเชื่อมต่อฐานข้อมูล MySQL โดยตรงอาจทำได้ยาก วิธีที่แนะนำคือใช้ API (Web Service) เป็นตัวกลางระหว่าง ESP8266 และ MySQL สถาปัตยกรรมที่แนะนำ ESP8266 อ่านค่าจากเซ็นเซอร์และส่งข้อมูลไปยัง Web Server ผ่าน HTTP Request (GET/POST) Web Server รับข้อมูลจาก ESP8266 แล้วเขียนลงฐานข้อมูล MySQL MySQL Database เก็บข้อมูลสำหรับการแสดงผลและวิเคราะห์
import network
import urequests
import json
# การเชื่อมต่อ WiFi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(“SSID”, “PASSWORD”)
# รอเชื่อมต่อ
while not wifi.isconnected():
time.sleep(1)
# ฟังก์ชันส่งข้อมูลไปยัง API
def send_to_server(dust_value):
url = “http://your-server.com/api/insert_data.php”
data = {“dust”: dust_value}
headers = {“Content-Type”: “application/json”}
try:
response = urequests.post(url, json=data, headers=headers)
print(“Response:”, response.text)
response.close()
except Exception as e:
print(“Error:”, e)
- ฝั่ง Web Server (PHP example)
<?php
// insert_data.php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “air_quality”;
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die(“Connection failed: ” . $conn->connect_error);
}
$data = json_decode(file_get_contents(‘php://input’), true);
$dust = $data[‘dust’];
$timestamp = date(‘Y-m-d H:i:s’);
$sql = “INSERT INTO readings (timestamp, dust_density) VALUES (‘$timestamp’, ‘$dust’)”;
$conn->query($sql);
$conn->close();
?>
การปรับปรุงความแม่นยำ
การปรับปรุงความแม่นยำเพื่อให้ค่าที่วัดได้มีความน่าเชื่อถือมากขึ้น ควรทำการอ่านค่าหลายครั้งแล้วนำมาหาค่าเฉลี่ย ดังตัวอย่างจากโค้ด Arduino ที่แนะนำให้อ่าน 10 รอบแล้วเฉลี่ยก่อนส่งผลลัพธ์
def read_average(num_samples=10):
total = 0
for _ in range(num_samples):
total += read_dust_density()
time.sleep_ms(50)
return total / num_samples
สมการที่ใช้แปลงค่าแรงดันเป็นความหนาแน่นฝุ่น ((0.17 * voltage 0.1) * 1000) ได้รับการพัฒนาและทดสอบโดย Chris Nafis และถูกใช้กันอย่างแพร่หลายในชุมชน ซึ่งจะให้ค่าออกมาในหน่วย µg/m³ โดยค่าที่อ่านได้จะมีหน่วยเป็นไมโครกรัมต่อลูกบาศก์เมตร ด้วย ESP8266 NodeMCU และเซ็นเซอร์ GP2Y1010AU0F ที่เขียนโปรแกรมด้วย MicroPython คุณสามารถสร้างระบบตรวจสอบคุณภาพอากาศที่มีประสิทธิภาพและประหยัดได้ การเลือกใช้สถาปัตยกรรมที่แยกส่วนระหว่างการอ่านค่าเซ็นเซอร์และการจัดเก็บข้อมูลผ่าน Web API ช่วยลดภาระการประมวลผลบน ESP8266 และเพิ่มความยืดหยุ่นให้ระบบ การใช้งานจริงควรคำนึงถึงการลดสัญญาณรบกวน การปรับเทียบค่า และการจัดการพลังงานเพื่อให้ระบบทำงานได้อย่างต่อเนื่องและเชื่อถือได้
Arduino IDE, Arduino UNO คือ, Arduino โค้ด, Arduino โหลด, Arduino คือ, Arduino ต่อ Relay, Arduino บอร์ด, Sensor ตรวจจับวัตถุ Arduino, เขียน Arduino, เขียน Code Arduino, เซ็นเซอร์ Arduino, เซ็นเซอร์อุณหภูมิ Arduino, เรียน Arduino, โค้ด Arduino, โค้ด Arduino เซ็นเซอร์, โค้ด Arduino ง่ายๆ, โปรเจค Arduino เซ็นเซอร์อุณหภูมิ, โปรแกรม Arduino, โปรแกรม Arduino IDE, โปรแกรม Arduino UNO, ใช้ Arduino, กล้อง Arduino, ข้อมูล Arduino, ขาย Arduino, คู่มือ Arduino, ซอฟต์แวร์ Arduino, ซื้อ Arduino, ต่อ Arduino, ต่อ LCD กับ Arduino, นวัตกรรม Arduino, บอร์ด Arduino, ร้าน Arduino, ร้านขายอุปกรณ์อิเล็ค, วงจร Arduino, สอน Arduino, ออกแบบ Arduino, อุปกรณ์ Arduino, อุปกรณ์ Sensor Arduino
ใส่ความเห็น