홍창민정보·인공지능 교사

가스·공기 · 난이도 보통

MQ-2 가스 센서로 기준 전압 대비 변화와 DO 경보 문턱 재기

MQ-2는 LPG·프로판·수소·메테인·알코올·연기에 함께 반응하는 센서예요. 5V 출력을 분압해 피코로 읽는 배선, 예열이 자리 잡았는지 확인하고 기준 전압보다 몇 % 올랐는지 보는 코드, DO 경보 문턱을 직접 재는 탐구를 정리했어요.

글 홍창민 · 갱신 2026-10-31 · 읽는 데 약 8분 · 가상 실행 확인 (실물 미확인)

이 센서로 무엇을 잴 수 있나

MQ-2는 산화주석(SnO₂) 막을 데워서 쓰는 반도체식 가스 센서예요. 한웨이(Hanwei) 데이터시트는 감지 대상으로 LPG, 아이소뷰테인, 프로판, 메테인, 알코올, 수소, 연기를 적어 두었어요. 여러 기체에 한꺼번에 반응하기 때문에, 값이 올라도 어떤 기체 때문인지는 알 수 없어요.

그래서 교실에서는 "깨끗한 공기일 때보다 몇 % 변했나"를 재는 도구로 써요. 손 소독제에서 나온 알코올 증기가 거리에 따라 얼마나 약해지는지, 바람이 반응을 얼마나 빨리 지우는지, 모듈의 DO 경보가 어느 전압에서 켜지는지를 숫자로 확인할 수 있어요. 데이터시트의 감지 범위(LPG·프로판 200~5000ppm, 알코올 100~2000ppm 등)는 표준 가스로 보정한 장치 이야기라서, 모듈만으로 ppm을 말할 수는 없어요.

원리

센서 안에는 히터 코일과 산화주석 막이 들어 있어요. 데워진 막은 깨끗한 공기에서 전기가 잘 통하지 않다가, 가연성 기체가 닿으면 저항(Rs)이 내려가요. 모듈은 Rs와 부하 저항(RL)을 5V에 직렬로 잇고, RL 양 끝의 전압을 AO로 내보내요. 기체가 늘면 Rs가 줄고 AO 전압은 올라가요. 데이터시트의 식은 Rs = (Vc ÷ VRL − 1) × RL이에요. Vc는 회로 전압(5V), VRL은 AO 전압이에요.

모듈에는 비교기(LM393)도 있어요. AO 전압이 가변저항으로 정한 문턱을 넘으면 DO 핀 상태가 바뀌고 작은 LED가 켜져요. 흔한 모듈은 문턱을 넘을 때 DO가 LOW가 되지만 제품마다 다를 수 있으니 직접 확인하세요.

히터 저항은 33Ω(±5%)이라 5V를 걸면 약 0.15A가 흘러요. 피코 자체보다 훨씬 많은 전류라서, 센서를 여러 개 달 때는 전원부터 계산해야 해요.

준비물

  • 라즈베리파이 피코(Pico 2 W 포함)와 USB 케이블
  • MQ-2 모듈(VCC·GND·DO·AO 네 핀)
  • 10kΩ 저항 2개, 20kΩ 저항 2개(AO용과 DO용 분압 두 벌)
  • 브레드보드, 점퍼선
  • 멀티미터(VBUS 전압과 RL 확인용, 있으면 좋아요)
  • 탐구용: 손 소독제, 면봉, 자, USB 선풍기

배선

