가스·공기 · 난이도 보통
MQ-6 LPG 센서로 켜는 문턱과 끄는 문턱이 다른 가스 경보 만들기
MQ-6은 LPG·아이소뷰테인·프로판에 민감한 반도체식 센서예요. 공기보다 무거운 LPG의 성질, 5V 출력 분압, 이동 평균과 두 문턱으로 깜빡이지 않는 경보를 만드는 피코 코드, 경보가 바뀐 횟수를 세어 설계를 비교하는 탐구를 정리했어요.
이 센서로 무엇을 잴 수 있나
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 같은 온습도 센서
배선
브레드보드 따라 꽂기 순서 (10단계)
- 피코를 브레드보드 가운데 홈에 걸쳐 꽂아요. USB 단자가 왼쪽을 보게 하고, 1번 핀이 f2, 40번 핀이 e2에 들어가요. 다리가 홈 양쪽에 모두 들어갔는지 옆에서 봐요.
- 빨간 선: 피코 40번 핀(VBUS) 옆 칸 a2 → 아래쪽 + 줄(5V). 이제 이 줄 전체가 5V예요. 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)은 절대 서로 잇지 않아요.
- 검은 선: 피코 3번 핀(GND) 옆 칸 j4 → 아래쪽 − 줄(GND). 이제 이 줄 전체가 GND예요.
- LPG·부탄 MQ-6 꽂기: 다리 VCC · GND · AO를 아래쪽 j24 · j25 · j26에 차례로 꽂아요. 다리가 브레드보드에 바로 안 들어가면 암-수 점퍼선으로 같은 칸에 이어요.
- 빨간 선(5V 전원): LPG·부탄 VCC 줄 i24 → 아래쪽 + 줄(5V)
- 검은 선(GND): LPG·부탄 GND 줄 i25 → 아래쪽 − 줄(GND)
- 저항 10kΩ(색띠 갈색·검정·주황): g26 ↔ g28 (AO 다리 칸 → 나눔 칸 28열)
- 저항 20kΩ(색띠 빨강·검정·주황): i28 ↔ 아래쪽 − 줄(GND)
- 초록 선: 나눔 칸 h28 → 피코 31번 핀(GP26) 옆 칸 a11. 5V 신호가 3.3V 아래로 줄어 피코가 안전해요.
- 마지막 확인: ① 위쪽 + 줄(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으로 이 흐름을 먼저 확인하세요.
자주 하는 실수
- 문턱 하나로 경보를 만들기. 값이 문턱 근처에서 흔들리면 경보가 계속 깜빡여요. 사람은 금방 경보를 무시하게 돼요.
- LPG 센서를 천장 가까이 달기. LPG는 공기보다 무거워 아래에 고여요. 높이 단 센서는 늦게 반응해요.
- 보기 좋게 꽉 막힌 상자에 넣기. 기체가 상자 안으로 퍼져 들어가는 시간만큼 경보가 늦어져요. 상자를 쓰면 구멍을 충분히 내요.
- 한 번의 실험으로 문턱을 정하기. 기준의 흔들림은 날씨와 시간에 따라 달라요. 며칠 기록을 보고 정해요.
이 센서로 잴 수 있는 탐구
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") - 기초 글: 센서 값의 신뢰도, 잴 수 있는 탐구 주제 고르기, 분압 회로