Chapter 7. 공간 인지 센서 제어 (초음파 센서, PIR 모션 센서)
주변 환경을 인식하는 두 가지 핵심 센서를 제어합니다. 거리를 재는 초음파 센서와 인간의 움직임을 잡아내는 인체 감지 센서입니다.
7.1 HC-SR04 초음파 센서 거리 측정
Trig 핀으로 초음파를 쏘고 Echo 핀으로 되돌아오는 시간을 마이크로초(us) 단위로 정밀 측정하여 물체와의 거리를 cm 단위로 계산해 냅니다.
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)으로 반환합니다.
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)