MQ-2 가스 센서로 기준 전압 대비 변화와 DO 경보 문턱 재기: 브레드보드에 피코와 센서를 꽂은 배선 그림
시나브로 PICO 브레드보드 작업대와 같은 계산으로 그린 배선이에요. 위 + 줄은 3.3V, 아래 + 줄은 5V예요.
브레드보드 따라 꽂기 순서 (10단계)
  1. 피코를 브레드보드 가운데 홈에 걸쳐 꽂아요. USB 단자가 왼쪽을 보게 하고, 1번 핀이 f2, 40번 핀이 e2에 들어가요. 다리가 홈 양쪽에 모두 들어갔는지 옆에서 봐요.
  2. 빨간 선: 피코 40번 핀(VBUS) 옆 칸 a2 → 아래쪽 + 줄(5V). 이제 이 줄 전체가 5V예요. 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)은 절대 서로 잇지 않아요.
  3. 검은 선: 피코 3번 핀(GND) 옆 칸 j4 → 아래쪽 − 줄(GND). 이제 이 줄 전체가 GND예요.
  4. 복합 가스: LPG·프로판·메탄·수소·연기 MQ-2 꽂기: 다리 VCC · GND · AO를 아래쪽 j24 · j25 · j26에 차례로 꽂아요. 다리가 브레드보드에 바로 안 들어가면 암-수 점퍼선으로 같은 칸에 이어요.
  5. 빨간 선(5V 전원): 복합 가스: LPG·프로판·메탄·수소·연기 VCC 줄 i24 → 아래쪽 + 줄(5V)
  6. 검은 선(GND): 복합 가스: LPG·프로판·메탄·수소·연기 GND 줄 i25 → 아래쪽 − 줄(GND)
  7. 저항 10kΩ(색띠 갈색·검정·주황): g26 ↔ g28 (AO 다리 칸 → 나눔 칸 28열)
  8. 저항 20kΩ(색띠 빨강·검정·주황): i28 ↔ 아래쪽 − 줄(GND)
  9. 초록 선: 나눔 칸 h28 → 피코 31번 핀(GP26) 옆 칸 a11. 5V 신호가 3.3V 아래로 줄어 피코가 안전해요.
  10. 마지막 확인: ① 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)이 서로 이어지지 않았나요? ② 모든 부품의 GND가 − 줄에 이어졌나요? ③ 5V 신호 다리는 저항을 거쳐 피코에 이어졌나요? ④ 긴 브레드보드는 + − 줄이 가운데에서 끊긴 것도 있어요(빨간·파란 선이 끊겨 있으면 짧은 선으로 이어요). ⑤ 그림과 한 칸씩 비교한 뒤 USB를 꽂아요.
모듈 핀 피코 핀 비고
VCC VBUS (40번) 히터·측정 회로 5V, 약 0.15A
GND GND (38번) 피코와 접지를 함께 써요
AO GP26 (31번) 10kΩ·20kΩ 분압 뒤 연결
DO GP16 (21번) 10kΩ·20kΩ 분압 뒤 연결

분압은 AO ─ 10kΩ ─ ● ─ 20kΩ ─ GND로 잇고, 가운데 점(●)을 GP26에 연결해요. 가운데 점의 전압은 AO × 20 ÷ (10 + 20), 곧 2/3예요. AO가 5V까지 올라가도 약 3.33V라서 피코 ADC가 읽는 3.3V 끝 근처에 머물러요. 코드에서는 읽은 값에 1.5를 곱해 원래 AO 전압으로 되돌려요. DO도 HIGH일 때 5V 가까이 나오니 같은 방법으로 낮춰 GP16에 연결해요. 배선 그림과 따라 꽂기는 AO 쪽만 보여 주니, DO용 분압 저항 한 벌은 그림을 따라 꽂은 뒤 같은 모양으로 더 꽂아요.

알아 둘 점이 하나 더 있어요. 분압 저항 30kΩ은 모듈의 RL과 나란히 붙어 실제 부하를 조금 줄여요. 기준과 비교하는 상대 변화에는 문제가 없지만, Rs를 직접 계산할 때는 이 점을 넣어야 해요.

코드

from machine import ADC, Pin
import time

ao = ADC(Pin(26))              # AO → 10kΩ/20kΩ 분압 → GP26
do = Pin(16, Pin.IN)           # DO → 10kΩ/20kΩ 분압 → GP16

def ao_volt(n=16):
    s = 0
    for i in range(n):
        s += ao.read_u16()
    return s / n * 3.3 / 65535 * 1.5   # 분압을 되돌린 AO 전압(V)

