아두이노 우노 R4 MQ3 알코올 센서

이 가이드는 Arduino UNO R4와 MQ3 알코올 센서를 사용하여 공기 중의 알코올 증기와 에탄올을 감지하는 방법을 알려줍니다. 이 센서는 음주 측정기 프로젝트 및 알코올 감지 시스템에 일반적으로 사용됩니다.

아두이노 우노 R4와 mq3 알코올 가스 센서 모듈

필요한 하드웨어

1×Arduino UNO R4 WiFi or Arduino UNO R4 Minima
1×(또는) DIYables STEM V4 IoT, Compatible with Arduino Uno R4 WiFi 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×MQ3 Alcohol Sensor 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino UNO R4 아마존
1×(추천) 아두이노 우노 R4용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 전원 분배기 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Arduino Uno R4 WiFi Compatible Boards

MQ3 알코올 센서에 대하여

MQ3 알코올 센서는 MOS(금속 산화물 반도체) 센서로, 화학저항기(Chemiresistor)라고도 합니다. 알코올 증기에 노출될 때 감지 재료의 저항 변화를 기반으로 알코올을 감지하기 때문입니다. 공기 중의 알코올 증기(에탄올)를 감지하도록 특별히 설계되었으며 알코올 농도에 매우 민감합니다.

이 센서는 산화알루미늄 세라믹 기판 위에 이산화주석(SnO2) 코팅을 감지 요소로 사용합니다. 가열되면 SnO2가 알코올에 민감해집니다. 센서는 내부 가열 요소를 보호하고 부유 입자를 걸러내면서 기체 요소가 감지 챔버에 도달할 수 있도록 스테인리스강 망(방폭 네트워크)으로 덮여 있습니다.

일반적인 응용 분야에는 호흡 분석기, 음주 운전 감지 시스템, 알코올 존재 경보, 환경의 알코올 농도 모니터링이 필요한 프로젝트 등이 있습니다.

기술 사양

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

ppm이란 무엇인가요? 백만분의 일(ppm)은 가스 농도를 측정하는 단위입니다. 예를 들어, 500 ppm의 알코올은 백만 개의 가스 분자 중 500개가 알코올이고 999,500개가 다른 가스임을 의미합니다.

핀아웃

MQ3 알코올 센서에는 4개의 핀이 있습니다:

  • VCC 핀: 이 핀을 VCC(5V)에 연결합니다.
  • GND 핀: 이 핀을 GND(0V)에 연결합니다.
  • DO 핀: 디지털 출력 핀입니다. 알코올이 감지되면 LOW를, 감지되지 않으면 HIGH를 표시합니다. 온보드 가변저항을 사용하여 알코올 감지 임계값을 조절할 수 있습니다.
  • AO 핀: 아날로그 출력 핀입니다. 알코올 농도에 따라 변하는 전압을 생성합니다. 알코올 농도가 높을수록 전압이 높아집니다.
mq3 알코올 센서 모듈 핀아웃 다이어그램

또한 두 개의 LED 표시등이 있습니다:

  • 전원 표시등: 전원이 켜져 있음을 표시합니다.
  • DO-LED 표시등: DO 핀 값에 따른 알코올 감지 상태를 표시합니다. 알코올이 감지되면 켜지고, 없으면 꺼집니다.

작동 원리

MQ3 센서는 이산화주석(SnO2) 감지 요소의 전기 저항 변화를 기반으로 작동합니다:

깨끗한 공기에서: SnO2 반도체가 가열되면 산소 분자가 표면에 흡착되어 전자 고갈층을 형성합니다. 이는 재료를 고저항으로 만들어 전류 흐름을 방지하는 전위 장벽을 형성합니다.

알코올 존재 시: 알코올 증기가 흡착된 산소와 반응하여 표면 산소 밀도를 낮추고 전위 장벽을 낮춥니다. 이로 인해 이산화주석으로 전자가 방출되어 전류가 자유롭게 흐를 수 있게 됩니다. 알코올이 많을수록 저항이 낮아집니다.

센서는 두 가지 출력을 제공합니다:

DO 핀(디지털 출력):

  • 모듈에는 알코올 감지를 위한 민감도 임계값을 조절하는 가변저항이 포함되어 있습니다.
  • 알코올 농도가 설정된 임계값을 초과하면 센서 출력 핀이 LOW로 전환되고 DO-LED 표시등이 켜집니다.
  • 알코올 농도가 임계값 미만이면 센서 출력 핀이 HIGH로 전환되고 DO-LED 표시등이 꺼집니다.

AO 핀(아날로그 출력):

  • 출력 전압은 알코올 농도에 비례합니다.
  • 알코올 증기 농도가 높을수록 전압이 높아집니다.
  • 알코올 증기 농도가 낮을수록 전압이 낮아집니다.
  • 가변저항은 AO 핀 값에 영향을 주지 않습니다.

MQ3 센서 예열 및 보정

예열 시간

MQ3 알코올 센서는 정확한 판독값을 얻기 위해 사용 전에 가열해야 합니다:

  • 처음 사용 또는 장기 보관(1개월 이상) 후: 안정적이고 정확한 결과를 얻으려면 24~48시간 동안 예열합니다.
  • 최근 사용: 예열에 5~10분만 필요합니다. 처음에는 판독값이 높을 수 있지만 잠시 후 안정됩니다.

MQ3 센서를 예열하려면 VCCGND 핀을 전원 또는 Arduino UNO R4의 VCCGND에 연결하고 예열 기간 동안 연결 상태를 유지합니다.

