ESP32 MQ3 알코올 센서

이 튜토리얼은 MQ3 알코올 센서를 ESP32에 인터페이싱하여 주변 공기의 에탄올 및 알코올 증기 농도를 감지하고 측정하는 방법을 안내합니다. MQ3 센서는 음주측정기 프로젝트, 알코올 감지 시스템, 공기 질 모니터링 애플리케이션의 기본 구성 요소 역할을 합니다.

이 가이드에서 다루는 내용:

mq3 알코올 가스 센서 모듈이 있는 ESP32

필요한 하드웨어

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×MQ3 Alcohol Sensor 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

MQ3 알코올 센서에 대하여

화학 저항기로 분류되는 MQ3는 금속 산화물 반도체(MOS) 기술을 사용하여 감지 레이어의 저항 변화를 통해 알코올을 감지합니다. 이 센서는 다양한 농도 수준에서 에탄올 증기에 대해 탁월한 민감도를 보입니다.

센서의 핵심은 알루미나 세라믹 기판 위에 코팅된 이산화주석(SnO2)으로 구성됩니다. 이 물질을 가열하면 알코올 분자와 반응할 수 있습니다. 보호용 스테인리스 강철 메쉬(방폭 스크린)가 센서 요소를 감싸서 가열 부품을 보호하면서 가스가 감지 챔버로 확산될 수 있도록 합니다.

일반적인 응용 분야로는 음주측정기 기기, 음주운전 감지 장비, 알코올 알람 시스템, 환경 알코올 증기 모니터링이 있습니다.

기술 사양

  • 작동 전압: 5V DC
  • 부하 저항: 200 KΩ
  • 히터 저항: 33Ω ± 5%
  • 가열 소비: < 800mW
  • 감지 저항: 1 MΩ – 8 MΩ
  • 감지 범위: 25 – 500 ppm (백만분의 일)
  • 예열 시간: 처음 사용 시 24-48시간

ppm에 대하여: 백만분율(ppm)은 목표 분자의 전체 가스 분자에 대한 농도 비율을 나타냅니다. 예를 들어 500 ppm 수치는 1,000,000개의 총 분자 중 500개의 알코올 분자가 존재하고 나머지 999,500개는 다른 대기 성분임을 의미합니다.

핀아웃

MQ3 센서 모듈에는 네 개의 연결 핀이 있습니다:

  • VCC 핀: +5V 전원에 연결합니다.
  • GND 핀: 접지(0V)에 연결합니다.
  • DO 핀: 디지털 출력 — 알코올이 임계값을 초과하면 LOW, 그 외에는 HIGH. 온보드 가변저항기로 임계값 조정.
  • AO 핀: 아날로그 출력 — 전압이 알코올 농도에 따라 변합니다. 알코올이 높을수록 전압이 높아집니다.
mq3 알코올 센서 모듈 핀아웃 다이어그램

시각적 표시기로는 두 개의 LED가 있습니다:

  • PWR-LED: 모듈에 전원이 공급될 때 켜집니다.
  • DO-LED: 디지털 출력 상태를 반영합니다 — 알코올 감지 시 켜지고 그 외에는 꺼집니다.

작동 원리

MQ3는 이산화주석(SnO2) 반도체 물질의 저항 변화를 통해 작동합니다:

깨끗한 공기 상태: SnO2를 가열하면 산소 분자가 표면에 부착되어 전자를 포착하고 공핍층을 형성합니다. 이 전자 포착은 전도성 장벽을 만들어 높은 저항을 유지합니다.

알코올 존재 시: 알코올 분자가 표면 산소와 반응하여 결합을 끊고 포착된 전자를 이산화주석으로 다시 방출합니다. 이로 인해 전도성이 향상됩니다 — 알코올 수준이 높을수록 저항이 낮아집니다.

센서는 두 가지 출력 모드를 제공합니다:

디지털 출력 (DO 핀):

  • 온보드 가변저항기를 통한 임계값 설정.
  • DO는 알코올이 임계값을 초과하면 LOW(LED 켜짐)를 출력합니다.
  • DO는 알코올이 임계값 아래로 유지되면 HIGH(LED 꺼짐)를 출력합니다.

아날로그 출력 (AO 핀):

  • 알코올 농도에 비례하는 전압 출력.
  • 알코올 증가 = 전압 출력 증가.
  • 알코올 감소 = 전압 출력 감소.
  • 참고: 가변저항기는 디지털 출력에만 영향을 미치며 아날로그 읽기에는 영향을 미치지 않습니다.

예열 및 보정

예열 요구 사항

MQ3는 정확한 측정을 생성하기 전에 가열이 필요합니다:

  • 처음 사용하거나 장기간 보관(30일 이상) 후: 센서 안정화 및 측정 정확도를 위해 24-48시간 동안 전원을 유지합니다.
  • 자주 사용하는 경우: 5-10분의 예열로 충분합니다. 초기 수치가 급등할 수 있지만 안정될 것입니다.

예열을 위해 VCCGND를 5V 전원 또는 ESP32의 전원 핀에 연결하기만 하면 됩니다.

임계값 결정

