아두이노 우노 R4 IR 슬롯형 광학 속도 센서
이 가이드에서는 IR 슬롯형 광학 속도 센서를 아두이노 UNO R4와 함께 사용하는 방법을 배웁니다. 자세히 배울 내용은 다음과 같습니다:
- U자형 IR 슬롯 센서가 두 팔 사이의 물체를 감지하는 원리
- 속도 센서를 아두이노 UNO R4에 연결하는 방법
- 슬롯을 지나가는 물체를 하나씩 세는 아두이노 UNO R4 프로그램을 작성하는 방법
- 인코더 디스크와 인터럽트로 모터 속도(RPM)를 측정하는 아두이노 UNO R4 프로그램을 작성하는 방법

준비물
| 1 | × | Arduino UNO R4 WiFi or Arduino UNO R4 Minima | ||
| 1 | × | (또는) DIYables STEM V4 IoT, Compatible with Arduino Uno R4 WiFi | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 | |
| 1 | × | IR Slotted Optical Speed Sensor | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (옵션) Breadboard | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino UNO R4 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 전원 분배기 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
IR 슬롯형 광학 속도 센서에 대하여
이 작은 모듈은 U자 모양입니다. 포토 인터럽터라고도 부릅니다. 한쪽 팔에는 적외선 LED가, 다른 쪽 팔에는 NPN 포토트랜지스터가 있습니다. 둘은 5.9 mm 간격을 두고 마주 봅니다. 이 센서는 아두이노 UNO R4에 간단한 한 가지를 알려 줍니다: 틈이 비어 있는가, 아니면 무언가 들어 있는가?
| IR 슬롯형 광학 속도 센서 | |
|---|---|
| 센서 종류 | 슬롯형 광전 센서 (IR LED + NPN 포토트랜지스터) |
| 슬롯 폭 | 5.9 mm |
| 동작 전압 | 3.3V ~ 5V DC |
| 출력 | 디지털 (TTL), 막히면 LOW, 비어 있으면 HIGH |
| 신호 처리 | 내장 슈미트 트리거 |
| 장착 | 양 끝에 M3 나사 구멍 |
| 핀 | 3개 (VCC, GND, OUT) |
주요 용도:
- 인코더 디스크로 모터 속도(RPM) 측정, 회전계처럼 사용
- 물체나 펄스 개수 세기
- 바퀴 회전 수를 세어 거리 측정
- 로봇에 바퀴 속도 피드백 제공
- 한계 위치나 원점 위치 감지
핀아웃

모듈에는 핀이 세 개 있습니다:
- VCC 핀: 아두이노 UNO R4의 5V에 연결합니다(모듈은 3.3V ~ 5V를 받습니다).
- GND 핀: GND(0V)에 연결합니다.
- OUT 핀: 디지털 출력이며, 아두이노 UNO R4의 입력 핀에 연결합니다.
핀 순서는 제조 묶음에 따라 달라질 수 있습니다. 항상 모듈에 인쇄된 라벨을 확인하세요.
동작 원리

