ESP32 MQ3 Alcohol Sensor (Cảm biến rượu MQ3)

Hướng dẫn này sẽ đưa bạn qua quá trình kết nối cảm biến rượu MQ3 với ESP32 để phát hiện và đo nồng độ hơi ethanol và rượu trong không khí xung quanh. Cảm biến MQ3 là thành phần cơ bản cho các dự án breathalyzer, hệ thống phát hiện rượu và ứng dụng giám sát chất lượng không khí.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu:

ESP32 với module cảm biến khí rượu mq3

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×MQ3 Alcohol Sensor
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm Biến Rượu MQ3

Được phân loại là Chemiresistor, MQ3 sử dụng công nghệ Metal Oxide Semiconductor (MOS) để cảm nhận rượu thông qua các biến đổi điện trở trong lớp phát hiện. Cảm biến này cho thấy độ nhạy đặc biệt với hơi ethanol ở các mức nồng độ khác nhau.

Trái tim của cảm biến bao gồm Thiếc Dioxide (SnO2) được phủ lên đế ceramic Aluminum Oxide. Việc làm nóng vật liệu này cho phép nó tương tác với các phân tử rượu. Lưới thép không gỉ bảo vệ (màn chống nổ) bao bọc phần tử cảm biến, bảo vệ thành phần gia nhiệt trong khi cho phép khí khuếch tán vào buồng cảm biến.

Các ứng dụng phổ biến bao gồm thiết bị breathalyzer, thiết bị phát hiện lái xe sau khi uống rượu, hệ thống báo động rượu và giám sát hơi rượu môi trường.

Thông Số Kỹ Thuật

  • Điện áp hoạt động: 5V DC
  • Điện trở tải: 200 KΩ
  • Điện trở đốt nóng: 33Ω ± 5%
  • Tiêu thụ đốt nóng: < 800mW
  • Điện trở cảm biến: 1 MΩ – 8 MΩ
  • Phạm vi phát hiện: 25 – 500 ppm (phần triệu)
  • Thời gian khởi động: 24-48 giờ cho lần sử dụng đầu

Về ppm: Parts-per-million (ppm) biểu thị tỷ lệ nồng độ của các phân tử mục tiêu so với tổng số phân tử khí. Ví dụ, đọc được 500 ppm có nghĩa là có 500 phân tử rượu trên 1,000,000 tổng phân tử, với 999,500 là các thành phần khí quyển khác.

Pinout

Module cảm biến MQ3 có bốn chân kết nối:

  • Chân VCC: Kết nối với nguồn điện +5V.
  • Chân GND: Kết nối với đất (0V).
  • Chân DO: Đầu ra số—xuống mức LOW khi rượu vượt ngưỡng, HIGH trong trường hợp khác. Điều chỉnh ngưỡng qua biến trở trên bo mạch.
  • Chân AO: Đầu ra analog—điện áp thay đổi theo nồng độ rượu. Rượu cao hơn tạo ra điện áp cao hơn.
sơ đồ sơ đồ chân module cảm biến rượu mq3

Các chỉ báo trực quan bao gồm hai LED:

  • PWR-LED: Sáng khi module nhận được điện.
  • DO-LED: Phản ánh trạng thái đầu ra số—sáng trong quá trình phát hiện rượu, tắt trong trường hợp khác.

Cách Hoạt Động

MQ3 hoạt động thông qua các thay đổi điện trở trong vật liệu bán dẫn Thiếc Dioxide (SnO2):

Trạng thái không khí sạch: Làm nóng SnO2 khiến các phân tử oxy bám vào bề mặt, bắt giữ electron và tạo thành lớp nghèo điện tử. Việc bắt giữ electron này tạo ra rào cản dẫn điện, duy trì điện trở cao.

Có mặt rượu: Các phân tử rượu phản ứng với oxy bề mặt, phá vỡ liên kết và giải phóng electron bị giữ trở lại vào thiếc dioxide. Điều này tăng độ dẫn điện—mức rượu cao hơn có nghĩa là điện trở thấp hơn.

Cảm biến cung cấp hai chế độ đầu ra:

Đầu Ra Số (chân DO):

  • Thiết lập ngưỡng qua biến trở trên bo mạch.
  • DO xuất ra LOW (LED sáng) khi rượu vượt ngưỡng.
  • DO xuất ra HIGH (LED tắt) khi rượu ở dưới ngưỡng.

Đầu Ra Analog (chân AO):

  • Điện áp đầu ra tỷ lệ với nồng độ rượu.
  • Rượu tăng = điện áp đầu ra tăng.
  • Rượu giảm = điện áp đầu ra giảm.
  • Lưu ý: Biến trở chỉ ảnh hưởng đến đầu ra số, không phải đọc analog.

Khởi Động và Hiệu Chuẩn

Yêu Cầu Làm Nóng Trước