MQ3와 같은 히터 기반 센서는 보관 중에 드리프트가 발생할 수 있습니다. 이 보정을 통해 정확한 음주측정기 임계값을 설정합니다:

  1. 청정 공기 기준선: 신선한 공기에서 센서를 실행하고 아날로그 값을 기록합니다(일반적으로 100-150).
  2. 알코올 노출: 이소프로필 알코올이나 손 소독제를 센서 근처(접촉하지 않음)에 놓아 증기만 닿도록 합니다. 상승된 수치를 기록합니다(보통 증기 강도에 따라 400-900).
  3. 범위 설정: 기록된 값을 사용하여 구역을 정의합니다:
  • 음주 없음: 기준선 + 20 미만 (예: < 120)
  • 소량 음주: 중간 범위 값 (예: 120-400)
  • 과음: 보통 임계값 초과 (예: > 400)

중요: 센서 특성은 장치와 환경마다 다릅니다. 사용 전에 항상 특정 하드웨어로 보정하세요.

디지털 임계값 조정

트리머 가변저항기를 사용하여 DO 핀 트리거 수준을 설정합니다:

  1. 센서를 알코올 증기에 노출시킵니다.
  2. LED가 활성화될 때까지 가변저항기를 시계 방향으로 돌립니다.
  3. LED가 막 비활성화될 때까지 반시계 방향으로 천천히 돌립니다.
  4. 임계값이 이제 보정되었습니다.

배선 다이어그램

MQ3 알코올 센서 모듈에는 두 개의 출력이 있으므로 필요에 따라 하나 또는 둘 다 사용할 수 있습니다.

  • ESP32와 MQ3 알코올 센서를 브레드보드로 연결하는 방법 (USB 케이블로 전원 공급)
ESP32 mq3 알코올 센서 배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

  • ESP32와 MQ3 알코올 센서를 브레드보드로 연결하는 방법 (Vin 핀으로 전원 공급)
ESP32 mq3 알코올 센서 배선 지침

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32와 mq3 알코올 센서 연결 방법
ESP32와 mq3 알코올 센서 배선 방법
MQ3 Alcohol SensorESP32
VCC3.3V
GNDGND
DOGPIO 16
AOGPIO 36 (ADC0)

ESP32 코드 - 디지털 출력 읽기

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-mq3-alcohol-sensor */ // Define the pin for digital output from the sensor #define PIN_DO 16 // ESP32 pin GPIO16 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 }

빠른 시작

  • ESP32가 처음이라면 ESP32 - 소프트웨어 설치 튜토리얼을 참조하세요.
  • 위의 코드를 복사하여 Arduino IDE로 엽니다.
  • Arduino IDE에서 업로드 버튼을 클릭하여 ESP32에 코드를 업로드합니다.
  • MQ3 센서 근처에 알코올 증기 원을 놓습니다(손 소독제나 면봉에 묻힌 소독용 알코올이 잘 작동합니다).
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
ESP32 Dev Module on COM15
2

참고: 수치가 현실과 맞지 않는 경우(오탐지 또는 미탐지), 모듈의 가변저항기를 조정하세요. 시계 방향으로 돌리면 민감도가 증가하고, 반시계 방향으로 돌리면 감소합니다. 정확도가 향상될 때까지 미세 조정하세요.

ESP32 코드 - 아날로그 출력 읽기

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/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 }

빠른 시작

  • 위의 코드를 복사하여 Arduino IDE로 엽니다.
  • Arduino IDE에서 업로드 버튼을 클릭하여 ESP32에 코드를 업로드합니다.
  • 센서에 알코올 증기를 가져다 댑니다(손 소독제나 이소프로필 알코올).
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
ESP32 Dev Module on COM15
2

디지털 또는 아날로그 출력 어느 것이든 임계값 로직을 구현하여 알람을 트리거하거나, 경고 표시등을 활성화하거나, 음주측정기 애플리케이션을 위한 데이터를 기록할 수 있습니다.

※ 주의:

이 튜토리얼은 센서 또는 부품에 연결된 ADC(아날로그-디지털 변환기)에서 값을 읽기 위해 analogRead() 함수를 사용합니다. ESP32의 ADC는 높은 정확도가 필요하지 않은 프로젝트에 적합합니다. 그러나 정밀한 측정이 필요한 프로젝트의 경우 다음 사항을 유의하세요:

  • ESP32의 ADC는 완벽하게 정확하지 않으며 올바른 결과를 위해 보정이 필요할 수 있습니다. 각 ESP32 보드마다 약간씩 다를 수 있으므로 개별 보드마다 보정이 필요합니다.
  • 보정은 특히 초보자에게 어려울 수 있으며 항상 원하는 정확한 결과를 얻지 못할 수도 있습니다.

높은 정밀도가 필요한 프로젝트의 경우 ESP32와 함께 외부 ADC(예: ADS1115)를 사용하거나 더 신뢰할 수 있는 ADC를 갖춘 Arduino Uno R4 WiFi 같은 다른 Arduino를 사용하는 것을 고려하세요. ESP32의 ADC를 여전히 보정하고 싶다면 ESP32 ADC 보정 드라이버를 참조하세요.