임계값을 위한 보정

MQ3는 히터 구동 센서이므로 장기간 보관 시 보정이 변동할 수 있습니다. 음주 측정기 프로젝트를 위해 센서를 보정하고 임계값을 찾으려면:

  1. 기준값 기록: 깨끗한 공기에서 센서를 실행하고 아날로그 판독값을 기록합니다(일반적으로 약 100~150).
  2. 알코올로 테스트: 이소프로필 알코올이나 손 세정제를 사용합니다(액체가 센서에 닿지 않도록 주의 - 증기만 사용). 센서 근처에서 병을 짜서 증기를 방출하고 판독값을 기록합니다(농도에 따라 일반적으로 400~900).
  3. 임계값 설정: 판독값을 기반으로 임계값 수준을 정의할 수 있습니다:
  • 비음주: 기준값 + 20 미만(예: < 120)
  • 법적 한도 내: 기준값과 중간 수준 사이(예: 120~400)
  • 법적 한도 초과: 중간 수준 이상(예: > 400)

참고: 이 값은 특정 센서 및 환경에 따라 다릅니다. 사용 전에 항상 자신의 센서로 보정하세요.

디지털 출력 임계값 조정

온보드 가변저항을 사용하여 DO 핀의 임계값을 설정하려면:

  1. 센서를 알코올 증기에 노출합니다.
  2. 상태 LED가 켜질 때까지 가변저항을 시계 방향으로 돌립니다.
  3. LED가 꺼질 때까지 가변저항을 반시계 방향으로 돌립니다.
  4. 이제 임계값이 설정되었습니다.

배선도

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

MQ3 알코올 센서 Arduino UNO R4
VCC 5V
GND GND
DO 핀 2
AO A0
아두이노 우노 R4와 mq3 알코올 센서 배선도

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

Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.

Arduino UNO R4 코드 - DO 핀에서 값 읽기

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-mq3-alcohol-sensor */ #define DO_PIN 2 // The Arduino UNO R4 pin connected to DO pin of the MQ3 sensor void setup() { // initialize serial communication Serial.begin(9600); // initialize the Arduino's pin as an input pinMode(DO_PIN, INPUT); Serial.println("Warming up the MQ3 sensor"); delay(20000); // wait for the MQ3 to warm up } void loop() { int alcoholState = digitalRead(DO_PIN); if (alcoholState == HIGH) Serial.println("Alcohol is NOT detected"); else Serial.println("Alcohol is detected"); }

빠른 단계

다음 단계를 순서대로 따라하세요:

  • Arduino Uno R4 WiFi/Minima를 처음 사용하는 경우 아두이노 우노 R4 - 소프트웨어 설치을 참조하세요.
  • 제공된 다이어그램에 따라 Arduino Uno R4 보드를 MQ3 알코올 센서에 연결합니다.
  • USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결합니다.
  • 컴퓨터에서 Arduino IDE를 실행합니다.
  • 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
  • 위의 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE의 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 업로드합니다.
  • MQ3 센서를 알코올 증기에 노출합니다(손 세정제나 이소프로필 알코올을 적신 솜을 센서 근처에 사용하면 됩니다).
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' 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
Arduino Uno R4 WiFi on COM15
2

참고: 센서 출력이 실제 알코올 존재를 반영하지 않는 경우(예: 알코올이 없는데 감지하거나, 알코올이 있는데 감지하지 못하는 경우), 센서 모듈의 가변저항을 돌려 트리거 임계값을 조정해야 합니다. 시계 방향으로 돌리면 민감도가 높아지고, 반시계 방향으로 돌리면 낮아집니다.

Arduino UNO R4 코드 - AO 핀에서 값 읽기

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-mq3-alcohol-sensor */ #define AO_PIN A0 // The Arduino UNO R4 pin connected to AO pin of the MQ3 sensor void setup() { // initialize serial communication Serial.begin(9600); Serial.println("Warming up the MQ3 sensor"); delay(20000); // wait for the MQ3 to warm up } void loop() { int alcoholValue = analogRead(AO_PIN); Serial.print("MQ3 sensor AO value: "); Serial.println(alcoholValue); delay(500); }

빠른 단계

  • 위의 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE의 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 업로드합니다.
  • MQ3 센서를 알코올 증기에 노출합니다(손 세정제나 이소프로필 알코올 사용).
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' 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
Arduino Uno R4 WiFi on COM15
2

DO 또는 AO의 값을 기반으로 알코올 감지를 위한 임계값을 설정하고 경보를 트리거하거나, 경고 LED를 활성화하거나, 음주 측정기 응용 프로그램을 위한 데이터를 기록할 수 있습니다.

Arduino UNO R4 코드 - 임계값이 있는 간단한 음주 측정기

이 고급 예제는 아날로그 출력을 사용하여 보정된 임계값을 기반으로 알코올 중독 수준을 추정합니다.

/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-mq3-alcohol-sensor */ #define AO_PIN A0 // The Arduino UNO R4 pin connected to 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(AO_PIN); // 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 UNO R4에 코드를 업로드합니다.
  • 알코올 증기(손 세정제나 이소프로필 알코올)에 센서를 노출하여 테스트합니다.
  • 시리얼 모니터에서 결과를 확인합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' 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 Sensor Value: 125 | Status: Stone Cold Sober
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

참고: 이것은 교육 목적으로만 사용합니다. 법적인 음주 측정기로 사용하거나 운전 적합성을 판단하는 데 사용하지 마세요.

동영상

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