IR LED는 항상 슬롯 건너편으로 빛을 비춥니다.
- 슬롯이 비어 있음: 빛이 포토트랜지스터에 닿으므로 OUT 핀은 HIGH입니다.
- 슬롯이 불투명한 것(카드, 손가락, 인코더 디스크의 이빨)으로 막힘: 빛이 통과하지 못하므로 OUT 핀은 LOW입니다.
내장 슈미트 트리거가 거친 빛의 세기를 깨끗한 0 또는 1로 바꿔 줍니다. 신호가 떨리지 않으므로 소프트웨어 디바운스가 필요 없습니다.
알아둘 작은 점 두 가지:
- 투명한 플라스틱이나 유리는 IR 빛을 통과시킬 수 있습니다. 불투명한 물체를 사용하세요.
- 다른 제조사의 일부 모듈은 반대로 동작합니다. 슬롯이 비어 있는데 보드가 "막힘"이라고 표시하면, 첫 번째 코드에서 LOW와 HIGH를 서로 바꾸세요. RPM 코드는 슬롯당 에지 하나를 세므로 두 종류 모두에서 동작합니다.
선연결
선은 세 개만 필요합니다: VCC는 5V에, GND는 GND에, OUT은 아두이노 UNO R4의 2번 핀에 연결합니다. UNO R4는 5V 보드이므로 5V 전원을 써도 되고, OUT 신호도 안전한 레벨을 유지합니다.

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.
2번 핀은 인터럽트를 사용할 수 있어서 선택했습니다. 두 번째 코드에 필요합니다.
IR 슬롯형 광학 속도 센서를 위한 아두이노 프로그래밍 방법
슬롯이 막혔는지 확인하기 (폴링):
- OUT 핀에 연결된 핀을 입력으로 설정합니다:
- 핀을 읽습니다. LOW는 막힘, HIGH는 비어 있음을 뜻합니다:
- 마지막 읽기값과 비교하여 상태가 바뀔 때만 동작하게 합니다:
빠른 펄스 세기 (인터럽트):
- 카운터를 만듭니다. 인터럽트가 값을 바꾸므로 volatile로 표시합니다:
- 카운터에 1을 더하는 작은 함수를 작성합니다:
- 신호가 HIGH에서 LOW로 떨어질 때마다(이빨 하나가 슬롯에 들어올 때) 이 함수를 실행합니다:
- 1초에 한 번, 인터럽트를 잠시 멈춘 상태에서 카운터를 복사하고 초기화한 다음 펄스를 RPM으로 바꿉니다:
이 공식은 왜 그럴까요? 슬롯이 20개인 디스크는 한 바퀴에 펄스 20개를 만듭니다. 1초 동안의 펄스 수 × 60은 분당 펄스 수입니다. 20으로 나누면 분당 회전수(RPM)가 됩니다.
아두이노 UNO R4 코드 - 슬롯 안의 물체 감지
이 스케치는 OUT 핀을 계속 확인합니다. 상태가 바뀔 때만 한 줄을 출력하고, 슬롯이 막힐 때마다 카운터에 1을 더합니다.
빠른 단계
다음 안내를 단계별로 따라 하세요:
- Arduino Uno R4 WiFi/Minima를 처음 사용한다면 아두이노 우노 R4 - 소프트웨어 설치 튜토리얼을 참고하세요.
- 제공된 배선도에 따라 부품을 연결합니다.
- USB 케이블로 Arduino Uno R4 보드를 컴퓨터에 연결합니다.
- 컴퓨터에서 Arduino IDE를 실행합니다.
- 알맞은 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
- 위 코드를 복사하여 Arduino IDE에 붙여넣습니다.
- Upload 버튼을 클릭하여 Arduino UNO R4에 코드를 업로드합니다.
- 아두이노 우노 R4 - 시리얼 모니터를 열고 9600 보드레이트로 설정합니다.
- 카드 한 장(또는 손가락)을 슬롯에 밀어 넣었다가 빼 보세요. 이를 몇 번 반복합니다.
- 시리얼 모니터에서 결과를 확인합니다.
한 번 지나갈 때마다 두 줄이 나옵니다: 카드가 들어갈 때 한 줄, 나올 때 한 줄. 아무것도 바뀌지 않는 동안에는 출력되지 않습니다.
아두이노 UNO R4 코드 - 모터 속도(RPM) 측정
loop()에서 폴링하는 방식은 느린 물체에는 괜찮습니다. 회전하는 디스크는 훨씬 빠르기 때문에 loop()가 일부 이빨을 놓칠 수 있습니다. 그래서 이 스케치는 FALLING 에지의 인터럽트로 펄스를 세며, 이빨 하나당 정확히 한 번씩 셉니다. 1초마다 펄스 수와 속도(RPM)를 출력합니다.
상수 SLOTS_PER_TURN은 20으로 설정되어 있습니다. TT 기어 모터에 함께 제공되는 일반적인 인코더 디스크입니다. 디스크의 슬롯 수가 다르다면 이 값을 바꾸세요.
인코더 디스크 설치하기
- 인코더 디스크를 모터 축이나 바퀴에 고정합니다.
- 디스크의 이빨이 슬롯을 지나가도록 센서를 놓습니다.
- 디스크가 센서의 팔에 닿지 않도록 합니다.
- 디스크를 손으로 돌리거나 모터에 전원을 넣어 돌릴 수 있습니다. 모터는 별도의 배선이 필요합니다. 그 부분은 아두이노 우노 R4 - DC 모터 튜토리얼을 참고하세요.
빠른 단계
- 이전과 같은 배선을 유지합니다.
- 위의 RPM 코드를 복사하여 Arduino IDE에 붙여넣습니다.
- Upload 버튼을 클릭합니다.
- 시리얼 모니터를 9600 보드레이트로 엽니다.
- 디스크를 돌린 다음 멈춥니다.
- 시리얼 모니터에서 속도를 확인합니다. 여기서는 모터가 약 300 RPM으로 돕니다:
한 줄을 확인해 봅시다: 100펄스 × 60 ÷ 20 = 300 RPM.
바퀴가 얼마나 움직였는지 알고 싶나요? 회전 수에 바퀴 둘레(π × 바퀴 지름)를 곱하세요.
※ 주의:
- 인터럽트 함수는 짧게 유지하세요. 그 안에서 Serial.print()를 호출하지 마세요.
- 인터럽트가 바꾸는 모든 변수는 volatile이어야 합니다.
- 슬롯 안이 아니라 떨어진 거리에 있는 물체를 감지하고 싶나요? 아두이노 우노 R4 - 장애물 회피 센서를 사용해 보세요. 회전 방향도 알려 주는 노브가 필요한가요? 아두이노 우노 R4 - 로터리 인코더를 사용해 보세요.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.