# 1) 자리 잡기 확인: 10초 사이 변화가 1%보다 작아질 때까지(최대 5분)
prev = ao_volt()
for k in range(30):
    time.sleep(10)
    now = ao_volt()
    drift = abs(now - prev) / prev * 100 if prev > 0 else 100
    print(f"예열 확인 {k + 1}: {now:.3f} V, 10초 변화 {drift:.1f}%")
    if drift < 1:
        break
    prev = now

base = ao_volt(64)             # 2) 깨끗한 공기의 기준 전압
print(f"기준 전압: {base:.3f} V")

while True:
    v = ao_volt()
    rise = (v - base) / base * 100 if base > 0 else 0
    alarm = 1 if do.value() == 0 else 0   # 흔한 모듈: 문턱을 넘으면 DO가 LOW
    print(f"DATA: mq2_v={v:.3f}, rise={rise:.0f}, do_alarm={alarm}")
    time.sleep(1)
  • ao_volt()는 16번 읽어 평균을 내요. read_u16() 값 0~65535를 0~3.3V로 바꾸고 1.5를 곱해 AO 전압으로 되돌려요.
  • 처음 for 반복은 예열 확인이에요. 10초 사이 변화가 1%보다 작아지면 넘어가고, 5분이 지나면 그냥 넘어가요. 새 센서는 데이터시트에 따라 24시간(한웨이 판) 또는 48시간(새 형식 판) 넘게 켜 두어야 특성이 자리 잡아요. 이 코드는 "오늘 켠 뒤 값이 멈췄나"만 봐요.
  • 기준 전압은 64번 평균이에요. 이때 주변에 소독제나 입김이 없어야 해요.
  • rise는 기준보다 몇 % 올랐는지, do_alarm은 DO가 LOW일 때 1이에요.

값 해석과 보정

rise는 같은 센서, 같은 날, 같은 자리에서 비교할 때만 의미가 있어요. 다른 모듈과 숫자를 그대로 견주지 마세요.

데이터시트 감도 곡선의 기준 Ro는 "깨끗한 공기 속 1000ppm 수소에서 잰 저항"이에요. 우리가 잡은 깨끗한 공기 기준과 달라요. 곡선 식에 대입해 ppm을 내는 예제가 많지만, 표준 가스로 보정하지 않았다면 그 숫자에는 근거가 없어요.

데이터시트에는 온도와 습도(33%RH, 85%RH)에 따라 Rs/Ro가 달라지는 그래프도 있어요. 아침과 오후, 맑은 날과 비 오는 날은 기준이 달라지니 실험할 때마다 기준을 새로 잡아요.

Rs가 궁금하면 전원을 끈 채 모듈의 RL을 멀티미터로 재고, Rs = (VBUS ÷ AO − 1) × (RL과 30kΩ의 병렬값)으로 계산해요. VBUS도 정확히 5V가 아닐 수 있으니 재서 넣어요.

DO 문턱은 "지금 가변저항이 가리키는 AO 전압"일 뿐이에요. 탐구 2처럼 직접 재 두면 경보 기준을 숫자로 설명할 수 있어요.

자주 하는 실수

  1. AO를 GP26에 바로 연결하기. 진한 기체에서는 AO가 5V 가까이 올라 피코 입력 범위를 넘어요. 반드시 분압해요.
  2. 켜자마자 기준을 잡기. 히터가 막을 데우는 동안 값이 계속 움직여서, 아무것도 안 했는데 올랐다거나 내렸다고 나와요. 예열 확인 단계를 지우지 마세요.
  3. DO LED가 켜지면 가스가 있다고 믿기. 문턱은 가변저항을 돌린 사람이 정한 값이에요. 공장에서 맞춘 경보 기준이 아니에요.
  4. 센서를 상자에 넣고 실리콘으로 붙이기. 데이터시트는 유기 실리콘 증기에 노출되면 센서가 제 기능을 잃는다고 경고해요. 실리콘 접착제나 실란트 가까이에 두지 마세요.
  5. 소독제를 센서에 직접 뿌리기. 물이 튀거나 진한 기체에 오래 두면 감도가 떨어진다고 데이터시트에 적혀 있어요. 면봉에 묻혀 몇 cm 떨어뜨려 두세요.