MQ3 cần được làm nóng trước khi tạo ra các phép đo chính xác:

  • Lần sử dụng đầu hoặc bảo quản lâu (30+ ngày): Duy trì nguồn trong 24-48 giờ để ổn định cảm biến và độ chính xác đo.
  • Sử dụng thường xuyên: Khởi động 5-10 phút là đủ. Các đọc số đầu có thể tăng đột biến nhưng sẽ ổn định.

Chỉ cần kết nối VCCGND với nguồn 5V hoặc chân nguồn của ESP32 trong thời gian khởi động.

Xác Định Giá Trị Ngưỡng

Các cảm biến dựa trên bộ gia nhiệt như MQ3 có thể trôi dạt trong quá trình bảo quản. Thiết lập ngưỡng breathalyzer chính xác thông qua hiệu chuẩn này:

  1. Đường cơ sở không khí sạch: Chạy cảm biến trong không khí trong lành và ghi lại các giá trị analog (thường là 100-150).
  2. Tiếp xúc với rượu: Đặt cồn isopropyl hoặc dung dịch rửa tay gần (không chạm) cảm biến, chỉ cho phép hơi tiếp cận. Lưu ý các đọc số tăng cao (thường 400-900 tùy thuộc vào cường độ hơi).
  3. Thiết lập phạm vi: Sử dụng các giá trị đã ghi để định nghĩa các vùng:
  • Trạng thái tỉnh táo: Dưới đường cơ sở + 20 (ví dụ: < 120)
  • Tiêu thụ nhẹ: Giá trị tầm trung (ví dụ: 120-400)
  • Tiêu thụ nặng: Trên ngưỡng vừa phải (ví dụ: > 400)

Quan trọng: Đặc tính cảm biến khác nhau giữa các đơn vị và môi trường. Luôn hiệu chuẩn với phần cứng cụ thể của bạn trước khi sử dụng.

Điều Chỉnh Ngưỡng Số

Thiết lập mức kích hoạt chân DO bằng biến trở điều chỉnh:

  1. Cho cảm biến tiếp xúc với hơi rượu.
  2. Xoay biến trở theo chiều kim đồng hồ cho đến khi LED kích hoạt.
  3. Xoay ngược chiều kim đồng hồ từ từ cho đến khi LED vừa tắt.
  4. Ngưỡng giờ đã được hiệu chuẩn.

Sơ Đồ Kết Nối

Module MQ3 cung cấp cả hai chân đầu ra. Sử dụng một hoặc cả hai tùy thuộc vào nhu cầu dự án của bạn.

Cảm Biến Rượu MQ3ESP32
VCC3.3V
GNDGND
DOGPIO 19
AOGPIO 36 (ADC0)
sơ đồ kết nối ESP32 và cảm biến rượu mq3 hiển thị các kết nối chân

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Code ESP32 - Đọc Đầu Ra Số

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for digital output from the sensor #define PIN_DO 14 // ESP32 pin GPIO14 connected to DO pin of MQ3 sensor void setup() { // Initialize serial communication at 9600 baud rate Serial.begin(9600); // Set the DO pin as an input pinMode(PIN_DO, INPUT); // Give the MQ3 sensor time to warm up (20 seconds) Serial.println("Warming up the MQ3 sensor..."); delay(20000); // Wait 20 seconds for sensor warm-up Serial.println("MQ3 sensor is ready!"); } void loop() { // Read the digital output from the sensor int alcoholState = digitalRead(PIN_DO); // Check if alcohol is detected if (alcoholState == LOW) { Serial.println("Alcohol is detected"); } else { Serial.println("Alcohol is NOT detected"); } delay(1000); // Wait 1 second before next reading }

Các Bước Nhanh

  • Nếu đây là lần đầu bạn sử dụng ESP32, xem ESP32 - Cài Đặt Phần Mềm.
  • Sao chép code trên và mở bằng Arduino IDE
  • Nhấp vào nút Upload trên Arduino IDE để tải code lên ESP32
  • Đặt nguồn hơi rượu gần cảm biến MQ3 (dung dịch rửa tay hoặc cồn y tế trên bông hoạt động tốt)
  • Xem kết quả trên Serial Monitor
COM6
Send
Alcohol is NOT detected Alcohol is NOT detected Alcohol is NOT detected Alcohol is detected Alcohol is detected Alcohol is detected Alcohol is detected Alcohol is NOT detected Alcohol is NOT detected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Lưu ý: Nếu các đọc số không phù hợp với thực tế (kích hoạt sai hoặc bỏ lỡ phát hiện), hãy điều chỉnh biến trở của module. Theo chiều kim đồng hồ tăng độ nhạy; ngược chiều kim đồng hồ giảm độ nhạy. Tinh chỉnh cho đến khi độ chính xác cải thiện.

Code ESP32 - Đọc Đầu Ra Analog

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for analog output from the sensor #define PIN_AO 36 // ESP32 pin GPIO36 (ADC0) connected to AO pin of MQ3 sensor void setup() { // Initialize serial communication at 9600 baud rate Serial.begin(9600); // Give the MQ3 sensor time to warm up (20 seconds) Serial.println("Warming up the MQ3 sensor..."); delay(20000); // Wait 20 seconds for sensor warm-up Serial.println("MQ3 sensor is ready!"); } void loop() { // Read the analog output from the sensor int alcoholValue = analogRead(PIN_AO); // Print the analog value to Serial Monitor Serial.print("MQ3 sensor AO value: "); Serial.println(alcoholValue); delay(1000); // Wait 1 second before next reading }

