라즈베리 파이 피코 IR 슬롯형 광학 속도 센서
이 가이드에서는 Raspberry Pi Pico와 함께 IR 슬롯형 광학 속도 센서를 설정하고 사용하는 방법을 배웁니다. 다음 내용을 다룹니다:
- U자형 센서가 슬롯 안의 물체를 감지하는 원리
- 속도 센서를 Raspberry Pi Pico에 연결하는 방법
- 슬롯을 지나가는 모든 물체를 세도록 Raspberry Pi Pico를 프로그래밍하는 방법
- 인코더 디스크의 펄스를 RPM 속도 값으로 바꾸도록 Raspberry Pi Pico를 프로그래밍하는 방법

준비물
| 1 | × | 라즈베리 파이 피코 W | 쿠팡 | 아마존 | |
| 1 | × | 라즈베리 파이 피코 (또는) | 쿠팡 | 아마존 | |
| 1 | × | 마이크로 USB 케이블 | 아마존 | |
| 1 | × | IR Slotted Optical Speed Sensor | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (옵션) Breadboard | 쿠팡 | 아마존 | |
| 1 | × | (추천) 라즈베리 파이 피코용 스크루 터미널 확장 보드 | 아마존 |
IR 슬롯형 광학 속도 센서에 대하여
이 모듈을 옆에서 보면 U자 모양입니다. 포토 인터럽터, 옵토 인터럽터, 슬롯 센서, U자형 IR 센서 등 여러 이름으로 불립니다. 하는 일은 항상 같습니다. 두 팔 사이의 틈에 무언가 있는지를 Raspberry Pi Pico에 알려 줍니다.
인코더 디스크와 함께 쓰면 이 센서는 회전계가 됩니다. 모터나 로봇 바퀴의 속도를 읽고, 회전수를 세어 거리를 구하고, 작은 벨트 위의 부품 수를 세거나, 아무것도 닿지 않는 리미트 스위치로 사용할 수 있습니다.
| IR 슬롯형 광학 속도 센서 | |
|---|---|
| 센서 종류 | 슬롯형 광전 센서 (IR LED + NPN 포토트랜지스터) |
| 슬롯 폭 | 5.9 mm |
| 동작 전압 | 3.3V ~ 5V DC |
| 출력 | 디지털(TTL), 가려지면 LOW, 열려 있으면 HIGH |
| 신호 처리 | 내장 슈미트 트리거 |
| 장착 | 양쪽 끝에 M3 나사 구멍 |
| 핀 | 3개 (VCC, GND, OUT) |
핀아웃

모듈에는 핀이 세 개뿐입니다:
- VCC 핀: Raspberry Pi Pico의 3V3(OUT) 핀(3.3V)에 연결합니다. 모듈은 3.3V ~ 5V를 받습니다.
- GND 핀: Raspberry Pi Pico의 아무 GND 핀(0V)에 연결합니다.
- OUT 핀: Raspberry Pi Pico의 GPIO 핀에 연결합니다(이 가이드에서는 GP15). 디지털 신호를 출력합니다.
핀 순서는 제조 시기마다 바뀔 수 있습니다. 배선하기 전에 내 모듈에 있는 작은 글자를 확인하세요.
왜 5V는 안 될까요? OUT 핀은 VCC 전압까지 올라갑니다. Pico는 3.3V 보드이고, GPIO 핀은 5V를 좋아하지 않습니다. 그러므로 센서에 3V3(OUT)으로 전원을 공급하면 신호가 3.3V를 넘지 않습니다.
동작 원리

