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

움직임·거리·위치 · 난이도 쉬움

HC-SR501 PIR 움직임 센서의 1분 초기화, 감도·지연 가변저항, H·L 점퍼를 기록으로 확인하기

HC-SR501은 사람 몸이 내는 적외선의 변화로 움직임을 알아채는 센서예요. 5V로 켜고 3.3V 출력을 피코에 바로 잇는 배선, 켠 뒤 1분 초기화, 감도·지연 가변저항과 H·L 점퍼의 차이, 감지 횟수와 HIGH 지속 시간을 기록하는 코드와 탐구를 정리했어요.

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

이 센서로 무엇을 잴 수 있나

PIR(수동 적외선) 센서는 스스로 빛을 쏘지 않고, 사람이나 동물의 몸이 내는 적외선이 바뀌는 것을 받아서 움직임을 알아채요. HC-SR501은 이 센서에 둥근 렌즈와 처리 회로를 붙인 모듈이에요. 제품 사양서(2011년 판)에는 전원 4.5~20V, 대기 전류 50µA 미만, 출력 HIGH 3.3V·LOW 0V, 감지 각도 100° 미만의 원뿔, 사용 온도 −15~+70℃가 적혀 있어요.

이 센서가 알려 주는 것은 "지금 움직임이 있나"와 "언제부터 언제까지"뿐이에요. 거리, 온도, 사람 수는 직접 재지 못해요. 그래도 감지가 끊기는 거리, 움직이는 방향에 따른 차이, 출력이 HIGH로 머무는 시간처럼 숫자로 잴 거리는 많아요.

원리

센서 안에는 감지 소자 두 개가 나란히 들어 있어요. 따뜻한 몸이 한쪽 소자의 시야에서 다른 쪽으로 넘어가면 두 소자가 받는 양에 차이가 생기고, 이 차이를 회로가 키워서 출력을 HIGH로 올려요. 사양서는 몸이 두 소자가 늘어선 방향과 나란하게 지나갈 때 가장 민감하고, 정면으로 다가오거나 위아래로 움직일 때는 차이가 거의 생기지 않아 둔하다고 설명해요. 렌즈는 시야를 여러 조각으로 나눠 이런 차이가 더 자주 생기게 해요.

조절할 것은 세 가지예요.

  • 감도 가변저항: 시계 방향으로 돌리면 감지 거리가 늘어 약 7m, 반대로 돌리면 약 3m가 돼요.
  • 지연 가변저항: 출력이 HIGH로 머무는 시간이에요. 조절 설명에는 약 5초(반시계)부터 약 300초(시계)까지, 사양 표에는 5~200초로 적혀 있어요.
  • H·L 점퍼: H(반복 트리거, 기본)는 HIGH인 동안 움직임이 이어지면 마지막 움직임부터 지연 시간을 다시 세요. L은 지연 시간이 지나면 움직임과 상관없이 LOW로 내려가요.

출력이 LOW로 내려간 뒤 2.5초(기본) 동안은 어떤 신호도 받지 않는 차단 시간이 있어요. 그리고 전원을 켠 뒤 약 1분은 초기화 시간이라 그사이 출력이 0~3번 HIGH가 될 수 있다고 사양서에 적혀 있어요.

준비물

  • 라즈베리파이 피코와 USB 케이블
  • HC-SR501 모듈, 암-수 점퍼선 3개
  • 작은 십자 드라이버(가변저항용)
  • 줄자, 바닥에 거리 표시를 붙일 종이테이프
  • 탐구용: 투명 비닐, 유리판 또는 투명 아크릴판, A4 종이

배선