이 센서로 잴 수 있는 탐구

1. 거리가 두 배가 되면 반응은 얼마나 줄까 - 질문: 소독제 면봉과 센서 사이 거리에 따라 최고 상승률이 어떻게 바뀔까? - 바꾸는 것: 거리 2cm, 4cm, 8cm - 재는 것: 최고 상승률(%), 기준 +10% 안으로 돌아오기까지 걸린 시간(초) - 방법: 면봉을 소독제에 한 번만 찍어 양을 맞추고, 센서 옆 같은 높이에 30초 두었다가 치워요. 값이 기준으로 돌아온 뒤 다음 거리를 재고, 거리마다 3번 반복해 평균을 내요.

2. DO는 어느 전압에서 바뀔까 - 질문: 가변저항을 돌린 정도에 따라 DO가 켜지는 AO 전압은 어떻게 달라질까? - 바꾸는 것: 가변저항 위치(작은 드라이버로 1/4바퀴씩) - 재는 것: do_alarm이 0에서 1로 바뀐 순간의 mq2_v(V) - 방법: 소독제 면봉을 천천히 가까이 가져가며 기록하고, 저장한 표에서 do_alarm이 처음 1이 된 줄의 전압을 찾아요. 위치마다 3번 재요.

3. 바람은 반응을 얼마나 지울까 - 질문: 바람이 불면 최고 상승률이 작아지고 회복이 빨라질까? - 바꾸는 것: USB 선풍기 바람(끔, 약, 강). 선풍기는 30cm 떨어뜨려 고정 - 재는 것: 최고 상승률(%), 회복 시간(초) - 방법: 면봉 거리는 4cm로 고정하고 바람 세기마다 3번씩 재요. 바람이 센서 옆을 스치도록 방향을 맞춰요.

안전

  • 히터가 켜져 있으면 센서 겉면이 뜨거워요. 켠 채로 만지지 말고, 끈 뒤에도 식을 때까지 기다려요.
  • 학생 실험에서는 기체를 만들거나 불을 쓰지 않아요. 향이나 종이를 태운 연기, 라이터 가스는 쓰지 않아요. LPG·부탄 반응을 보여 주고 싶다면 교사가 환기된 곳에서 불 없이 아주 조금만 시연해요.
  • 소독제도 불이 붙는 액체예요. 면봉에 묻힌 양만 쓰고 불 가까이 두지 마세요.
  • 이 장치는 인증받은 가스누설경보기가 아니에요. 집이나 학교의 가스 누출을 지키는 데 쓰지 마세요. 실제로 가스 냄새가 나면 실험을 멈추고 창문을 연 뒤 선생님께 알려요.
  • VBUS(5V) 선이 GP 핀에 닿으면 피코가 망가질 수 있어요. 배선은 USB를 뽑고 바꿔요.

더 알아보기

  • 데이터시트: Hanwei Electronics "MQ-2 Technical Data"(감지 기체, 히터 33Ω, 예열 24시간, Ro 정의), 새 형식 판 "MQ-2 Semiconductor Sensor for Combustible Gas"(Rs 계산식, 예열 48시간)
  • 라이브러리: 따로 없어요. MicroPython 내장 machine.ADC, machine.Pin을 써요.
  • 기초 글: 분압 회로, 센서 값의 신뢰도, 전원 계산, 브레드보드 기초
글쓴이

홍창민 · 울산 학성고등학교 정보·인공지능 교사. 수업에 쓰는 도구(시나브로 PICO 웹 IDE, 학교 AI 서버 등)를 직접 만들어 운영해요. 소개 보기 · 고칠 곳 알려 주기