빛·소리·불꽃 · 난이도 쉬움
불꽃 센서를 불 없이 TV 리모컨으로 시험하고 햇빛·조명 오경보의 원인 찾기
불꽃 센서 모듈은 760~1100nm 근적외선에 민감한 소자로 불꽃을 알아채요. 3.3V 배선과 AO를 GP27로 읽는 코드, 짧은 시간의 최솟값으로 깜빡이는 빛을 잡는 법, 같은 파장대를 쓰는 TV 리모컨으로 거리·각도를 재는 탐구, 학생은 불을 쓰지 않는 안전 기준을 정리했어요.
이 센서로 무엇을 잴 수 있나
불꽃 센서 모듈은 앞쪽에 검은 적외선 수광 소자가 달리고, LM393 비교기와 가변저항이 붙은 작은 기판이에요. Waveshare의 같은 종류 모듈 자료에는 감지 파장 760~1100nm, 감지 각도 0~60°, 전원 3.3~5.3V, 사용 온도 −25~85℃가 적혀 있어요. 자주 묻는 질문에는 높이 5cm 불꽃을 1m에서 감지한다고 적혀 있어요.
이 센서가 실제로 재는 것은 불이 아니라 "근적외선이 얼마나 들어오나"예요. 불꽃은 이 빛을 많이 내지만, 햇빛, 백열등과 할로겐등, 리모컨의 적외선 LED도 같은 범위의 빛을 내요. 그래서 이 센서로는 근적외선을 내는 물체까지의 거리와 각도에 따라 반응이 어떻게 바뀌는지, 무엇이 잘못된 경보를 부르는지를 잴 수 있어요. 불꽃의 크기나 온도는 잴 수 없어요.
원리
수광 소자에 근적외선이 많이 들어올수록 소자를 지나는 전류가 늘고, 그에 따라 AO 전압이 바뀌어요. 시나브로 PICO의 센서 자료처럼 흔한 모듈은 빛이 셀수록 AO 값이 내려가요. Joy-IT의 KY-026 설명도 측정값이 클수록 AO 전압이 낮아지는 뒤집힌 신호라고 적어요. 다만 회로가 다른 제품도 있으니, 처음에 리모컨을 비춰 값이 어느 쪽으로 움직이는지 확인해요. LM393은 AO를 가변저항이 정한 기준과 비교해 DO와 표시 LED를 켜요.
불꽃은 계속 일렁이고, 리모컨은 적외선을 아주 빠르게 깜빡여 신호를 보내요. 그래서 어느 한순간에 읽은 값은 빛이 꺼진 틈일 수도 있어요. 아래 코드는 50ms 동안 여러 번 읽어 그 가운데 가장 낮은 값, 곧 빛이 가장 셌던 순간을 써요.
리모컨이 이 센서의 시험용 광원이 될 수 있는 이유는 파장이에요. 예를 들어 리모컨용 적외선 LED인 Vishay TSAL6200의 데이터시트는 가장 센 빛의 파장을 940nm로 적어요. 760~1100nm 안이에요. 모든 리모컨이 같은 LED를 쓰지는 않으니, 내 리모컨에 센서가 반응하는지는 탐구 1에서 직접 확인해요.
준비물
- 라즈베리파이 피코와 USB 케이블
- 불꽃 센서 모듈(VCC·GND·DO·AO 4핀), 암-수 점퍼선
- 적외선 리모컨(TV나 에어컨용), 줄자, 각도기를 출력한 종이
- 한쪽 면에 구멍을 낸 검은 종이 상자(주변 빛 가림용)
- 탐구용: LED 스탠드, 창가 자리
배선
브레드보드 따라 꽂기 순서 (8단계)
- 피코를 브레드보드 가운데 홈에 걸쳐 꽂아요. USB 단자가 왼쪽을 보게 하고, 1번 핀이 f2, 40번 핀이 e2에 들어가요. 다리가 홈 양쪽에 모두 들어갔는지 옆에서 봐요.
- 주황 선: 피코 36번 핀(3V3(OUT)) 옆 칸 a6 → 위쪽 + 줄(3.3V). 이제 이 줄 전체가 3.3V예요.
- 검은 선: 피코 38번 핀(GND) 옆 칸 a4 → 위쪽 − 줄(GND). 이제 이 줄 전체가 GND예요.
- 불꽃 감지 Flame Sensor 꽂기: 다리 VCC · GND · AO를 위쪽 a24 · a25 · a26에 차례로 꽂아요. 다리가 브레드보드에 바로 안 들어가면 암-수 점퍼선으로 같은 칸에 이어요.
- 주황 선(3.3V 전원): 불꽃 감지 VCC 줄 b24 → 위쪽 + 줄(3.3V)
- 검은 선(GND): 불꽃 감지 GND 줄 b25 → 위쪽 − 줄(GND)
- 초록 선(신호): 불꽃 감지 AO 줄 b26 → 피코 32번 핀(GP27) 옆 칸 a10
- 마지막 확인: ① 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)이 서로 이어지지 않았나요? ② 모든 부품의 GND가 − 줄에 이어졌나요? ③ 5V 신호 다리는 저항을 거쳐 피코에 이어졌나요? ④ 긴 브레드보드는 + − 줄이 가운데에서 끊긴 것도 있어요(빨간·파란 선이 끊겨 있으면 짧은 선으로 이어요). ⑤ 그림과 한 칸씩 비교한 뒤 USB를 꽂아요.
| 모듈 핀 | 피코 핀 | 비고 |
|---|---|---|
| VCC | 3V3 (36번) | 사양 3.3~5.3V 가운데 3.3V |
| GND | GND (38번) | 피코와 접지를 함께 써요 |
| AO | GP27 (32번) | 아날로그 출력 |
| DO | 연결 안 함 | 쓰려면 남는 GP 핀에 바로 이어요 |
모듈을 3.3V로 켜면 AO와 DO도 3.3V를 넘지 않아 피코에 바로 이을 수 있어요. 5V로 켜면 AO가 5V까지 올라갈 수 있어 분압이 필요하니, 이 글처럼 3V3에 이어요.
수광 소자는 다리가 길어 방향이 쉽게 바뀌어요. 실험 중에 소자가 기울면 각도 결과가 틀어지니, 모듈을 받침에 붙이고 소자가 정면을 보게 고정해요. 검은 상자 안에 모듈을 넣고 구멍으로 앞만 보게 하면 천장 조명의 영향이 줄어요.
코드
from machine import ADC, Pin
import time
ir = ADC(Pin(27)) # AO → GP27, 모듈은 3V3으로 켜요
def window_min(ms=50):
lo = ir.read_u16() # 적어도 한 번은 읽고 시작해요
t0 = time.ticks_ms()
while time.ticks_diff(time.ticks_ms(), t0) < ms:
v = ir.read_u16()
if v < lo:
lo = v # 빛이 셀수록 값이 작아지는 모듈 기준
return lo
# 주변 빛 기준: 리모컨을 누르지 않은 채 2초 평균
s = 0
for i in range(20):
s += ir.read_u16()
time.sleep_ms(100)
base = s / 20
print(f"기준(주변 빛): {base:.0f}")
while True:
lo = window_min()
drop = (base - lo) / base * 100 if base > 0 else 0
print(f"DATA: ir_min={lo}, drop={drop:.1f}")
time.sleep(0.2)
- 시작할 때 아무것도 비추지 않은 상태의 평균을 기준
base로 잡아요. window_min()은 50ms 동안 쉬지 않고 읽어 가장 낮은 값을 돌려줘요. 깜빡이는 빛의 가장 센 순간을 놓치지 않기 위해서예요.drop은 기준보다 몇 % 내려갔는지예요. 클수록 근적외선이 세게 들어온 거예요. 값이 반대로 움직이는 모듈이라면drop이 음수로 나오니, 식의 부호를 바꿔 써요.
값 해석과 보정
drop은 같은 모듈, 같은 기준에서만 비교해요. 조명을 켜고 끄거나 커튼을 걷으면 기준이 바뀌니, 조건을 바꿀 때마다 코드를 다시 시작해 기준을 새로 잡아요.
거리가 두 배가 되면 작은 광원에서 오는 빛의 세기는 약 4분의 1로 줄어요. 그렇다고 drop도 4분의 1이 되지는 않아요. 소자와 회로가 빛의 세기를 전압으로 바꾸는 관계가 직선이 아니기 때문이에요. 그래서 이 센서로는 "몇 cm에서 몇 %"라는 내 모듈의 표를 만들어 쓰고, 빛의 세기를 계산하는 데 쓰지는 않아요.
Joy-IT의 KY-026 설명에 따르면 가변저항은 DO가 바뀌는 문턱을 정해요. 그래도 회로가 다른 모듈이 있을 수 있으니, 실험 도중에는 가변저항을 건드리지 않고 처음 위치를 사진으로 남겨요.
자주 하는 실수
- "불꽃만 감지한다"고 믿기. 햇빛, 할로겐등, 리모컨에도 반응할 수 있어요. 오경보를 미리 시험해요(탐구 3).
- 5V로 켜고 AO를 바로 잇기. AO가 3.3V를 넘을 수 있어요. 3V3으로 켜요.
- 기준을 한 번만 재기. 조명이 바뀌면 같은 리모컨도 다른
drop이 나와요. - 한 번 읽은 값으로 반응을 판단하기. 깜빡이는 빛은 짧은 시간의 최솟값으로 봐요.
- 수광 소자의 다리를 구부려 둔 채 각도를 재기. 소자가 보는 방향이 바뀌어 각도 결과가 틀어져요.
이 센서로 잴 수 있는 탐구
1. 리모컨이 멀어지면 반응은 얼마나 줄어들까
- 질문: 리모컨과 센서 사이 거리에 따라 drop이 어떻게 줄어들까?
- 바꾸는 것: 거리 10cm, 20cm, 40cm, 80cm, 160cm(리모컨은 센서 정면)
- 재는 것: 버튼을 5초 누르는 동안 drop의 최댓값(%)
- 방법: 리모컨을 책 위에 올려 높이를 맞추고, 같은 버튼을 눌러요. 거리마다 3번 하고, 반응이 사라지는 거리를 기록해요.
2. 몇 도까지 비스듬해도 알아챌까
- 질문: 센서 정면에서 벗어난 각도가 커지면 drop이 어떻게 줄어들까?
- 바꾸는 것: 각도 0°, 15°, 30°, 45°, 60°, 75°(거리 30cm 고정)
- 재는 것: drop의 최댓값(%), 0°일 때의 절반이 되는 각도
- 방법: 센서를 중심에 둔 종이 각도기 위에서 리모컨을 옮겨요. 각도마다 3번 재서 Waveshare 자료의 감지 각도 0~60°와 비교해요.
3. 무엇이 잘못된 경보를 부를까
- 질문: 리모컨 말고 교실의 어떤 빛이 센서를 반응하게 할까?
- 바꾸는 것: 센서 앞의 빛(LED 스탠드 30cm, 창가 밝은 하늘 쪽, 스마트폰 손전등 30cm, 손바닥 5cm)
- 재는 것: 각 조건의 drop(%)
- 방법: 검은 상자 안에서 기준을 잡은 뒤 구멍 앞에 광원만 바꿔 대요. 조건마다 3번 재고, DO 경보가 켜진 조건을 함께 적어요. 결과를 보고 불꽃 경보를 만든다면 센서를 어디에 두면 안 되는지 정리해요.
안전
- 학생은 불을 쓰지 않아요. 라이터, 성냥, 양초로 센서를 시험하지 않고, 이 글의 탐구는 모두 리모컨과 조명으로 해요.
- 실제 불꽃 반응을 보여 줄 때는 선생님이 시연해요. 환기되는 곳에서 소화기를 곁에 두고, 탈 것을 치운 뒤 센서를 불꽃에서 충분히 떨어뜨려요. Waveshare 자료도 센서 자체는 불에 견디도록 만들지 않았으니 불에서 떨어뜨리라고 적어요.
- 햇빛 실험에서 해를 직접 쳐다보지 않아요.
- 이 장치는 인증받은 화재 감지기가 아니에요. 화재 경보에 쓰지 마세요.
더 알아보기
- 모듈 자료: Waveshare "Flame Sensor" 위키(감지 파장 760~1100nm, 감지 각도 0~60°, 3.3~5.3V, 불꽃 높이 5cm에서 감지 거리 1m, 불에서 떨어뜨리라는 주의), Joy-IT "KY-026 Flame sensor module"(구성, 뒤집힌 AO 신호, 가변저항은 DO 문턱)
- 광원 자료: Vishay "TSAL6200" 데이터시트(리모컨용 적외선 LED, 최대 세기 파장 940nm)
- 라이브러리: 따로 없어요. MicroPython 내장
machine.ADC - 기초 글: 센서 값의 신뢰도, 잴 수 있는 탐구 주제 만들기, 피코 핀 지도, 브레드보드 처음 쓰기