Chapter 7. 공간 인지 센서 제어 (초음파 센서, PIR 모션 센서)

주변 환경을 인식하는 두 가지 핵심 센서를 제어합니다. 거리를 재는 초음파 센서와 인간의 움직임을 잡아내는 인체 감지 센서입니다.

초음파 (HC-SR04) 물체 거리 = (시간 × 음속) / 2

7.1 HC-SR04 초음파 센서 거리 측정

Trig 핀으로 초음파를 쏘고 Echo 핀으로 되돌아오는 시간을 마이크로초(us) 단위로 정밀 측정하여 물체와의 거리를 cm 단위로 계산해 냅니다.

Pico 2 3V3 GP17 GP16 GND HC-SR04 T R Trig Echo VCC Trig Echo GND → 발사 트리거(OUT) ← 반사음 수신(IN)

HC-SR04: VCC→3V3, Trig→GP17(출력), Echo→GP16(입력), GND→GND. 안정적인 측정을 위해 VCC를 VSYS(5V) 핀에 연결하는 것을 권장합니다.

from machine import Pin
import time

# 핀 설정
trig = Pin(17, Pin.OUT)
echo = Pin(16, Pin.IN)

def get_distance():
    # 1. Trig 핀을 깨끗하게 비운 뒤 10us 동안 초음파 발사 신호를 줍니다.
    trig.value(0)
    time.sleep_us(2)
    trig.value(1)
    time.sleep_us(10)
    trig.value(0)
    
    # 2. Echo 핀이 High(1)로 올라가는 순간(시작 시간)을 기록합니다.
    while echo.value() == 0:
        signaloff = time.ticks_us()
        
    # 3. Echo 핀이 다시 Low(0)로 떨어지는 순간(도착 시간)을 기록합니다.
    while echo.value() == 1:
        signalon = time.ticks_us()
        
    # 4. 시간 차이를 계산하여 거리(cm)로 환산합니다. (음속 340m/s 반영)
    time_passed = signalon - signaloff
    distance = (time_passed * 0.0343) / 2
    return distance

while True:
    dist = get_distance()
    print(f"물체와의 거리: {dist:.1f} cm")
    time.sleep(0.5)

7.2 PIR 적외선 인체 감지 센서

사람이나 동물의 움직임으로 발생하는 적외선의 변화량을 측정하여 움직임 유무를 디지털 값(0 또는 1)으로 반환합니다.

Pico 2 3V3 GP18 GND PIR 센서 VCC OUT GND ← 감지 신호(IN)

PIR 센서: VCC→3V3, OUT→GP18(입력), GND→GND. 전원 인가 후 약 2초 안정화 시간이 필요하며, 3핀 모듈의 경우 왼쪽부터 VCC·GND·OUT 순서가 일반적입니다 (구매 제품의 핀 배열 확인 필수).

from machine import Pin
import time

# GPIO 18번에 PIR 센서의 Out 핀 연결
pir = Pin(18, Pin.IN)

print("침입 감지 시스템 가동중...")
time.sleep(2) # 센서 안정화를 위한 초기 대기

while True:
    if pir.value() == 1:
        print("🚨 경고: 구역 내 움직임이 감지되었습니다!")
        time.sleep(2) # 중복 경고 방지 대기
    else:
        print("안전 - 움직임 없음")
    time.sleep(0.5)