ESP32 MQ3 알코올 센서
이 튜토리얼은 MQ3 알코올 센서를 ESP32에 인터페이싱하여 주변 공기의 에탄올 및 알코올 증기 농도를 감지하고 측정하는 방법을 안내합니다. MQ3 센서는 음주측정기 프로젝트, 알코올 감지 시스템, 공기 질 모니터링 애플리케이션의 기본 구성 요소 역할을 합니다.
이 가이드에서 다루는 내용:
- MQ3 알코올 센서를 ESP32에 연결하기
- 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 핀: 아날로그 출력 — 전압이 알코올 농도에 따라 변합니다. 알코올이 높을수록 전압이 높아집니다.

시각적 표시기로는 두 개의 LED가 있습니다:
- PWR-LED: 모듈에 전원이 공급될 때 켜집니다.
- DO-LED: 디지털 출력 상태를 반영합니다 — 알코올 감지 시 켜지고 그 외에는 꺼집니다.
작동 원리
MQ3는 이산화주석(SnO2) 반도체 물질의 저항 변화를 통해 작동합니다:
깨끗한 공기 상태: SnO2를 가열하면 산소 분자가 표면에 부착되어 전자를 포착하고 공핍층을 형성합니다. 이 전자 포착은 전도성 장벽을 만들어 높은 저항을 유지합니다.
알코올 존재 시: 알코올 분자가 표면 산소와 반응하여 결합을 끊고 포착된 전자를 이산화주석으로 다시 방출합니다. 이로 인해 전도성이 향상됩니다 — 알코올 수준이 높을수록 저항이 낮아집니다.
센서는 두 가지 출력 모드를 제공합니다:
디지털 출력 (DO 핀):
- 온보드 가변저항기를 통한 임계값 설정.
- DO는 알코올이 임계값을 초과하면 LOW(LED 켜짐)를 출력합니다.
- DO는 알코올이 임계값 아래로 유지되면 HIGH(LED 꺼짐)를 출력합니다.
아날로그 출력 (AO 핀):
- 알코올 농도에 비례하는 전압 출력.
- 알코올 증가 = 전압 출력 증가.
- 알코올 감소 = 전압 출력 감소.
- 참고: 가변저항기는 디지털 출력에만 영향을 미치며 아날로그 읽기에는 영향을 미치지 않습니다.
예열 및 보정
예열 요구 사항
MQ3는 정확한 측정을 생성하기 전에 가열이 필요합니다:
- 처음 사용하거나 장기간 보관(30일 이상) 후: 센서 안정화 및 측정 정확도를 위해 24-48시간 동안 전원을 유지합니다.
- 자주 사용하는 경우: 5-10분의 예열로 충분합니다. 초기 수치가 급등할 수 있지만 안정될 것입니다.
예열을 위해 VCC와 GND를 5V 전원 또는 ESP32의 전원 핀에 연결하기만 하면 됩니다.
임계값 결정
MQ3와 같은 히터 기반 센서는 보관 중에 드리프트가 발생할 수 있습니다. 이 보정을 통해 정확한 음주측정기 임계값을 설정합니다:
- 청정 공기 기준선: 신선한 공기에서 센서를 실행하고 아날로그 값을 기록합니다(일반적으로 100-150).
- 알코올 노출: 이소프로필 알코올이나 손 소독제를 센서 근처(접촉하지 않음)에 놓아 증기만 닿도록 합니다. 상승된 수치를 기록합니다(보통 증기 강도에 따라 400-900).
- 범위 설정: 기록된 값을 사용하여 구역을 정의합니다:
- 음주 없음: 기준선 + 20 미만 (예: < 120)
- 소량 음주: 중간 범위 값 (예: 120-400)
- 과음: 보통 임계값 초과 (예: > 400)
중요: 센서 특성은 장치와 환경마다 다릅니다. 사용 전에 항상 특정 하드웨어로 보정하세요.
디지털 임계값 조정
트리머 가변저항기를 사용하여 DO 핀 트리거 수준을 설정합니다:
- 센서를 알코올 증기에 노출시킵니다.
- LED가 활성화될 때까지 가변저항기를 시계 방향으로 돌립니다.
- LED가 막 비활성화될 때까지 반시계 방향으로 천천히 돌립니다.
- 임계값이 이제 보정되었습니다.
배선 다이어그램
MQ3 알코올 센서 모듈에는 두 개의 출력이 있으므로 필요에 따라 하나 또는 둘 다 사용할 수 있습니다.
- ESP32와 MQ3 알코올 센서를 브레드보드로 연결하는 방법 (USB 케이블로 전원 공급)

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
- ESP32와 MQ3 알코올 센서를 브레드보드로 연결하는 방법 (Vin 핀으로 전원 공급)

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
- ESP32와 MQ3 알코올 센서를 스크류 터미널 블록 브레이크아웃 보드로 연결하는 방법 (USB 케이블로 전원 공급)

