기초 · 난이도 보통
센서 값을 믿을 수 있게 만드는 예열 기준값 평균 보정
센서가 내는 숫자는 그대로 믿기 어려워요. 켠 직후의 흔들림, 날마다 달라지는 기준, 한 번씩 튀는 값, 센서마다 다른 기울기를 다루는 방법을 예열 확인, 기준값, 평균과 중앙값, 2점 보정, 기록 간격 순서로 정리했어요.
숫자가 나왔다고 측정이 된 것은 아니에요
센서를 연결하고 코드를 돌리면 숫자가 줄줄이 나와요. 그런데 그 숫자에는 여러 가지가 섞여 있어요. 센서가 아직 데워지는 중이라 생긴 변화, 전기 잡음, 온도와 습도의 영향, 센서마다 다른 감도 같은 것이에요. 탐구 결과를 믿으려면 "지금 바꾼 것 때문에 값이 변했다"고 말할 수 있어야 해요. 이 글은 그 말을 할 수 있게 해 주는 습관을 정리해요.
1. 예열이 끝났는지 데이터로 확인해요
히터가 있는 가스 센서(MQ 계열, MiCS-6814)나 적외선 CO₂ 센서(MH-Z19B)는 켠 뒤 한동안 값이 움직여요. 제조사가 정한 예열 시간이 있지만, 실험할 때마다 그만큼 기다렸는지 확인하기 어려워요. 그래서 "값이 멈췄는지"를 직접 봐요.
from machine import ADC, Pin
import time
s = ADC(Pin(26))
def avg(n=16):
t = 0
for i in range(n):
t += s.read_u16()
return t / n
prev = avg()
for k in range(30): # 최대 30번(10초 간격, 5분)
time.sleep(10)
now = avg()
drift = abs(now - prev) / prev * 100 if prev else 100
print(f"DATA: warm={k + 1}, value={now:.0f}, drift={drift:.2f}")
if drift < 1: # 10초 사이 변화가 1%보다 작으면 자리 잡음
print("자리 잡았어요")
break
prev = now
10초 사이 변화가 1%보다 작아지면 넘어가는 규칙이에요. 이 숫자는 정답이 아니라 출발점이에요. 내 센서에서 그래프를 보고 알맞게 바꾸고, 바꾼 규칙을 기록에 적어요.
2. 기준값을 그날그날 다시 재요
반도체식 가스 센서는 같은 공기에서도 날씨에 따라 값이 달라요. 그래서 실험을 시작할 때 "아무것도 안 했을 때"의 값을 기준으로 재고, 그 뒤 값을 기준과 비교해요. 기준을 잴 때는 여러 번 읽어 평균을 내요. 이 자료실의 가스 센서 글이 "기준보다 몇 % 올랐나"를 출력하는 이유예요.
기준을 잴 때 지켜야 할 것도 있어요. 사람이 센서 앞에서 숨을 쉬거나 손을 대지 않아요. 기준을 잰 시각, 장소, 온도·습도를 함께 적어요. 기준을 잰 뒤 센서 위치를 옮기면 기준을 다시 재요.
3. 평균과 중앙값
센서 값에는 잡음이 섞여요. 같은 순간에 여러 번 읽어 평균을 내면 잡음이 줄어요. 그런데 가끔 한 번씩 크게 튀는 값이 있으면 평균이 끌려가요. 이럴 때는 중앙값이 좋아요.
def median(vals):
v = sorted(vals)
n = len(v)
return v[n // 2] if n % 2 else (v[n // 2 - 1] + v[n // 2]) / 2
reads = [520, 518, 521, 900, 519] # 예를 들어 한 번 튄 값(900)이 섞인 경우
print(f"DATA: mean={sum(reads) / len(reads):.1f}, median={median(reads)}")
예시 숫자로 계산하면 평균은 595.6, 중앙값은 520이에요. 초음파 거리 센서처럼 가끔 엉뚱한 값을 내는 센서에는 다섯 번 읽어 중앙값을 쓰는 방법이 잘 맞아요. 반대로 값이 천천히 변하는 센서는 최근 몇 개를 평균 내는 이동 평균이 그래프를 부드럽게 만들어요. 어느 방법을 썼는지는 결과와 함께 적어요. 평균을 많이 낼수록 빠른 변화는 무뎌진다는 점도 기억해요.
4. 두 점으로 보정하기
센서마다 감도가 조금씩 달라서, 같은 물을 재도 pH 센서 두 개가 다른 숫자를 낼 수 있어요. 이럴 때 값을 이미 아는 기준 두 개로 센서를 맞춰요. 예를 들어 pH 센서는 pH 4.00과 6.86(또는 7.00) 완충 용액을 재서, 두 점을 잇는 직선으로 전압을 pH로 바꿔요.
# 두 기준에서 잰 전압(예를 들어 v1, v2)과 그 기준의 참값(x1, x2)
v1, x1 = 2.03, 4.00
v2, x2 = 1.52, 6.86
a = (x2 - x1) / (v2 - v1) # 기울기
b = x1 - a * v1 # 절편
v = 1.80 # 새로 잰 전압
print(f"DATA: ph={a * v + b:.2f}")
위 숫자는 계산을 보여 주려고 넣은 예시예요. 실제로는 내 센서로 잰 전압을 넣어요. 보정한 날짜와 기준 용액을 기록하고, 기준 범위 밖(예: pH 10)의 값은 덜 믿어요. 무게(로드셀)는 빈 상태(0g)와 아는 무게 하나로, 기압 고도는 그날의 해면 기압으로 같은 생각을 적용해요.
5. 온도와 습도를 함께 적어요
많은 센서가 온도의 영향을 받아요. EC(전기전도도)는 물 온도가 1℃ 바뀌면 값이 대략 2% 달라져서 보통 25℃ 기준으로 바꿔 적어요. 초음파 거리는 공기 온도에 따라 음속이 달라져요. 가스 센서는 습도에 따라 기준이 움직여요. 온습도 센서(DHT22, BME280)를 함께 달아 기록해 두면, 나중에 이상한 값의 원인을 찾을 수 있어요.
6. 기록 간격은 센서의 속도에 맞춰요
1초마다 기록해도 센서가 2분에 걸쳐 반응한다면 의미 없는 줄만 늘어요. 반대로 진동처럼 짧게 지나가는 신호를 10초마다 읽으면 놓쳐요. 센서 설명서의 응답 시간(예: MH-Z19B는 T90 120초 미만)을 보고 기록 간격을 정해요. 장소를 옮긴 직후 몇 분은 기록에서 빼는 것도 좋은 습관이에요.
튀는 값을 버리는 규칙은 미리 정해요
실험이 끝난 뒤 마음에 들지 않는 값을 골라 지우면, 결과가 내가 원하는 쪽으로 기울어요. 그래서 버리는 규칙은 측정하기 전에 정하고 기록장에 적어요. 예를 들어 "초음파 거리는 2cm보다 작거나 400cm보다 크면 버린다", "다섯 번 읽은 값 중 중앙값과 20% 넘게 차이 나는 값은 버린다"처럼 숫자로 정해요. 버린 값의 개수도 함께 적어요. 버린 값이 많다면 센서 위치나 배선부터 다시 봐요.
같은 센서 두 개, 다른 방법 하나
센서 하나만 쓰면 그 센서가 틀렸는지 알 길이 없어요. 가능하면 같은 센서 두 개를 나란히 두고 같은 시간에 기록해 봐요. 둘의 차이가 실험에서 기대하는 변화보다 크다면, 그 실험은 이 센서로 결론을 내기 어려워요. 거리, 무게, 높이처럼 자나 저울로 따로 잴 수 있는 값은 다른 방법으로 몇 번 재서 센서 값과 비교해요. 이 비교 자체가 좋은 탐구 주제가 되기도 해요(잴 수 있는 탐구 주제 만들기).
기록장에 남길 것
| 항목 | 예 |
|---|---|
| 날짜·시각·장소 | 10월 31일 3교시, 2층 과학실 창가 |
| 센서와 배선 | MQ-135, AO→10kΩ/20kΩ→GP26 |
| 예열 판단 | 10초 변화 1% 미만, 3분 걸림 |
| 기준값 | 32,410(64번 평균) |
| 평균·보정 방법 | 16번 평균, 기준 대비 % |
| 환경 | 22℃, 48%RH |
시나브로 PICO의 [받은 값] 그래프와 CSV 저장, 모둠 기록장을 쓰면 이 항목을 함께 남기기 쉬워요.
더 알아보기
- 기초 글: 잴 수 있는 탐구 주제 만들기, 5V 센서를 피코에 잇는 분압
- 이 방법을 쓰는 글: MQ-2, MH-Z19B, BME280