Các Bước Nhanh

  • Sao chép code trên và mở bằng Arduino IDE
  • Nhấp vào nút Upload trên Arduino IDE để tải code lên ESP32
  • Đưa hơi rượu đến cảm biến (dung dịch rửa tay hoặc cồn isopropyl)
  • Kiểm tra kết quả trên Serial Monitor
COM6
Send
MQ3 sensor AO value: 120 MQ3 sensor AO value: 125 MQ3 sensor AO value: 128 MQ3 sensor AO value: 450 MQ3 sensor AO value: 620 MQ3 sensor AO value: 850 MQ3 sensor AO value: 920 MQ3 sensor AO value: 980 MQ3 sensor AO value: 950 MQ3 sensor AO value: 680 MQ3 sensor AO value: 420
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Với đầu ra số hoặc analog, bạn có thể triển khai logic ngưỡng để kích hoạt báo động, bật đèn cảnh báo hoặc ghi log dữ liệu cho các ứng dụng breathalyzer.

※ Lưu ý:

Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với cảm biến hoặc linh kiện. ADC của ESP32 phù hợp cho các dự án không yêu cầu độ chính xác cao. Tuy nhiên, đối với các dự án cần đo lường chính xác, hãy lưu ý những điều sau:

  • ADC của ESP32 không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả đúng. Mỗi bo mạch ESP32 có thể khác nhau một chút, vì vậy cần hiệu chuẩn cho từng bo mạch riêng lẻ.
  • Hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không luôn cho kết quả chính xác như bạn mong muốn.

Đối với các dự án yêu cầu độ chính xác cao, hãy xem xét sử dụng ADC ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino khác, như Arduino Uno R4 WiFi, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ADC của ESP32, hãy tham khảo ESP32 ADC Calibration Driver.

Code ESP32 - Breathalyzer với Phát Hiện Ngưỡng

Ví dụ này cho thấy cách diễn giải đầu ra analog thông qua các ngưỡng đã hiệu chuẩn để ước tính mức độ say xỉn.

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for analog output from the sensor #define PIN_AO 36 // ESP32 pin GPIO36 (ADC0) connected to AO pin of MQ3 sensor // Define threshold values (calibrate these based on your sensor and environment) const int SOBER_THRESHOLD = 120; // Below this value = sober const int DRUNK_THRESHOLD = 400; // Above this value = drunk void setup() { // Initialize serial communication at 9600 baud rate Serial.begin(9600); // Give the MQ3 sensor time to warm up (20 seconds) Serial.println("Warming up the MQ3 sensor..."); delay(20000); // Wait 20 seconds for sensor warm-up Serial.println("MQ3 sensor is ready!"); Serial.println("=== Breathalyzer Test ==="); } void loop() { // Read the analog output from the sensor int alcoholValue = analogRead(PIN_AO); // Print the sensor value Serial.print("Sensor Value: "); Serial.print(alcoholValue); Serial.print(" | Status: "); // Determine intoxication level based on thresholds if (alcoholValue < SOBER_THRESHOLD) { Serial.println("Stone Cold Sober"); } else if (alcoholValue < DRUNK_THRESHOLD) { Serial.println("Drinking but within limits"); } else { Serial.println("DRUNK"); } delay(2000); // Wait 2 seconds before next reading }

Các Bước Nhanh

  • Quan trọng: Hiệu chuẩn cảm biến của bạn trước bằng ví dụ đọc analog để tìm các giá trị ngưỡng thích hợp cho thiết lập của bạn.
  • Sửa đổi các hằng số SOBER_THRESHOLDDRUNK_THRESHOLD với các giá trị đã hiệu chuẩn của bạn.
  • Sao chép code đã sửa đổi và mở bằng Arduino IDE
  • Nhấp vào nút Upload trên Arduino IDE để tải code lên ESP32
  • Thử nghiệm với hơi rượu (hơi cồn isopropyl hoặc dung dịch rửa tay)
  • Kiểm tra thông báo trạng thái trên Serial Monitor
COM6
Send
Sensor Value: 115 | Status: Stone Cold Sober Sensor Value: 118 | Status: Stone Cold Sober Sensor Value: 350 | Status: Drinking but within limits Sensor Value: 480 | Status: DRUNK Sensor Value: 520 | Status: DRUNK Sensor Value: 290 | Status: Drinking but within limits Sensor Value: 125 | Status: Stone Cold Sober
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Tuyên bố miễn trách nhiệm: Dự án này chỉ dành cho mục đích giáo dục. Không bao giờ sử dụng thiết bị này cho mục đích breathalyzer pháp lý hoặc đánh giá an toàn lái xe.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.