아두이노로 간단한 장애물 센서 만들기 - IR LED & 포토다이오드 튜토리얼
부품 및 소모품
| IR 송신기 (IR LED) |
1개 |
| 포토다이오드 (수광 소자) |
1개 |
| 아두이노 우노 |
1개 |
| 3kΩ 저항 |
1개 |
| 150Ω 저항 |
1개 |
| 브레드보드 |
1개 |
| 점퍼 와이어 |
1세트 |
| LED (상태 표시용) |
2개 |
앱 및 온라인 서비스
제작 단계
1단계: 부품 준비
- 아두이노
- 150Ω 저항 (IR LED 전류 제한용)
- 3kΩ 저항 (포토다이오드 바이어스용)
- IR LED (송신)
- 포토다이오드 (수신)
- 점퍼 와이어
- 브레드보드
- 표시용 LED 2개 (녹색/적색)
2단계: 회로 조립
IR 송신부 (상시 발광)
- IR LED 애노드 → 150Ω 저항 → 5V
- IR LED 캐소드 → GND
포토다이오드 수신부
- 포토다이오드 애노드 → GND
- 포토다이오드 캐소드 → 3kΩ 저항 → 디지털 핀 2
- 포토다이오드 캐소드 → 아날로그 핀 A0 (동시 연결)
표시용 LED
- 녹색 LED → 디지털 핀 13
- 적색 LED → 디지털 핀 12
3단계: 코드 업로드
int photoDiode = 2; // 디지털 핀 2 (포토다이오드 캐소드 연결)
int greenLed = 13; // 녹색 LED
int senRead = 0; // 아날로그 핀 A0
int senseRate = 905; // 임계값 (환경에 따라 조정 필요)
void setup() {
pinMode(photoDiode, OUTPUT); // 포토다이오드 바이어스용 (HIGH로 풀업)
pinMode(greenLed, OUTPUT);
pinMode(12, OUTPUT); // 적색 LED
digitalWrite(photoDiode, HIGH); // 포토다이오드 캐소드 풀업
digitalWrite(greenLed, LOW);
Serial.begin(9600);
}
void loop() {
int val = analogRead(senRead); // A0 읽기 (0~1023)
Serial.println(val); // 시리얼 플로터로 파형 확인 가능
if (val <= senseRate) {
// 장애물 감지: 반사광 많음 → 전압 낮음
digitalWrite(12, HIGH); // 적색 ON
digitalWrite(greenLed, LOW);
delay(20);
} else {
// 장애물 없음: 반사광 적음 → 전압 높음
digitalWrite(12, LOW);
digitalWrite(greenLed, HIGH);
delay(20);
}
}
원리 설명
IR LED가 지속적으로 적외선을 발사합니다. 앞에 장애물이 있으면 적외선이 반사되어 포토다이오드에 도달하고, 포토다이오드 양단 전압이 떨어집니다(캐소드 전압 하강). 아두이노는 A0으로 이 전압을 읽어 임계값(senseRate)과 비교해 장애물 유무를 판정합니다.
- 장애물 있음: 아날로그 값 낮음 → 적색 LED 점등
- 장애물 없음: 아날로그 값 높음 → 녹색 LED 점등
senseRate 값(예제 905)은 주변 조도, IR LED 밝기, 포토다이오드 감도에 따라 달라지므로 시리얼 모니터로 값을 관찰하며 조정하세요.
응용 확장
- 라인 트레이서용 반사 센서로 활용
- 근접 스위치, 물체 계수기 등
- 변조 방식(38kHz 등) 적용 시 외부광 간섭 내성 향상 (TSOP 수신기 모듈 권장)
회로도
첨부 이미지 및 Fritzing 파일(obstacl_GeLzd2U2jr.fzz) 참조