- ESP32와 MQ3 알코올 센서를 스크류 터미널 블록 브레이크아웃 보드로 연결하는 방법 (Vin 핀으로 전원 공급)

| MQ3 Alcohol Sensor | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| DO | GPIO 16 |
| AO | GPIO 36 (ADC0) |
ESP32 코드 - 디지털 출력 읽기
빠른 시작
- ESP32가 처음이라면 ESP32 - 소프트웨어 설치 튜토리얼을 참조하세요.
- 위의 코드를 복사하여 Arduino IDE로 엽니다.
- Arduino IDE에서 업로드 버튼을 클릭하여 ESP32에 코드를 업로드합니다.
- MQ3 센서 근처에 알코올 증기 원을 놓습니다(손 소독제나 면봉에 묻힌 소독용 알코올이 잘 작동합니다).
- 시리얼 모니터에서 결과를 확인합니다.
참고: 수치가 현실과 맞지 않는 경우(오탐지 또는 미탐지), 모듈의 가변저항기를 조정하세요. 시계 방향으로 돌리면 민감도가 증가하고, 반시계 방향으로 돌리면 감소합니다. 정확도가 향상될 때까지 미세 조정하세요.
ESP32 코드 - 아날로그 출력 읽기
빠른 시작
- 위의 코드를 복사하여 Arduino IDE로 엽니다.
- Arduino IDE에서 업로드 버튼을 클릭하여 ESP32에 코드를 업로드합니다.
- 센서에 알코올 증기를 가져다 댑니다(손 소독제나 이소프로필 알코올).
- 시리얼 모니터에서 결과를 확인합니다.
디지털 또는 아날로그 출력 어느 것이든 임계값 로직을 구현하여 알람을 트리거하거나, 경고 표시등을 활성화하거나, 음주측정기 애플리케이션을 위한 데이터를 기록할 수 있습니다.
※ 주의:
이 튜토리얼은 센서 또는 부품에 연결된 ADC(아날로그-디지털 변환기)에서 값을 읽기 위해 analogRead() 함수를 사용합니다. ESP32의 ADC는 높은 정확도가 필요하지 않은 프로젝트에 적합합니다. 그러나 정밀한 측정이 필요한 프로젝트의 경우 다음 사항을 유의하세요:
- ESP32의 ADC는 완벽하게 정확하지 않으며 올바른 결과를 위해 보정이 필요할 수 있습니다. 각 ESP32 보드마다 약간씩 다를 수 있으므로 개별 보드마다 보정이 필요합니다.
- 보정은 특히 초보자에게 어려울 수 있으며 항상 원하는 정확한 결과를 얻지 못할 수도 있습니다.
높은 정밀도가 필요한 프로젝트의 경우 ESP32와 함께 외부 ADC(예: ADS1115)를 사용하거나 더 신뢰할 수 있는 ADC를 갖춘 Arduino Uno R4 WiFi 같은 다른 Arduino를 사용하는 것을 고려하세요. ESP32의 ADC를 여전히 보정하고 싶다면 ESP32 ADC 보정 드라이버를 참조하세요.