โปรเจค ESP32 เครื่องตรวจจับควัน เซนเซอร์ MQ-2 พร้อม Code Arduino IDE

โปรเจค ESP32 เครื่องตรวจจับควัน เซนเซอร์ MQ-2 พร้อม Code Arduino IDE

โปรเจค ESP32 เครื่องตรวจจับควัน เซนเซอร์ MQ-2 พร้อม Code Arduino IDE

บทนำ

การตรวจจับก๊าซและควันเป็นสิ่งสำคัญอย่างมากในชีวิตประจำวัน โดยเฉพาะในสถานการณ์ที่ต้องการความปลอดภัย เช่น การป้องกันไฟไหม้ในบ้านหรือโรงงานอุตสาหกรรม ด้วยเทคโนโลยีปัจจุบัน เราสามารถสร้างระบบตรวจจับควันและก๊าซที่ราคาไม่แพงและใช้งานง่ายได้ด้วย ESP32 และ เซนเซอร์ MQ-2 ซึ่งเป็นเซนเซอร์ที่ออกแบบมาเพื่อตรวจจับควัน ก๊าซ LPG และก๊าซไวไฟอื่น ๆ

ในบทความนี้ คุณจะได้เรียนรู้วิธีการสร้างเครื่องตรวจจับควันด้วย ESP32 และเซนเซอร์ MQ-2 พร้อมโค้ด Arduino IDE สำหรับการเริ่มต้นโปรเจค DIY ที่คุณสามารถปรับปรุงเพิ่มเติมได้

อุปกรณ์ที่ต้องใช้

  1. ESP32
  2. Sensor MQ-2
  3. LED สีแดง (สำหรับแสดงสถานะอันตราย)
  4. LED สีเขียว (สำหรับแสดงสถานะปลอดภัย)
  5. ตัวต้านทาน (สำหรับเชื่อมต่อ LED)
  6. สายไฟ Jumper
  7. บอร์ดเบรดบอร์ด

หากคุณยังไม่เคยใช้ไมโครคอนโทรลเลอร์ตัวนี้ แนะนำให้อ่าน ESP32 คืออะไร? จุดเด่นและการใช้งานเบื้องต้น ก่อนเริ่มลงมือ

การต่อวงจร

การเชื่อมต่ออุปกรณ์ทั้งหมดเป็นขั้นตอนที่สำคัญ เพื่อให้ระบบทำงานได้อย่างถูกต้อง ให้ต่อวงจรตามนี้:

  1. MQ-2 เซนเซอร์
    • เชื่อมขา VCC ของ MQ-2 เข้ากับไฟเลี้ยง 3.0V 
    • เชื่อมขา GND ของ MQ-2 เข้ากับขา GND 
    • เชื่อมขา AOUT ของ MQ-2 เข้ากับขา GPIO 34 ของ ESP32 (ในโค้ดกำหนดเป็น MQ2_PIN)
  2. LED สีแดง (RED LED)
    • เชื่อมขา บวก (Anode) ของ LED เข้ากับขา GPIO 12 ของ ESP32 (ในโค้ดกำหนดเป็น LEDRED_PIN)
    • เชื่อมขา ลบ (Cathode) ของ LED เข้ากับตัวต้านทาน แล้วต่อเข้ากับขา GND
  3. LED สีเขียว (GREEN LED)
    • เชื่อมขา บวก (Anode) ของ LED เข้ากับขา GPIO 14 ของ ESP32 (ในโค้ดกำหนดเป็น LEDGREEN_PIN)
    • เชื่อมขา ลบ (Cathode) ของ LED เข้ากับตัวต้านทาน แล้วต่อเข้ากับขา GND

หากต้องการดูรายละเอียดตำแหน่งขาของบอร์ด Devkit V1 สามารถอ่านได้ที่ ESP32 Pinout Devkit V1

การเขียนโค้ด Arduino IDE

ด้านล่างนี้เป็นโค้ดที่คุณสามารถใช้เพื่อเริ่มต้นโปรเจคของคุณ:

พร้อมจะเขียนโปรแกรมลงบอร์ด Arduino ESP32 แล้วหรือยัง? เริ่มได้เลยจาก Arduino IDE Guide — สอนละเอียด เข้าใจง่าย

/*
Project : ESP32 + MQ-2 Basic Alarm
Link    : https://www.devadiy.com   
Repo    : https://github.com/DevaDIY/esp-mq2-basic
Note    : ใช้ ADC1 เพื่อลดปัญหาชนกับ Wi-Fi
*/

#include <Arduino.h>

// ขาเชื่อมต่อ (แนะนำ ADC1)
#define MQ2_PIN        34   // ADC1_CH6 (GPIO34) - อ่านค่าได้อย่างเดียว
#define LEDRED_PIN     12
#define LEDGREEN_PIN   14

// การตั้งค่า ADC
// หากเอาต์พุต MQ-2 = 0–3.3V ให้ใช้ 11dB (อ่านได้ถึง ~3.3V)
#define USE_ADC_11DB

// ค่ากำหนดแจ้งเตือน (ใช้ hysteresis)
#define GAS_TH_HI      2000   // เกินค่านี้ = อันตราย (ประมาณ)
#define GAS_TH_LO      1800   // ต่ำกว่านี้ = กลับสภาวะปกติ

// การกรองค่า (Moving Average)
#define AVG_SAMPLES    10

bool alarmState = false;

