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

가스·공기 · 난이도 보통

MQ-6 LPG 센서로 켜는 문턱과 끄는 문턱이 다른 가스 경보 만들기

MQ-6은 LPG·아이소뷰테인·프로판에 민감한 반도체식 센서예요. 공기보다 무거운 LPG의 성질, 5V 출력 분압, 이동 평균과 두 문턱으로 깜빡이지 않는 경보를 만드는 피코 코드, 경보가 바뀐 횟수를 세어 설계를 비교하는 탐구를 정리했어요.

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

이 센서로 무엇을 잴 수 있나

MQ-6은 한웨이 데이터시트에서 "LPG, 아이소뷰테인, 프로판에 감도가 높고 알코올과 연기에는 감도가 낮다"고 소개하는 센서예요. 감지 범위는 LPG·아이소뷰테인·프로판·LNG 200~10000ppm으로 적혀 있어요. 데이터시트는 쓰임새로 가정과 산업 현장의 가스 누출 감지 장치를 들어요.

학생이 LPG나 부탄을 직접 다루지는 않으니, 이 글은 센서 값을 "경보"로 바꾸는 판단 규칙에 집중해요. 문턱 하나로 경보를 만들면 값이 문턱 근처에서 오르내릴 때 경보가 켜졌다 꺼졌다를 되풀이해요. 문턱을 두 개 두면 이 깜빡임이 얼마나 줄어드는지, 센서를 덮개로 감싸면 경보가 얼마나 늦어지는지, 기준이 기온과 습도에 따라 얼마나 움직이는지를 숫자로 비교할 수 있어요.

원리

센서는 데운 산화주석 막의 저항(Rs)이 기체에 닿으면 내려가는 원리로 동작해요. 한웨이 판 데이터시트의 표준 조건은 히터 5V, 히터 저항 33Ω(±5%), 부하 저항 20kΩ이에요. 5V에서 히터 전류는 약 0.15A예요. 감도 곡선의 기준 Ro는 "깨끗한 공기 속 1000ppm LPG에서의 저항"이고, 그때 Rs는 10~60kΩ으로 적혀 있어요.

LPG의 주성분인 프로판(분자량 44)과 뷰테인(58)은 공기(평균 약 29)보다 무거워서 새어 나오면 바닥 쪽에 고여요. 메테인(16)이 주성분인 도시가스는 반대로 위로 올라가요. LPG 경보기는 바닥 가까이, 도시가스 경보기는 천장 가까이 다는 이유예요.

경보 규칙에는 두 가지 장치를 넣어요. 첫째는 지수 이동 평균이에요. 새 값에 0.2, 이전 평균에 0.8의 무게를 주어 한순간 튀는 값을 누그러뜨려요. 둘째는 히스테리시스예요. 켜는 문턱(40%)과 끄는 문턱(20%)을 다르게 두고, 그 사이에서는 지금 상태를 유지해요. 보일러 온도 조절기가 설정 온도 근처에서 쉴 새 없이 켜졌다 꺼지지 않게 만드는 방법과 같아요.

준비물

  • 라즈베리파이 피코 2 W(보드 LED를 경보 표시로 써요)와 USB 케이블
  • MQ-6 모듈(VCC·GND·DO·AO)
  • 10kΩ, 20kΩ 저항 1개씩
  • 브레드보드, 점퍼선
  • 손 소독제, 면봉, 자
  • (탐구 2) 종이컵, 송곳 / (탐구 3) BME280 같은 온습도 센서

배선

MQ-6 LPG 센서로 켜는 문턱과 끄는 문턱이 다른 가스 경보 만들기: 브레드보드에 피코와 센서를 꽂은 배선 그림
시나브로 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-6 꽂기: 다리 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
GND GND (38번) 공통 접지
AO GP26 (31번) 10kΩ·20kΩ 분압 뒤 연결
DO 연결 안 함 모듈 비교기 대신 코드로 판단

