ESP8266 MQ3 알코올 센서

이 튜토리얼은 MQ3 알코올 센서를 ESP8266과 연결하여 환경의 에탄올 및 알코올 증기를 측정하는 방법을 설명합니다. MQ3 센서는 호흡 테스트 장치, 알코올 감지 경보, 공기 품질 모니터링 애플리케이션에 유용합니다.

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

ESP8266 NodeMCU과 mq3 알코올 가스 센서 모듈

필요한 하드웨어

1×ESP8266 NodeMCU 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×MQ3 Alcohol Sensor 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP8266용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) ESP8266 Type-C용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

MQ3 알코올 센서에 대하여

금속 산화물 반도체(MOS) 화학 저항기로 설계된 MQ3는 활성 재료 내의 저항 변화를 통해 알코올을 감지합니다. 이 센서는 측정 범위 전반에 걸쳐 신뢰할 수 있는 감도로 에탄올 증기 감지에 특화되어 있습니다.

감지 소자는 알루미늄 산화물 세라믹 기반 위에 이산화주석(SnO2) 층으로 구성됩니다. 가열을 통해 SnO2가 공기 중 알코올 분자에 반응하도록 활성화됩니다. 보호용 스테인리스 스틸 메쉬가 소자를 감싸 가스가 감지 구역에 접근할 수 있도록 하면서 보호합니다.

일반적인 응용 분야에는 DIY 음주 측정기, 손상 감지 시스템, 알코올 증기 경보 장치, 대기 알코올 측정이 포함됩니다.

기술 사양

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

ppm이란? ppm(parts-per-million) 측정값은 농도 비율을 나타냅니다. 500ppm의 경우 100만 개의 총 가스 분자 중 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분의 빠른 예열로 충분합니다. 초기 측정값은 높을 수 있지만 빠르게 정상화됩니다.

5V와 접지에 VCCGND를 연결하여 센서를 예열합니다.

임계값 찾기

가열된 센서(MQ3 등)는 보관 중 드리프트될 수 있습니다. 음주 측정기 용도의 경우 다음 보정 절차를 통해 임계값을 설정합니다:

  1. 깨끗한 공기에서 기준선 기록: 신선한 공기에서 센서를 동작시키고 아날로그 출력을 기록합니다(일반적으로 100-150).
  2. 알코올 증기 투입: 이소프로필 알코올 또는 손 소독제를 센서 근처(접촉 없이)에 놓고 증기가 닿게 합니다. 높아진 측정값을 기록합니다(증기 농도에 따라 일반적으로 400-900).
  3. 감지 범위 설정: 측정값을 바탕으로 임계값 구간을 정의합니다:
  • 알코올 없음: 기준선 + 20 미만 (예: < 120)
  • 중간 알코올: 중간 범위 값 (예: 120-400)
  • 높은 알코올: 중간 범위 초과 (예: > 400)

중요: 각 센서와 환경에서 값이 다르게 나옵니다. 항상 구현 전에 특정 하드웨어를 보정하세요.

디지털 임계값 설정

모듈의 가변 저항을 사용하여 DO 핀 트리거 레벨을 조절합니다:

  1. 센서에 알코올 증기를 노출합니다.
  2. LED가 활성화될 때까지 가변 저항을 시계 방향으로 돌립니다.
  3. LED가 막 비활성화될 때까지 천천히 반시계 방향으로 돌립니다.
  4. 임계값 설정 완료.

배선도

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

ESP8266 NodeMCU mq3 알코올 센서 배선도

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

ESP8266 핀배열ESP8266 전원을 켜는 방법에 대해 더 많이 보십시오.

ESP8266 코드 - 디지털 출력 읽기

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-mq3-alcohol-sensor */ /* * This ESP8266 NodeMCU code was developed by newbiely.com * * This ESP8266 NodeMCU code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/esp8266/esp8266-mq3-alcohol-sensor */ #define PIN_DO D7 // The ESP8266 pin D7 connected to the DO pin of the MQ3 sensor void setup() { // Initialize serial communication Serial.begin(9600); // Initialize the ESP8266 pin as an input pinMode(PIN_DO, INPUT); // Warm-up message Serial.println("Warming up the MQ3 sensor"); delay(20000); // 20 seconds warm-up time for recently used sensor } void loop() { int gasState = digitalRead(PIN_DO); if (gasState == HIGH) { Serial.println("Alcohol is NOT detected"); } else { Serial.println("Alcohol is detected"); } delay(1000); }