uint16_t readMQ2Avg() {
  uint32_t sum = 0;
  for (int i = 0; i < AVG_SAMPLES; i++) {
    sum += analogRead(MQ2_PIN);
    delay(2);
  }
  return (uint16_t)(sum / AVG_SAMPLES);
}

void setup() {
  Serial.begin(115200);
  delay(200);

#ifdef USE_ADC_11DB
  analogSetAttenuation(ADC_11db);
#else
  analogSetAttenuation(ADC_6db); // เผื่อใช้บอร์ดที่มีสเกลต่างกัน
#endif

  // ไม่ต้องตั้งความละเอียดก็ได้ (ESP32 ค่าเริ่มต้น 12 บิต 0..4095)
  // ถ้าจะตั้ง: analogReadResolution(12);

  pinMode(LEDRED_PIN, OUTPUT);
  pinMode(LEDGREEN_PIN, OUTPUT);
  digitalWrite(LEDRED_PIN, LOW);
  digitalWrite(LEDGREEN_PIN, HIGH);

  Serial.println("เริ่มต้นใช้งาน MQ-2 Sensor (ESP32 + ADC1)!");
}

void loop() {
  uint16_t gasRaw = readMQ2Avg();

  // แสดงผลดิบ (0..4095)
  Serial.print("Gas Raw: ");
  Serial.println(gasRaw);

  // ตัดสินใจด้วย hysteresis
  if (!alarmState && gasRaw > GAS_TH_HI) {
    alarmState = true;
    Serial.println("!! ALERT: ก๊าซ/ควันเกินระดับปลอดภัย (TH_HI) !!");
  } else if (alarmState && gasRaw < GAS_TH_LO) {
    alarmState = false;
    Serial.println("-- SAFE: ค่ากลับสู่ช่วงปลอดภัย (TH_LO) --");
  }

  // แสดงผล LED
  digitalWrite(LEDRED_PIN,   alarmState ? HIGH : LOW);
  digitalWrite(LEDGREEN_PIN, alarmState ? LOW  : HIGH);

  delay(200);
}

ดาวน์โหลดโค้ด

กรุณา เข้าสู่ระบบ เพื่อดาวน์โหลด

การทำงานของโค้ด

  1. ในฟังก์ชัน setup():
    • ตั้งค่าความละเอียด ADC ของ ESP32 เป็น 12-bit (0-4095)
    • กำหนดการตั้งค่าขา I/O สำหรับ MQ-2 และ LED
  2. ในฟังก์ชัน loop():
    • อ่านค่าจากเซนเซอร์ MQ-2 ผ่านฟังก์ชัน readMQ2Avg()
    • ตรวจสอบค่าที่ได้เปรียบเทียบกับ GAS_TH_HI ที่กำหนด (2000)
    • หากค่ามากกว่า GAS_TH_HI:
      • เปิด LED สีแดง (แจ้งเตือนว่ามีควันหรือก๊าซเกิน)
    • หากค่าต่ำกว่า GAS_TH_LO:
      • เปิด LED สีเขียว (สถานะปลอดภัย)

เพิ่งเริ่มใช้ ESP32 หรือยังไม่แน่ใจว่าสามารถอ่านค่าจากขาอนาล็อกอย่างไร? ลองเข้าไปดูที่ ESP32 Analog Read เลยครับ! ง่ายกว่าที่คิดนะ

การทดสอบและปรับค่า GAS_TH_HI

ค่า GAS_TH_HI ที่กำหนดในโค้ดคือ 2000 ซึ่งเป็นค่ากลางสำหรับการตรวจจับ หากต้องการปรับค่าความไวในการตรวจจับ คุณสามารถปรับค่าดังนี้:
  • เพิ่มค่าสูงขึ้น เพื่อลดความไวในการตรวจจับ
  • ลดค่าลง เพื่อเพิ่มความไวในการตรวจจับ

คำแนะนำสำหรับการใช้งาน

  1. ตรวจสอบแหล่งจ่ายไฟให้เพียงพอสำหรับ เซนเซอร์ MQ-2
  2. ใช้งานในพื้นที่ที่ต้องการตรวจจับควันหรือก๊าซไวไฟ เช่น ห้องครัว หรือพื้นที่เสี่ยงไฟไหม้
  3. หากต้องการนำไปใช้ในงานจริง ควรมีการสอบเทียบเซนเซอร์เพื่อให้ได้ค่าที่แม่นยำ

สำหรับใครที่ต้องการสร้างเว็บเซิร์ฟเวอร์บน ESP32 อย่างรวดเร็ว แนะนำให้อ่าน ESP32 ESPAsyncWebServer Guide เพื่อเรียนรู้วิธีใช้งาน Async WebServer กันครับ

สรุป

โปรเจค ESP32 กับเซนเซอร์ MQ-2 เป็นตัวอย่างของการนำเทคโนโลยี IoT มาประยุกต์ใช้ในงานด้านความปลอดภัย คุณสามารถนำไปพัฒนาต่อ เช่น เพิ่มการแจ้งเตือนผ่าน Wi-Fi หรือแอปพลิเคชันมือถือ เพื่อให้การใช้งานมีประสิทธิภาพมากขึ้น และเหมาะสมกับสถานการณ์ของคุณ

หวังว่าโปรเจคนี้จะช่วยให้คุณเข้าใจการใช้งาน ESP32 กับเซนเซอร์ตรวจจับควันและก๊าซได้ดีขึ้น ลองทำตามและสนุกกับการพัฒนาโปรเจค DIY ของคุณ! 😊

Shopping Cart
Scroll to Top