피코 ADC는 3.3V를 넘는 입력을 모두 같은 값(65535)으로 읽어요. AO는 5V까지 올라갈 수 있으니 그대로 연결하면 진한 기체일수록 차이를 구별하지 못하고, 핀도 위험해져요. AO 쪽에 10kΩ, GND 쪽에 20kΩ을 두어 2/3로 낮추면 5V까지의 변화를 모두 3.3V 안에 담을 수 있어요. 코드는 1.5를 곱해 원래 전압으로 되돌려요.

코드

from machine import ADC, Pin
import time

mq6 = ADC(Pin(26))             # AO → 10kΩ/20kΩ 분압 → GP26
led = Pin("LED", Pin.OUT)      # 경보 표시(Pico 2 W 보드 LED)
ON = 40                        # 기준보다 40% 넘게 3초 이어지면 켜기
OFF = 20                       # 20% 아래로 내려와야 끄기

def volt():
    s = 0
    for i in range(16):
        s += mq6.read_u16()
    return s / 16 * 3.3 / 65535 * 1.5

base = 0
for i in range(30):
    base += volt()
    time.sleep(1)
base = base / 30
print(f"기준 전압 {base:.3f} V")

avg = base
over = 0
alarm = 0
changes = 0
while True:
    avg = avg * 0.8 + volt() * 0.2       # 지수 이동 평균: 튀는 값 누르기
    rise = (avg - base) / base * 100 if base > 0 else 0
    over = over + 1 if rise > ON else 0
    if alarm == 0 and over >= 3:
        alarm = 1
        changes += 1
    elif alarm == 1 and rise < OFF:
        alarm = 0
        changes += 1
    led.value(alarm)
    print(f"DATA: mq6_rise={rise:.0f}, alarm={alarm}, changes={changes}")
    time.sleep(1)
  • 처음 30초 평균이 기준(base)이에요.
  • avg는 지수 이동 평균이에요. 0.2를 키우면 빨리 따라가고 덜 매끄러워져요.
  • over는 켜는 문턱을 넘은 상태가 몇 초 이어졌는지 세요. 3초 이어져야 켜지므로 한 번 튄 값으로는 경보가 울리지 않아요.
  • 끄는 문턱은 20%예요. 값이 20~40% 사이에 머무는 동안에는 켜진 경보는 켜진 채로, 꺼진 경보는 꺼진 채로 있어요.
  • changes는 경보가 켜지거나 꺼진 횟수예요. 이 숫자로 규칙을 비교해요.

값 해석과 보정

여기서 쓴 40%와 20%는 출발점일 뿐이에요. 문턱은 내 센서의 데이터로 정해야 해요. 먼저 아무것도 하지 않은 채 10분 동안 기록해서 mq6_rise가 저절로 얼마나 흔들리는지 봐요. 흔들림의 크기는 표준편차로 나타내면 편해요. 스프레드시트의 STDEV 함수로 10분 기록의 표준편차를 구하고, 끄는 문턱은 그 몇 배 위에, 켜는 문턱은 끄는 문턱보다 또 넉넉히 위에 두는 식이에요. 몇 배로 정했는지가 곧 설계의 근거가 돼요. 정한 근거를 기록에 함께 적어 두면 다른 사람이 같은 규칙을 다시 만들 수 있어요.

이 경보는 상대 변화로 판단해요. 실제 가스 경보기는 정해진 농도의 표준 가스로 문턱을 맞추고, 데이터시트도 1000ppm LPG로 감도를 맞추고 RL을 20kΩ 근처(10~47kΩ)로 고르라고 권해요. 우리 장치의 40%가 몇 ppm에 해당하는지는 알 수 없어요.

데이터시트에는 기온과 습도(33%RH, 85%RH)에 따라 Rs/Ro가 달라지는 그래프가 있어요. 기준을 오전에 잡고 오후까지 쓰면 아무 기체가 없어도 rise가 문턱 쪽으로 움직일 수 있어요. 오래 켜 둘 때는 탐구 3으로 이 흐름을 먼저 확인하세요.

