디지털 핀만으로 라즈베리 파이용 저가 적외선 근접 센서 만들기
배경
라즈베리 파이 보드는 브로드컴 BCM2835 프로세서로 26개 범용 입출력(GPIO) 핀을 제공합니다. RPi.GPIO 같은 파이썬 라이브러리로 핀 제어가 간단하지만, 아두이노와 비교해 진정한 아날로그 입력이 없다는 게 주목할 한계입니다. GPIO 핀은 엄격히 디지털: 출력으로 설정 시 0V(LOW) 또는 3.3V(HIGH)만 출력 가능. 입력으로 구성 시 0.8V 미만은 LOW, 1.3V 초과는 HIGH로 해석.
온도 모니터링, 거리 측정, 조도 감지 등 많은 실세계 애플리케이션에서 기본 신호는 본질적으로 연속적입니다. 이진 "온/오프" 출력은 종종 불충분합니다. 일반적인 해결책은 MCP3008, TLC549, MCP23017 같은 외부 아날로그-디지털 컨버터(ADC) 추가로 SPI나 I²C로 통신. 이 칩들은 개별적으로 저렴하지만 상용 센서와 결합하면 총비용 $20~$30에 조립이 거대해져 다중 센서 필요한 로봇 프로젝트에 문제.
다행히 외부 ADC 필요 없는 단순하면서 효과적 접근법이 존재합니다. 아날로그 측정을 시간 기반 신호로 변환해 라즈베리 파이 디지털 핀이 간접적으로 연속 데이터 샘플링 가능. 시간은 자연스럽게 아날로그 양이며, 이 기법은 고전적인 RC(저항-커패시터) 충전 원리에 의존합니다.
DIY 적외선 근접 센서 설계
회로는 저렴한 구성요소만 사용: 몇 개의 적외선 LED, 포토트랜지스터, 2N3904 NPN 트랜지스터, 100nF 세라믹 커패시터, 저전력 저항. 정확한 부품 번호는 교체 가능; 핵심은 올바른 전기적 특성 유지.
핵심 구성요소 참고: 100nF 커패시터는 저프로파일 세라믹이나 최적 안정성을 위한 클래스-1 세라믹/필름 커패시터 가능.
하드웨어 설정
- 전원: +5V와 GND 리드를 외부 5V 공급기에 연결. GND를 라즈베리 파이 접지에 연결.
- GPIO 할당: 한 GPIO 핀(예:
PIN_A)을 트리거 출력으로, 다른 핀(예: PIN_B)을 측정 입력으로 선택.
측정 원리
PIN_A가 HIGH로 드라이브되면 적외선 LED가 대상 표면 조명. 반사광이 포토트랜지스터 활성화해 반사 강도에 비례하는 전류 생성. 이 전류가 2N3904 트랜지스터를 통해 커패시터 충전. 커패시터 전압이 PIN_B에서 라즈베리 파이 디지털 임계값을 넘기까지 걸리는 시간은 포토트랜지스터 전류에 반비례하므로 반사 물체까지 거리와 정비례.
파이썬 제어 흐름
# 1. 커패시터 완전 방전 보장
GPIO.setup(PIN_B, GPIO.OUT)
GPIO.output(PIN_B, 0)
time.sleep(0.01) # 10ms로 200×RC(≈0.00005s) 초과
# 2. PIN_B를 입력 모드로 전환
GPIO.setup(PIN_B, GPIO.IN)
# 3. IR LED 트리거
GPIO.setup(PIN_A, GPIO.OUT)
GPIO.output(PIN_A, 1)
# 4. PIN_B에서 로우 지속 시간 측정
counter = 0
start_time = time.time() * 1000 # 밀리초
while GPIO.input(PIN_B) == 0 and counter < 1e4:
counter += 1
elapsed = time.time() * 1000 - start_time # 경과시간(ms) ≈ k × 거리
4.3kΩ 저항과 100nF 커패시터로 RC 시정수는 0.43ms. 2N3904가 포토트랜지스터 전류를 약 150배 증폭해 활성화 시 LED가 각각 약 50mA 소모. 결과적 시간 지연 elapsed가 거리에 선형적으로 비례해 전용 ADC 하드웨어 없이 간단한 아날로그-시간 변환 제공.
이 방식은 기존 ADC 기반 근접 센서에 대한 컴팩트하고 저렴한 대안으로 임베디드 로봇공학, 취미 프로젝트, 교육용 시연에 이상적입니다.