가스·공기 · 난이도 보통
MQ-8 수소 센서의 예열이 끝났는지 데이터로 판단하기
MQ-8은 수소에 민감한 반도체식 가스 센서이고, 데이터시트는 48시간 넘는 예열을 요구해요. 30초 평균과 변화율로 기준이 자리 잡았는지 판단하는 피코 코드, 깨끗한 공기 기준 R0의 의미, 교사 시연으로만 하는 물 전기분해의 안전 수칙을 담았어요.
이 센서로 무엇을 잴 수 있나
MQ-8은 수소(H₂)에 감도가 높도록 만든 산화주석 센서예요. 윈센(Winsen) 설명서 1.3판은 감지 범위를 수소 100~1000ppm으로 적고, 다른 기체의 방해에 강하다고 소개해요. 한웨이의 예전 판도 알코올, 요리 연기, LPG, CO의 방해를 피하도록 만들었다고 밝혀요.
수소는 학생이 만들어 쓰기에 위험한 기체라서, 이 글은 먼저 센서 자체를 재요. 데이터시트는 예열을 48시간 넘게 하라고 적어 두었어요. 그런데 "다 데워졌다"는 것을 무엇으로 알 수 있을까요? 이 글의 코드는 30초마다 평균을 내고, 앞의 평균과 얼마나 달라졌는지를 계산해서 기준이 멈췄는지를 데이터로 판단해요. 그 밖에 예열 시간에 따라 알코올 반응이 달라지는지, 교사가 시연하는 물 전기분해에서 나온 수소에 얼마나 반응하는지도 잴 수 있어요.
원리
데운 산화주석 막은 깨끗한 공기에서 전기가 잘 통하지 않다가 수소가 닿으면 전도도가 커져요. 모듈의 AO에는 막과 직렬로 연결된 부하 저항(RL)의 전압이 나와서, 수소가 많을수록 AO가 올라가요.
설명서의 주요 숫자는 이래요. 히터는 5.0V(±0.1V), 히터 저항은 29Ω(±3Ω)이라 5V에서 약 0.17A가 흘러요. 다른 MQ 센서(31~33Ω)보다 조금 많아요. 감도는 "깨끗한 공기 속 Rs ÷ 1000ppm 수소 속 Rs"가 5 이상이고, 1000ppm 수소에서 RL 전압 Vs가 2.5~4.0V예요. 표준 시험 조건은 20℃, 55%RH예요.
눈여겨볼 점은 R0의 정의예요. 이 설명서의 감도 곡선은 R0를 "깨끗한 공기 속 센서 저항"으로 정했어요. MQ-2처럼 1000ppm 수소 속 저항을 기준으로 삼는 데이터시트와 달라요. 그래서 우리가 교실에서 잡는 깨끗한 공기 기준이 곡선의 기준과 뜻이 같아요. 다만 시험 조건(20℃, 55%RH)과 우리 교실 조건이 다르니 곡선 숫자를 그대로 쓰지는 않아요.
예열이 필요한 까닭도 설명서에 있어요. 전원 없이 오래 보관한 센서는 저항이 되돌릴 수 있는 방향으로 떠돌고(드리프트), 다시 쓰기 전에 오래 켜 두어야 안정된다고 적혀 있어요.
준비물
- 라즈베리파이 피코와 USB 케이블
- MQ-8 모듈(VCC·GND·DO·AO)
- 10kΩ, 20kΩ 저항 1개씩, 브레드보드, 점퍼선
- 손 소독제, 면봉(탐구 2)
- 교사 시연용(탐구 3): 9V 건전지, 집게 전선, 연필심 전극 2개, 탄산수소나트륨(베이킹소다), 투명 컵
배선
브레드보드 따라 꽂기 순서 (10단계)
- 피코를 브레드보드 가운데 홈에 걸쳐 꽂아요. USB 단자가 왼쪽을 보게 하고, 1번 핀이 f2, 40번 핀이 e2에 들어가요. 다리가 홈 양쪽에 모두 들어갔는지 옆에서 봐요.
- 빨간 선: 피코 40번 핀(VBUS) 옆 칸 a2 → 아래쪽 + 줄(5V). 이제 이 줄 전체가 5V예요. 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)은 절대 서로 잇지 않아요.
- 검은 선: 피코 3번 핀(GND) 옆 칸 j4 → 아래쪽 − 줄(GND). 이제 이 줄 전체가 GND예요.
- 수소 H₂ MQ-8 꽂기: 다리 VCC · GND · AO를 아래쪽 j24 · j25 · j26에 차례로 꽂아요. 다리가 브레드보드에 바로 안 들어가면 암-수 점퍼선으로 같은 칸에 이어요.
- 빨간 선(5V 전원): 수소 H₂ VCC 줄 i24 → 아래쪽 + 줄(5V)
- 검은 선(GND): 수소 H₂ 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, 약 0.17A |
| GND | GND (38번) | 공통 접지 |
| AO | GP26 (31번) | 10kΩ·20kΩ 분압 뒤 연결 |
| DO | 연결 안 함 |
설명서의 시험 회로에서는 1000ppm 수소일 때 출력이 2.5~4.0V예요. 모듈의 부하 저항에 따라 달라지지만, 피코 ADC의 3.3V를 넘을 수 있다는 뜻이라 그대로 꽂으면 안 돼요. AO 쪽 10kΩ, GND 쪽 20kΩ으로 2/3를 만들면 4.0V는 약 2.67V, 5V는 약 3.33V가 되어 피코가 안전하게 읽어요.
코드
from machine import ADC, Pin
import time
mq8 = ADC(Pin(26)) # AO → 10kΩ/20kΩ 분압 → GP26
start = time.ticks_ms()
def volt():
s = 0
for i in range(32):
s += mq8.read_u16()
return s / 32 * 3.3 / 65535 * 1.5
print("30초마다 평균을 내요. 켠 순간부터 시간을 세요")
last = volt()
calm = 0 # '거의 안 변함'이 몇 번 이어졌나
while True:
total = 0
for i in range(30):
total += volt()
time.sleep(1)
v = total / 30
change = (v - last) / last * 100 if last > 0 else 0
calm = calm + 1 if abs(change) < 0.3 else 0
minutes = time.ticks_diff(time.ticks_ms(), start) / 60000
print(f"DATA: mq8_v={v:.4f}, change={change:.2f}, minutes={minutes:.1f}, calm={calm}")
if calm == 20:
print("10분 동안 30초 변화가 0.3%보다 작았어요. 지금 값을 기준으로 써도 돼요")
last = v
- 30초 동안 1초마다 32번씩 읽어 평균을 내요. 한 번 읽은 값보다 덜 흔들려요.
change는 앞선 30초 평균보다 몇 % 달라졌는지예요.calm은 변화가 0.3%보다 작았던 구간이 몇 번 이어졌는지 세요. 20번(10분) 이어지면 "기준으로 써도 된다"고 알려요. 0.3%와 10분은 이 글이 정한 기준이에요. 더 엄격하게 하고 싶으면 숫자를 줄이세요.minutes는 코드를 시작한 뒤 흐른 시간이에요. 피코를 켜자마자 코드를 돌려야 "켠 뒤 몇 분"과 같아져요.- 빠른 반응을 보는 탐구 2·3에서는
range(30)을range(2)로 바꿔 2초 평균으로 기록해요. 이때calm판정은 쓰지 않아요.
값 해석과 보정
기록을 minutes에 따라 그래프로 그리면 처음에는 크게 움직이다가 점점 평평해지는 모양을 기대할 수 있어요. 평평해진 시점이 그날의 "준비된 시각"이에요. 새 센서는 설명서대로 48시간 넘게 예열한 뒤에 기준을 잡고, 그 뒤로는 날마다 이 코드로 "오늘 준비됐나"를 확인하면 돼요.
기준 전압으로 Rs/R0를 구하려면 Rs ÷ R0 = ((Vc − V) ÷ V) ÷ ((Vc − V0) ÷ V0)를 쓰면 돼요. V0는 안정된 깨끗한 공기의 전압, Vc는 VBUS 전압이에요. 부하 저항 값은 약분되어 몰라도 돼요. 1000ppm 수소에서 이 비율이 0.2 이하로 내려가는 것이 설명서가 정한 최소 감도지만, 우리는 1000ppm을 만들 수 없으니 확인할 수 없어요.
설명서에는 온도·습도에 따라 1000ppm 수소 속 저항이 달라지는 그래프도 있어요. 기준은 날마다 새로 잡아요.
자주 하는 실수
- 켜고 몇 분 만에 실험을 시작하기. 기준이 계속 움직이는 동안 잰 반응은 크기를 믿을 수 없어요.
calm메시지를 기다려요. - 소금물로 전기분해하기. 소금(염화나트륨)을 넣으면 양극에서 유독한 염소가 나와요. 시연은 탄산수소나트륨 수용액으로만 해요.
- 수소에만 반응한다고 믿기. 설명서 감도 곡선에는 알코올, CO, 메테인 곡선도 있어요. 값이 올랐다고 수소라고 단정하지 마세요.
- 다른 MQ 센서의 R0 정의를 섞어 쓰기. 기준 저항의 정의가 데이터시트마다 달라요. 어떤 정의로 계산했는지 기록에 적어요.
이 센서로 잴 수 있는 탐구
1. 꺼 두었던 시간이 길수록 안정되기까지 오래 걸릴까
- 질문: 직전에 꺼져 있던 시간에 따라 calm이 20에 이르는 시간이 달라질까?
- 바꾸는 것: 직전에 꺼 둔 시간(1시간, 1일, 1주)
- 재는 것: calm이 20이 될 때의 minutes(분), 그때의 전압(V)
- 방법: 같은 책상, 같은 시간대에 코드를 그대로 돌려 기록해요. 조건마다 2번씩 해요.
2. 예열 정도에 따라 알코올 반응이 달라질까 - 질문: 켠 지 10분, 1시간, 3시간일 때 같은 소독제에 대한 반응 크기가 같을까? - 바꾸는 것: 켠 뒤 지난 시간(10분, 1시간, 3시간) - 재는 것: 면봉을 대기 직전 값보다 오른 최고 비율(%) - 방법: 소독제 1방울을 묻힌 면봉을 4cm 앞에 30초 두었다가 치워요. 시점마다 3번 재고, 시도 사이에는 값이 돌아올 때까지 기다려요.
3. (교사 시연) 전기분해를 오래 할수록 반응이 커질까 - 질문: 전기분해한 시간에 따라 컵 위에서 잰 반응이 커질까? - 바꾸는 것: 전기분해 시간(30초, 60초, 120초) - 재는 것: 최고 상승률(%), 원래 값으로 돌아오기까지 걸린 시간(초) - 방법: 교사가 탄산수소나트륨 수용액에 연필심 전극 두 개를 넣고 9V 건전지로 전기분해해요. 정한 시간이 지나면 건전지를 떼고, 센서를 컵 위 10cm에 20초 둬요. 학생은 기록된 데이터를 분석해요.
안전
- 수소는 불이 아주 잘 붙는 기체예요. 학생이 수소를 만들지 않아요. 전기분해는 교사 시연으로만, 작은 건전지로, 불씨와 정전기가 없는 환기된 곳에서 해요. 모은 기체에 불을 붙이는 시연은 하지 않아요.
- 전기분해에는 소금을 쓰지 않아요. 염소가 생겨요.
- 히터가 뜨거워요. 켠 채로 만지지 마세요. 오래 예열할 때 사람이 없는 시간에도 켜 둘지는 학교 규칙과 선생님 판단에 따라요.
- 이 장치는 인증받은 수소 검지기나 가스 경보기가 아니에요.
더 알아보기
- 데이터시트: Zhengzhou Winsen "Flammable Gas Sensor (Model: MQ-8) Manual" 1.3판(감지 범위, 히터 29Ω, Vs 2.5~4.0V, 예열 48시간, R0 정의, 보관 시 드리프트), Hanwei Electronics "MQ-8 Technical Data"
- 라이브러리: 따로 없어요.
machine.ADC,time.ticks_ms() - 기초 글: 센서 값의 신뢰도, 분압 회로, 전원 계산, 잴 수 있는 탐구 주제 고르기