자주 하는 실수

  1. 문턱 하나로 경보를 만들기. 값이 문턱 근처에서 흔들리면 경보가 계속 깜빡여요. 사람은 금방 경보를 무시하게 돼요.
  2. LPG 센서를 천장 가까이 달기. LPG는 공기보다 무거워 아래에 고여요. 높이 단 센서는 늦게 반응해요.
  3. 보기 좋게 꽉 막힌 상자에 넣기. 기체가 상자 안으로 퍼져 들어가는 시간만큼 경보가 늦어져요. 상자를 쓰면 구멍을 충분히 내요.
  4. 한 번의 실험으로 문턱을 정하기. 기준의 흔들림은 날씨와 시간에 따라 달라요. 며칠 기록을 보고 정해요.

이 센서로 잴 수 있는 탐구

1. 문턱 두 개가 깜빡임을 줄일까 - 질문: 끄는 문턱을 켜는 문턱과 같게 두었을 때와 20%p 낮게 두었을 때, 경보가 바뀐 횟수는 얼마나 다를까? - 바꾸는 것: OFF 값(40, 20) - 재는 것: 2분 동안의 changes(회), 경보가 켜져 있던 시간(초) - 방법: 예비 실험으로 mq6_rise가 40% 근처에 머무는 면봉 거리를 찾아요. 그 거리에 면봉을 2분 두고 기록해요. 조건마다 3번 해요.

2. 덮개는 경보를 얼마나 늦출까 - 질문: 종이컵 덮개의 구멍 수에 따라 경보가 켜지기까지 걸리는 시간이 달라질까? - 바꾸는 것: 덮개(없음, 구멍 8개 종이컵, 구멍 2개 종이컵) - 재는 것: 면봉을 놓은 순간부터 alarm이 1이 될 때까지의 시간(초), 최고 mq6_rise(%) - 방법: 면봉 거리와 소독제 양을 고정하고 조건마다 3번 재요. 덮개를 씌운 뒤에는 기준을 새로 잡아요.

3. 기온과 습도가 기준을 얼마나 움직일까 - 질문: 기체가 없을 때 하루 동안 mq6_rise는 기온·습도와 함께 움직일까? - 바꾸는 것: 시간(등교부터 하교까지) - 재는 것: 1분마다 mq6_rise(%), 기온(°C), 습도(%RH) - 방법: 아침에 기준을 한 번 잡고 하루 동안 기록해요. 습도와 mq6_rise를 산점도로 그려 관계를 봐요.

안전

  • 부탄가스, LPG, 라이터 가스는 학생이 다루지 않아요. 실제 기체 반응을 보여 줄 필요가 있다면 교사가 불씨 없는 환기된 곳에서 아주 조금만 시연하고, 시연 뒤 충분히 환기해요.
  • 손 소독제도 불이 붙어요. 탐구에는 면봉 하나에 묻힐 만큼만 덜어 쓰고, 불씨 가까이에서는 쓰지 않아요.
  • 히터가 뜨거워요. 켠 채로 만지거나 종이컵을 센서에 직접 붙이지 마세요.
  • 우리가 만든 경보는 인증받은 가스누설경보기를 대신할 수 없어요. 가정이나 캠핑의 가스 안전은 인증 제품에 맡겨요.

더 알아보기

  • 데이터시트: Hanwei Electronics "MQ-6 Technical Data"(감지 기체, RL 20kΩ, 히터 33Ω, Rs 10~60kΩ, 예열 24시간, Ro 정의), 새 형식 판 "MQ-6 Semiconductor Sensor for LPG"(히터 31Ω, 예열 48시간)
  • 라이브러리: 따로 없어요. machine.ADC, machine.Pin("LED")
  • 기초 글: 센서 값의 신뢰도, 잴 수 있는 탐구 주제 고르기, 분압 회로
글쓴이

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