HC-SR501 PIR 움직임 센서의 1분 초기화, 감도·지연 가변저항, H·L 점퍼를 기록으로 확인하기: 브레드보드에 피코와 센서를 꽂은 배선 그림
시나브로 PICO 브레드보드 작업대와 같은 계산으로 그린 배선이에요. 위 + 줄은 3.3V, 아래 + 줄은 5V예요.
브레드보드 따라 꽂기 순서 (8단계)
  1. 피코를 브레드보드 가운데 홈에 걸쳐 꽂아요. USB 단자가 왼쪽을 보게 하고, 1번 핀이 f2, 40번 핀이 e2에 들어가요. 다리가 홈 양쪽에 모두 들어갔는지 옆에서 봐요.
  2. 빨간 선: 피코 40번 핀(VBUS) 옆 칸 a2 → 아래쪽 + 줄(5V). 이제 이 줄 전체가 5V예요. 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)은 절대 서로 잇지 않아요.
  3. 검은 선: 피코 3번 핀(GND) 옆 칸 j4 → 아래쪽 − 줄(GND). 이제 이 줄 전체가 GND예요.
  4. 움직임 감지 PIR Sensor 꽂기: 다리 VCC · OUT · GND를 아래쪽 j24 · j25 · j26에 차례로 꽂아요. 다리가 브레드보드에 바로 안 들어가면 암-수 점퍼선으로 같은 칸에 이어요.
  5. 빨간 선(5V 전원): 움직임 감지 VCC 줄 i24 → 아래쪽 + 줄(5V)
  6. 초록 선(신호): 움직임 감지 OUT 줄 i25 → 피코 34번 핀(GP28) 옆 칸 a8
  7. 검은 선(GND): 움직임 감지 GND 줄 i26 → 아래쪽 − 줄(GND)
  8. 마지막 확인: ① 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)이 서로 이어지지 않았나요? ② 모든 부품의 GND가 − 줄에 이어졌나요? ③ 5V 신호 다리는 저항을 거쳐 피코에 이어졌나요? ④ 긴 브레드보드는 + − 줄이 가운데에서 끊긴 것도 있어요(빨간·파란 선이 끊겨 있으면 짧은 선으로 이어요). ⑤ 그림과 한 칸씩 비교한 뒤 USB를 꽂아요.
모듈 핀 피코 핀 비고
VCC VBUS (40번) 5V. 사양서의 전원 범위는 4.5~20V
OUT GP28 (34번) HIGH 3.3V·LOW 0V라 분압 없이 연결
GND GND (38번) 피코와 접지를 함께 써요

전원은 반드시 VBUS의 5V로 줘요. 3V3(3.3V)은 사양서의 최소 전압 4.5V보다 낮아서 감지가 불안정할 수 있어요. 반대로 출력은 3.3V로 나오니 피코 핀에 바로 이어도 돼요. 핀 순서는 제품마다 다를 수 있으니 기판에 적힌 이름을 보고 꽂아요. GP28은 아날로그 입력도 되는 핀이지만 여기서는 0과 1만 읽어요.

출력이 HIGH와 LOW를 직접 내보내므로 코드에서 내부 풀업·풀다운을 켜지 않아요.

코드

from machine import Pin
import time

pir = Pin(28, Pin.IN)          # OUT(3.3V) → GP28, 풀업·풀다운 없이
WARM_MS = 60000                # 사양서: 켠 뒤 약 1분 초기화
t0 = time.ticks_ms()
prev = 0
events = 0
rise_at = 0
last_high = 0.0

while True:
    now = time.ticks_ms()
    s = pir.value()
    warm = 1 if time.ticks_diff(now, t0) < WARM_MS else 0
    if s == 1 and prev == 0:           # LOW → HIGH: 감지 시작
        rise_at = now
        if not warm:
            events += 1
    if s == 0 and prev == 1:           # HIGH → LOW: 머문 시간 계산
        last_high = time.ticks_diff(now, rise_at) / 1000
    prev = s
    print(f"DATA: pir={s}, events={events}, high_s={last_high:.1f}, warm={warm}")
    time.sleep(0.5)
  • 0.5초마다 출력 상태를 읽고 DATA 한 줄을 남겨요. 켠 뒤 1분 동안은 warm=1을 붙여, 나중에 표에서 그 줄을 쉽게 빼게 했어요.
  • events는 초기화가 끝난 뒤 LOW에서 HIGH로 바뀐 횟수예요. 사람 수가 아니라 "출력이 새로 올라간 횟수"예요.
  • high_s는 바로 앞에 HIGH였던 시간(초)이에요. 0.5초 간격으로 읽으니 0.5초 안쪽의 차이는 구별하지 못해요.

값 해석과 보정

L 점퍼에서 손을 한 번만 흔들면 high_s가 지연 가변저항이 정한 시간과 거의 같아져요. 그래서 가변저항 위치를 초 단위로 바꾸는 표를 만들 수 있어요(탐구 2). H 점퍼에서는 움직임이 이어진 시간이 더해져 high_s가 길어져요. "사람이 머문 시간"을 대략 보고 싶을 때는 H, 지연 시간 자체를 재고 싶을 때는 L을 써요.

