단일 GPIO 핀으로 라즈베리 파이에서 아날로그 센서 측정하기
배경
많은 마이크로컨트롤러와 달리 라즈베리 파이는 디지털 GPIO 핀만 제공합니다. 3.3V(HIGH)와 0V(LOW) 로직 레벨을 소싱/싱크할 수 있지만, 아날로그 전압을 직접 읽을 수는 없습니다. 다행히 간단한 RC 충전 기법으로 가변 저항 센서(LDR, 서미스터 등)에서 단일 GPIO 핀만으로 다양한 값을 추출할 수 있습니다.
작동 원리
전형적인 RC 회로에서 저항과 커패시터가 직렬로 연결됩니다. 전압이 인가되면 커패시터 전압이 지수적으로 상승합니다. 공급 전압의 63%에 도달하는 시간은 시정수 t = RC로 주어지며, 여기서 t는 시간(초), R은 저항(옴), C는 커패시턴스(패럿)입니다. 커패시터가 GPIO의 HIGH 임계값(3.3V 파이에서 약 2V)까지 충전되는 데 걸리는 시간을 측정하면 센서 저항에 비례하는 값을 얻고, 따라서 센서가 측정하는 물리량을 알 수 있습니다.
예를 들어 10kΩ 저항과 1µF 커패시터로 시정수는 10ms입니다. 어둠에서 1MΩ을 읽는 LDR은 약 1초의 시정수를 만들어 밝고 어두운 조건을 쉽게 구별할 수 있습니다.
실전 구현
3.3V 공급과 GPIO 핀 사이에 정의된 저항을 보장하기 위해 LDR과 직렬로 2.2kΩ 저항을 삽입합니다. 전체 측정 시퀀스는 다음과 같습니다:
- 커패시터 방전: GPIO를 출력으로 설정하고 LOW로 드라이브
- 충전 시작: GPIO를 입력으로 재구성. 전류가 저항 네트워크를 통해 커패시터로 흐르며 전압 상승
- 상승 시간 측정: 카운터(또는 고해상도 타이머)를 증가시키며 GPIO가 HIGH(약 2V)를 읽을 때까지 대기. 경과 시간이 센서의 RC 시정수와 동일
- 반복: GPIO를 다시 출력으로 설정, LOW 드라이브, 연속 모니터링을 위해 필요만큼 반복
자세한 지침은 공식 라즈베리 파이 GPIO 문서와 위키피디아 RC 회로 문서를 참조하세요. 온라인 RC 시정수 계산기로 센서 범위에 맞는 부품 값을 선택할 수 있습니다.