빠른 시작

Arduino IDE에서 ESP8266을 시작하는 방법:

  • ESP8266이 처음이라면 ESP8266 - 소프트웨어 설치 튜토리얼을 확인하세요.
  • 배선도에 따라 부품을 연결합니다.
  • USB 케이블로 ESP8266 보드를 컴퓨터에 연결합니다.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택합니다.
  • 위 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE의 Upload 버튼을 클릭하여 ESP8266에 코드를 업로드합니다.
  • MQ3 센서 근처에 알코올 증기 소스를 가져갑니다(손 소독제 또는 솜에 묻힌 소독용 알코올 사용).
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2

LED 상태가 항상 켜져 있거나 꺼져 있는 경우, 가변 저항을 조절하여 센서 감도를 미세 조정할 수 있습니다.

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

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-mq3-alcohol-sensor */ /* * This ESP8266 NodeMCU code was developed by newbiely.com * * This ESP8266 NodeMCU code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/esp8266/esp8266-mq3-alcohol-sensor */ #define PIN_AO A0 // The ESP8266 pin connected to the AO pin of the MQ3 sensor void setup() { // Initialize serial communication Serial.begin(9600); // Warm-up message Serial.println("Warming up the MQ3 sensor"); delay(20000); // 20 seconds warm-up time for recently used sensor } void loop() { int gasValue = analogRead(PIN_AO); Serial.print("MQ3 sensor AO value: "); Serial.println(gasValue); delay(1000); }

빠른 시작

  • 위 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE의 Upload 버튼을 클릭하여 ESP8266에 코드를 업로드합니다.
  • 센서에 알코올 증기를 투입합니다(손 소독제 또는 이소프로필 알코올 증기).
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2

DO 또는 AO에서 읽은 값을 이용하여 임계값 기반 로직으로 알람을 트리거하거나, 경고 표시등을 제어하거나, 음주 측정기 기능을 위한 데이터를 기록할 수 있습니다.

ESP8266 코드 - 임계값 감지 음주 측정기

이 예제는 보정된 임계값으로 아날로그 출력을 사용하여 음주 수준을 추정하는 방법을 보여줍니다.

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-mq3-alcohol-sensor */ /* * This ESP8266 NodeMCU code was developed by newbiely.com * * This ESP8266 NodeMCU code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/esp8266/esp8266-mq3-alcohol-sensor */ #define PIN_AO A0 // The ESP8266 pin connected to the AO pin of the MQ3 sensor // Threshold values - REPLACE THESE with your calibrated values! // Run calibration first to find these values for your sensor #define SOBER_THRESHOLD 120 // Below this = sober #define DRUNK_THRESHOLD 400 // Above this = drunk, between = drinking but within limits void setup() { // Initialize serial communication Serial.begin(9600); // Warm-up message Serial.println("MQ3 Alcohol Sensor - Breathalyzer"); Serial.println("Warming up sensor..."); delay(20000); // 20 second warm-up for recently used sensor Serial.println("Sensor ready!"); Serial.println(); } void loop() { int gasLevel = analogRead(PIN_AO); // Read the analog value from sensor // Print sensor value Serial.print("Sensor Value: "); Serial.print(gasLevel); Serial.print(" | Status: "); // Determine status based on thresholds if (gasLevel < SOBER_THRESHOLD) { Serial.println("Stone Cold Sober"); } else if (gasLevel >= SOBER_THRESHOLD && gasLevel < DRUNK_THRESHOLD) { Serial.println("Drinking but within limits"); } else { Serial.println("DRUNK"); } delay(1000); // Wait 1 second between readings }

빠른 시작

  • 중요: 먼저 아날로그 읽기 예제로 센서를 보정하여 환경에 적합한 임계값을 결정하세요.
  • 코드의 SOBER_THRESHOLDDRUNK_THRESHOLD 상수를 보정된 값으로 업데이트합니다.
  • 위 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE의 Upload 버튼을 클릭하여 ESP8266에 코드를 업로드합니다.
  • 알코올 증기(이소프로필 알코올 또는 손 소독제 증기)로 테스트합니다.
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.