📋 เนื้อหาในบทความ
🔍 ภาพรวม BME688 Gas Sensor
BME688 เป็นเซนเซอร์อัจฉริยะรุ่นล่าสุดจาก Bosch ที่มาพร้อมเทคโนโลยี AI สำหรับตรวจจับก๊าซ โดยเฉพาะ Volatile Organic Compounds (VOCs) และ Volatile Sulfur Compounds (VSCs) ซึ่งเป็นก๊าซที่เกิดจากการเผาไหม้ การสลายตัวของสารเคมี และกิจกรรมของมนุษย์
เซนเซอร์ตัวนี้รวมทุกอย่างไว้ในชิปเดียว:
- Temperature - วัดอุณหภูมิ
- Humidity - วัดความชื้น
- Pressure - วัดความดันบรรยากาศ
- Gas Sensing - ตรวจจับก๊าซ VOC ด้วย AI
💡 เกร็ดความรู้: BME688 เป็นเซนเซอร์ตัวแรกของโลกที่มี AI built-in สำหรับการวิเคราะห์ก๊าซ สามารถฝึกโมเดล AI ของคุณเองเพื่อตรวจจับกลิ่นเฉพาะได้!
✨ คุณสมบัติเด่นของ BME688
🤖 AI-Powered Gas Detection
ใช้เทคโนโลยี AI ในการวิเคราะห์รูปแบบก๊าซ สามารถแยกแยะประเภทก๊าซได้หลากหลาย เหมาะสำหรับแอปพลิเคชันที่ต้องการความแม่นยำสูง
🌡️ 4-in-1 Sensor
วัดอุณหภูมิ (-40 ถึง 85°C), ความชื้น (0-100%), ความดัน (300-1100 hPa), และก๊าซในชิปเดียว ประหยัดพื้นที่และต้นทุน
⚡ Ultra-Low Power
โหมดประหยัดพลังงาน ใช้กระแสเพียง 0.5 µA ในโหมด sleep เหมาะสำหรับโปรเจกต์แบตเตอรี่
🔌 I2C Interface
ใช้งานง่ายด้วยบัส I2C เชื่อมต่อกับ ESP32, Arduino, หรือไมโครคอนโทรลเลอร์อื่นๆ
🛠️ อุปกรณ์ที่ต้องใช้
Hardware
- ESP32 Board หรือ Arduino (แนะนำ ESP32)
- BME688 Sensor Module (~฿600)
- Jumper Wires ( female-to-male)
- Breadboard (ไม่บังคับ)
Software
- Arduino IDE หรือ PlatformIO
- BSEC2 Library (Bosch)
- Adafruit BME688 Library
- CynoIoT Account (ฟรี)
💡 หมายเหตุ: BME688 มี 2 เวอร์ชัน: แบบ Breakout Board (ใช้ง่าย) และแบบ Chip (ต้องบัดกรี) แนะนำให้ใช้ Breakout Board สำหรับผู้เริ่มต้น
🔌 การต่อสาย BME688 กับ ESP32
| BME688 Pin | ESP32 Pin | หมายเหตุ |
|---|---|---|
| VIN / VCC | 3.3V | ใช้ 3.3V เท่านั้น |
| GND | GND | Ground |
| SCL | GPIO 22 | I2C Clock |
| SDA | GPIO 21 | I2C Data |
⚠️ คำเตือน: อย่าเชื่อมต่อ BME688 กับ 5V เด็ดขาด! อาจทำให้เซนเซอร์เสียหายได้ ใช้เฉพาะ 3.3V เท่านั้น
📚 การติดตั้ง Library
เราจะใช้ 2 Library หลัก:
1. Adafruit BME688 Library
เปิด Arduino IDE → ไปที่ Sketch → Include Library → Manage Libraries
ค้นหา: "Adafruit BME688" → ติดตั้ง
2. Adafruit Unified Sensor
เปิด Arduino IDE → ไปที่ Sketch → Include Library → Manage Libraries
ค้นหา: "Adafruit Unified Sensor" → ติดตั้ง
3. BSEC2 Library (Optional, สำหรับ AI Features)
ดาวน์โหลดจาก GitHub และติดตั้งแบบ手动
💻 โค้ดพื้นฐาน: อ่านค่า BME688
#include <Wire.h>
#include <Adafruit_BME688.h>
// สร้างออบเจกต์เซนเซอร์
Adafruit_BME688 bme;
// ตั้งค่า I2C address (เริ่มต้นคือ 0x77)
// ถ้าไม่ได้ ลองเปลี่ยนเป็น 0x76
void setup() {
Serial.begin(115200);
delay(1000); // รอให้ Serial เริ่มทำงาน
Serial.println("BME688 Gas Sensor Test");
// เริ่มต้นใช้งาน I2C
Wire.begin();
// เริ่มต้นใช้งาน BME688
if (!bme.begin()) {
Serial.println("ไม่พบเซนเซอร์ BME688! ตรวจสอบการต่อสาย");
while (1);
}
// ตั้งค่าความละเอียด (oversampling)
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
// ตั้งค่าการอ่านค่าก๊าซ
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320°C นาน 150ms
Serial.println("เริ่มต้นใช้งานสำเร็จ!");
}
void loop() {
// บอกเซนเซอร์ให้เริ่มวัดค่า
if (!bme.performReading()) {
Serial.println("ไม่สามารถอ่านค่าได้");
return;
}
// อ่านค่าต่างๆ
Serial.println("--------- ข้อมูลเซนเซอร์ ---------");
Serial.print("อุณหภูมิ: ");
Serial.print(bme.temperature);
Serial.println(" °C");
Serial.print("ความชื้น: ");
Serial.print(bme.humidity);
Serial.println(" %");
Serial.print("ความดัน: ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");
Serial.print("ค่าก๊าซ: ");
Serial.print(bme.gas_resistance);
Serial.println(" Ohms");
Serial.print("ดัชนีคุณภาพอากาศ (IAQ): ");
// คำนวณ IAQ แบบง่าย (ยิ่งน้อยยิ่งดี)
float iaq = calculateIAQ(bme.gas_resistance, bme.humidity);
Serial.print(iaq);
Serial.println(" (0-500)");
Serial.println("-------------------------------");
Serial.println();
delay(2000); // อ่านทุกๆ 2 วินาที
}
// ฟังก์ชันคำนวณ IAQ แบบง่าย
float calculateIAQ(float gasResistance, float humidity) {
// นี่เป็นการคำนวณแบบง่ายๆ
// ค่าที่ดีควรอยู่ระหว่าง 0-100
// ยิ่งก๊าซมาก ยิ่งแย่
float iaq = 50000.0 / gasResistance;
// ปรับค่าตามความชื้น
if (humidity > 60 || humidity < 30) {
iaq *= 1.2;
}
return iaq;
}🌫️ การตรวจจับก๊าซ VOC
BME688 สามารถตรวจจับก๊าซ VOC ได้หลากหลายประเภท:
- 🏭 สารจากโรงงาน - เบนซิน, โทลูอีน, ไซลีน
- 🏠 ก๊าซในบ้าน - ก๊าซหุงต้ม, ควันบุหรี่, น้ำมัน
- 🌿 ก๊าศจากธรรมชาติ - จากพืช, ดิน
- 👃 กลิ่นร่างกาย - เหงื่อ, ลมหายใจ
💡 เกร็ดความรู้: ค่า Gas Resistance ที่สูงแปลว่าอากาศสะอาด (ก๊าีน้อย) ส่วนค่าที่ต่ำแปลว่ามีก๊าีเยอะ (อากาศไม่ดี)
โค้ดตรวจจับคุณภาพอากาศ
// ฟังก์ชันตรวจสอบคุณภาพอากาศ
String checkAirQuality(float gasResistance) {
// ค่า gas resistance หน่วยเป็น Ohm
// ยิ่งค่ามาก อากาศยิ่งดี
if (gasResistance > 100000) {
return "ดีมาก ✅"; // Excellent
} else if (gasResistance > 50000) {
return "ดี 👍"; // Good
} else if (gasResistance > 20000) {
return "ปานกลาง 😐"; // Moderate
} else if (gasResistance > 10000) {
return "แย่ ⚠️"; // Poor
} else {
return "อันตราย 🚨"; // Hazardous
}
}
// ใช้งานใน loop()
void loop() {
// ... โค้ดอ่านค่าเซนเซอร์ ...
String quality = checkAirQuality(bme.gas_resistance);
Serial.print("คุณภาพอากาศ: ");
Serial.println(quality);
// แจ้งเตือนถ้าอากาศแย่
if (bme.gas_resistance < 10000) {
Serial.println("⚠️ เตือน: อากาศไม่ดี! เปิดระบายอากาศด่วน");
// ส่งแจ้งเตือนไปยัง CynoIoT ได้ที่นี่
}
delay(2000);
}🔗 การเชื่อมต่อกับ CynoIoT Platform
เชื่อมต่อ BME688 กับ CynoIoT Platform เพื่อ:
- 📊 ตรวจสอบข้อมูลแบบ Real-time
- 📈 ดูกราฟประวัติคุณภาพอากาศ
- 🔔 รับแจ้งเตือนเมื่ออากาศแย่
- 📱 ตรวจสอบผ่านมือถือ
ตัวอย่างโค้ดส่งข้อมูลเข้า CynoIoT
#include <WiFi.h>
#include <HTTPClient.h>
// ตั้งค่า WiFi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// ตั้งค่า CynoIoT
const char* cynoiotUrl = "https://api.cynoiot.com/sensor/data";
const char* apiKey = "YOUR_CYNOIOT_API_KEY";
void sendToCynoIoT(float temp, float hum, float pres, float gas) {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi ไม่ได้เชื่อมต่อ");
return;
}
HTTPClient http;
http.begin(cynoiotUrl);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", apiKey);
// สร้าง JSON payload
String payload = "{";
payload += "\"temperature\":" + String(temp) + ",";
payload += "\"humidity\":" + String(hum) + ",";
payload += "\"pressure\":" + String(pres) + ",";
payload += "\"gas\":" + String(gas) + ",";
payload += "\"timestamp\":" + String(millis());
payload += "}";
// ส่งข้อมูล
int httpResponseCode = http.POST(payload);
if (httpResponseCode > 0) {
Serial.println("ส่งข้อมูลสำเร็จ!");
} else {
Serial.println("ส่งข้อมูลไม่สำเร็จ: " + String(httpResponseCode));
}
http.end();
}
void setup() {
// ... โค้ดตั้งค่าเซนเซอร์ ...
// เชื่อมต่อ WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi เชื่อมต่อแล้ว!");
}
void loop() {
// ... โค้ดอ่านค่าเซนเซอร์ ...
// ส่งข้อมูลไป CynoIoT ทุกๆ 30 วินาที
static unsigned long lastSend = 0;
if (millis() - lastSend > 30000) {
sendToCynoIoT(bme.temperature, bme.humidity,
bme.pressure, bme.gas_resistance);
lastSend = millis();
}
delay(2000);
}💡 แนวโปรเจกต์ที่น่าสนใจ
🏠 ระบบตรวจจับคุณภาพอากาศภายในบ้าน
ติดตั้งในห้องนั่งเล่น/ห้องนอน เพื่อตรวจสอบคุณภาพอากาศและแจ้งเตือนเมื่ออากาศแย่
🏭 โปรเจกต์ Smart Factory
ตรวจสอบมลพิษในโรงงาน ตรวจจับก๊าซเคมี และแจ้งเตือนอันตราย
🌱 ระบบควบคุมความชื้นในเรือนกระจก
ตรวจสอบและควบคุมความชื้น/อุณหภูมิในเรือนกระจกอัตโนมัติ
👃 เครื่องตรวจจับกลิ่นอัจฉริยะ
ฝึกโมเดล AI เพื่อตรวจจับกลิ่นเฉพาะ (เช่น กลิ่นไหม้, กลิ่นสารเคมี)
🏊 ระบบตรวจสอบคุณภาพน้ำ
ใช้ BME688 ตรวจสอบความชื้นและก๊าีรอบๆ แหล่งน้ำ
🚗 Air Quality Logger สำหรับรถยนต์
บันทึกข้อมูลคุณภาพอากาศระหว่างเดินทาง วิเคราะห์เส้นทางที่มีมลพิษ
🔧 การแก้ปัญหาที่พบบ่อย
ไม่พบเซนเซอร์ (Sensor not found)
- • ตรวจสอบการต่อสาย (SCL/SDA)
- • ลองเปลี่ยน I2C address (0x77 → 0x76)
- • ตรวจสอบว่าใช้ 3.3V (ไม่ใช่ 5V)
- • ลองใช้ pull-up resistors (4.7kΩ)
ค่าก๊าซผิดปกติ (Gas reading incorrect)
- • ต้องให้เวลาเซนเซอร์ warm-up (10-30 นาที)
- • อย่าสัมผัสเซนเซอร์โดยตรง
- • หลีกเลี่ยงการสัมผัสกับแสงแดดโดยตรง
- • ปรับค่า Gas Heater temperature
ค่าอ่านไม่แม่นยำ
- • Calibrate เซนเซอร์ (ดูใน datasheet)
- • ปรับ oversampling ให้เหมาะสม
- • อ่านค่าเฉลี่ยหลายๆ ครั้ง
อ่านค่าได้ครั้งเดียวแล้วหยุด
- • BME688 ต้องใช้เวลาในการวัดก๊าี (200-300ms)
- • เพิ่ม delay ระหว่างการอ่าน
- • ใช้ performReading() ทุกครั้ง
🎉 สรุป
ในบทความนี้เราได้เรียนรู้:
- ภาพรวมและคุณสมบัติของ BME688 Gas Sensor
- การต่อสายและติดตั้ง Library
- โค้ดพื้นฐานสำหรับอ่านค่าเซนเซอร์
- การตรวจจับก๊าี VOC และคำนวณ IAQ
- การเชื่อมต่อกับ CynoIoT Platform
บทความหน้า: จะมาดูโปรเจกต์ระบบตรวจจับก๊าีแบบ Real-time พร้อม Dashboard บน CynoIoT!