events를 드나든 사람 수로 읽으면 안 되는 이유도 있어요. H 점퍼에서는 여러 명이 이어서 지나가도 한 번의 HIGH로 합쳐져요. 또 HIGH가 끝난 뒤 2.5초의 차단 시간 동안 지나간 사람은 아예 세지 못해요.

감지 거리는 몸과 배경의 온도 차이에 좌우돼요. 사양서는 여름에 주변 온도가 30~32℃로 오르면 감지 거리가 조금 짧아진다고 적어요. 거리 탐구를 할 때는 그날의 교실 온도를 함께 적어요. 사양서는 렌즈 가까이의 직사 조명과 바람도 잘못된 감지를 부른다고 경고해요. 난방기 바람이나 창가 햇빛이 닿는 자리는 피해요.

자주 하는 실수

  1. VCC를 3V3에 잇기. 최소 전압보다 낮아 감지가 들쭉날쭉해요. 5V(VBUS)에 이어요.
  2. 켜자마자 시험하기. 초기화 1분 동안의 HIGH를 진짜 감지로 착각해요. warm=1인 줄은 빼고 봐요.
  3. 센서 정면으로 걸어오며 감도를 시험하기. 가장 둔한 방향이라 "감도가 나쁘다"는 잘못된 결론이 나와요.
  4. 지연 가변저항을 끝까지 돌려 두기. 몇 분 동안 HIGH가 이어져 고장처럼 보여요. 처음에는 반시계 끝(가장 짧게)에서 시작해요.
  5. 출력이 1에서 내려오지 않는다고 코드부터 의심하기. OUT 선이 빠졌을 수 있어요. 피코 2의 RP2350 정오표(E9)에는 아무것도 이어지지 않은 입력 핀이 약 2.2V에 머물 수 있고 내부 풀다운으로는 끌어내리지 못한다고 적혀 있어요. 배선부터 확인해요.

이 센서로 잴 수 있는 탐구

1. 걷는 방향에 따라 감지 거리가 달라질까 - 질문: 센서 앞을 가로질러 걸을 때와 센서를 향해 걸어올 때, 처음 감지되는 거리가 다를까? - 바꾸는 것: 걷는 방향(가로지르기, 다가오기). 감도 가변저항 위치는 고정 - 재는 것: pir가 1이 된 순간 사람과 센서 사이 거리(m) - 방법: 바닥에 50cm 간격으로 테이프를 붙이고, 멀리서부터 한 칸씩 같은 속도로 걸어요. 감지된 칸을 기록하고 방향마다 5번 반복해요. 교실 온도도 적어요.

2. 지연 가변저항은 몇 초를 만들까 - 질문: 가변저항을 돌린 정도와 HIGH 지속 시간은 어떤 관계일까? - 바꾸는 것: 지연 가변저항 위치 다섯 곳(L 점퍼, 손잡이에 표시를 그려 위치를 맞춤) - 재는 것: high_s(초) - 방법: 센서 앞에서 손을 한 번만 흔들고 물러나요. 위치마다 3번 재서 평균을 내고, 사양서의 약 5초~300초와 비교해요.

3. 투명한 판 너머에서도 감지될까 - 질문: 유리판, 투명 비닐, 종이로 렌즈 앞을 막으면 감지가 어떻게 달라질까? - 바꾸는 것: 렌즈 앞 가림막(없음, 유리판, 비닐, 종이) - 재는 것: 2m 거리에서 가로질러 걸었을 때 감지된 비율(%) - 방법: 가림막은 렌즈에서 5cm 떨어뜨려 세워요. 가림막마다 10번 걸어서 events가 늘어난 횟수를 세요. 결과를 미리 짐작해 적어 두고 비교해요.

안전

  • 사람의 움직임을 기록하는 장치예요. 교실에 둘 때는 무엇을 왜 기록하는지 미리 알리고, 화장실이나 탈의실처럼 사생활 공간에는 두지 않아요.
  • VBUS(5V) 선이 GP 핀에 닿지 않게 하고, 배선은 USB를 뽑은 채로 바꿔요.
  • 천장이나 높은 곳에 달 때는 학생이 의자나 사다리에 올라가지 않고 선생님이 설치해요.
  • 이 장치는 방범·화재 경보기가 아니에요. 안전을 지키는 데 쓰지 마세요.

더 알아보기

글쓴이

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