U자의 한쪽 팔에는 적외선 LED가 있습니다. 다른 쪽 팔에는 NPN 포토트랜지스터가 있습니다. 둘은 5.9 mm 슬롯을 사이에 두고 마주 보고 있습니다.
- 슬롯이 비어 있음: 적외선이 포토트랜지스터에 닿아 OUT 핀이 HIGH(MicroPython에서 값 1)가 됩니다.
- 슬롯이 가려짐: 카드나 디스크의 톱니가 빛을 막아 OUT 핀이 LOW(값 0)가 됩니다.
보드의 슈미트 트리거 칩이 신호를 다듬어 줍니다. Pico는 흔들리는 중간 값 없이 또렷한 0 또는 1을 받으므로, 코드에 디바운스가 필요 없습니다.
두 가지를 기억하세요:
- 불투명한 물체를 사용하세요. 투명한 플라스틱은 적외선을 통과시킬 수 있어서 센서가 감지하지 못합니다.
- 다른 브랜드의 일부 모듈은 반대로 동작합니다. 슬롯이 비어 있는데 Shell에 "blocked"라고 나오면, 첫 번째 스크립트에서 0과 1 검사를 서로 바꾸세요. RPM 스크립트는 톱니마다 한 번의 에지를 세므로 두 종류 모두에서 동작합니다.
선연결
내장 슈미트 트리거가 이미 깨끗한 신호를 주므로 별도의 저항은 필요 없습니다. Pico의 3.3V 핀에서 전원만 가져오면 됩니다.

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Raspberry Pi Pico 코드 - 슬롯 안의 물체 세기
첫 번째 스크립트는 OUT 핀을 계속 확인합니다. 상태가 바뀔 때만 한 줄을 출력합니다. 슬롯이 열린 상태에서 가려진 상태로 바뀔 때마다 카운터가 1씩 올라갑니다.
빠른 단계
다음 안내를 차례대로 따라 하세요:
- 컴퓨터에 Thonny IDE가 설치되어 있는지 확인합니다.
- Raspberry Pi Pico에 MicroPython 펌웨어가 설치되어 있는지 확인합니다.
- Raspberry Pi Pico를 처음 사용한다면 자세한 안내는 라즈베리 파이 피코 - 시작하기 튜토리얼을 참고하세요.
- 제공된 배선도에 따라 속도 센서를 Raspberry Pi Pico에 연결합니다. VCC가 VBUS가 아니라 3V3(OUT)에 연결되었는지 다시 확인하세요.
- Micro USB 케이블로 Raspberry Pi Pico를 컴퓨터에 연결합니다.
- 컴퓨터에서 Thonny IDE를 실행합니다.
- Thonny IDE에서 Tools Options로 이동하여 MicroPython (Raspberry Pi Pico) 인터프리터를 선택합니다.
- Interpreter 탭에서 드롭다운 메뉴의 MicroPython (Raspberry Pi Pico)를 선택합니다.
- 올바른 포트가 선택되어 있는지 확인합니다. Thonny IDE가 포트를 자동으로 감지합니다.
- 위 코드를 복사하여 Thonny IDE의 편집기에 붙여넣습니다.
- 다음 방법으로 스크립트를 Raspberry Pi Pico에 저장합니다:
- Save 버튼을 클릭하거나 Ctrl+S 키를 누릅니다.
- 저장 대화상자에서 Raspberry Pi Pico를 선택합니다.
- 파일 이름을 main.py로 저장합니다.
- 녹색 Run 버튼을 클릭하거나 F5 키를 눌러 스크립트를 실행합니다.
- 카드 한 장을 슬롯에 밀어 넣었다가 빼 보세요. 세 번 반복합니다. 손가락도 괜찮습니다.
- Thonny 하단의 Shell에 표시되는 메시지를 확인합니다.
스크립트의 이름을 main.py로 지정하고 Raspberry Pi Pico의 루트 디렉터리에 저장하면, Pico의 전원 공급 또는 리셋 시마다 자동으로 실행됩니다.
Raspberry Pi Pico 코드 - 모터 속도(RPM) 측정
이제 무언가가 얼마나 빨리 도는지 측정해 봅시다. 이를 위해 인코더 디스크가 필요합니다. 가장자리에 슬롯이 뚫린 얇은 바퀴입니다. 디스크를 모터 축이나 바퀴에 고정하세요. 디스크의 톱니가 센서의 슬롯에 닿지 않고 지나가야 합니다.
회전하는 디스크는 펄스를 매우 빠르게 만듭니다. 핀을 읽는 단순한 루프로는 일부를 놓칠 수 있습니다. 그래서 이 스크립트는 인터럽트를 사용합니다. Pin.irq()와 Pin.IRQ_FALLING을 사용하면, 신호가 HIGH에서 LOW로 떨어지는 순간 MicroPython이 작은 함수를 호출합니다. 톱니가 슬롯에 들어올 때마다 한 번씩 일어나므로, 톱니 하나가 정확히 한 번의 카운트가 됩니다.
1초에 한 번, 메인 루프가 카운트를 가져오고 0으로 되돌립니다. 그런 다음 계산합니다:
- 이 예의 디스크는 슬롯이 20개이므로, 한 바퀴에 펄스가 20개 나옵니다.
- 1초 동안의 펄스 수 × 60 = 1분 동안의 펄스 수.
- 1분 동안의 펄스 수 ÷ 20 = 1분 동안의 회전수, 즉 RPM(분당 회전수)입니다.
20슬롯 디스크는 TT 기어 모터에 자주 함께 들어 있는 것입니다. 디스크의 슬롯 수가 다르면 스크립트 맨 위의 SLOTS_PER_TURN을 바꾸세요.
빠른 단계
배선은 그대로입니다. 스크립트만 바뀝니다:
- 위 코드를 Thonny의 새 탭에 복사합니다.
- main.py라는 이름으로 Raspberry Pi Pico에 저장합니다. 첫 번째 스크립트가 대체됩니다.
- 녹색 Run 버튼을 클릭하거나 F5 키를 누릅니다.
- 손으로 디스크를 돌리거나 모터가 돌리게 합니다. Pico로 모터를 구동하려면 라즈베리 파이 피코 - DC 모터 튜토리얼을 참고하세요.
- Thonny 하단의 Shell에 표시되는 메시지를 확인합니다. 1초마다 새 줄이 나타납니다.
이번 실행에서 모터는 약 300 RPM으로 돌다가 멈췄습니다. 카운트 구간이 1초이기 때문에 값이 조금씩 오르내립니다. 바퀴로는 거리도 알 수 있습니다. 한 바퀴에 로봇은 바퀴 둘레(π × 지름)만큼 움직이므로, 총 거리 = 회전수 × π × 지름입니다.
슬롯 안이 아니라 몇 센티미터 떨어진 곳의 물체를 감지하고 싶으신가요? 라즈베리 파이 피코 - 장애물 회피 센서 튜토리얼을 확인해 보세요. 회전 방향까지 알려 주는 노브가 필요하다면 라즈베리 파이 피코 - 회전 인코더 튜토리얼을 참고하세요.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.