ESP32 C3 Super Mini IR 슬롯형 광학 속도 센서

ESP32 C3 Super Mini와 IR 슬롯형 광학 속도 센서로 물체를 세고 모터 속도를 RPM으로 측정하는 방법을 배웁니다.

ESP32 C3 Super Mini ir 슬롯형 광학 속도 센서

필요한 하드웨어

1×ESP32 C3 Super Mini 아마존
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×(옵션) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

IR 슬롯형 광학 속도 센서에 대하여

이 모듈은 U자형 포토 인터럽터입니다. 슬롯 안으로 무언가 지나가면 ESP32 C3 Super Mini에 알려 줍니다.

간단 정보:

  • 센서 종류: 슬롯형 광전 센서 (IR LED + NPN 포토트랜지스터)
  • 슬롯 폭: 5.9 mm
  • 동작 전압: 3.3V ~ 5V DC
  • 출력: 디지털 (TTL) - 막히면 LOW, 비어 있으면 HIGH
  • 신호 처리: 내장 슈미트 트리거
  • 장착: 양쪽 끝에 M3 나사 구멍
  • 핀: 3개 (VCC, GND, OUT)

이런 용도에 좋습니다:

  • 인코더 디스크로 모터 속도(RPM) 측정
  • 간단한 타코미터
  • 물체 또는 펄스 개수 세기
  • 바퀴 회전수로 거리 계산
  • 로봇 바퀴 속도 피드백
  • 리미트 또는 위치 감지

핀아웃

ir 슬롯형 광학 속도 센서 핀아웃
  • VCC — 전원 입력 (3.3V ~ 5V)
  • GND — 그라운드 (0V)
  • OUT — ESP32 C3 입력 핀으로 가는 디지털 신호

※ 주의:

핀 순서는 제작 배치마다 달라질 수 있습니다. 항상 모듈에 인쇄된 라벨을 따르세요.

동작 원리

ir 슬롯형 광학 속도 센서 동작 원리
  • 양쪽 구조: 슬롯의 한쪽에는 IR LED가 있고, 반대쪽에는 포토트랜지스터가 마주 보고 있습니다.
  • 슬롯이 비어 있음: IR 빛이 포토트랜지스터에 닿습니다 → OUT은 HIGH
  • 슬롯이 막힘: 불투명한 물체(카드, 디스크의 톱니)가 빛을 막습니다 → OUT은 LOW
  • 깨끗한 신호: 슈미트 트리거가 안정적인 0 또는 1을 만듭니다. 떨림이 없으므로 소프트웨어 디바운스가 필요 없습니다.
  • 투명 플라스틱: 투명한 물체는 IR을 잘 막지 못할 수 있습니다. 불투명한 물체를 사용하세요.
  • 반대 로직: 다른 제조사의 일부 모듈은 반대로 동작합니다. 슬롯이 비어 있는데 "막힘"으로 나오면 코드에서 LOW와 HIGH를 바꾸세요.

배선 다이어그램

IR 슬롯형 광학 속도 센서를 ESP32 C3 Super Mini에 연결하는 방법은 다음과 같습니다:

ESP32 C3 Super Mini ir 슬롯형 광학 속도 센서 배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

속도 센서 핀 ESP32 C3 Super Mini 핀
VCC 3.3V
GND GND
OUT GPIO4
  • 5V가 아닌 3.3V를 사용하세요: OUT 핀의 출력은 VCC 전압까지 올라갑니다. ESP32 C3는 3.3V 보드이므로 센서도 3.3V로 전원을 공급하세요.
  • 추가 부품 없음: 저항이 필요 없습니다. 선 세 개면 충분합니다.

IR 슬롯형 광학 속도 센서를 위한 프로그래밍 방법

IR 슬롯 센서를 읽는 코드는 다음과 같습니다. 라이브러리는 필요 없습니다.

  • 핀을 입력으로 설정:
pinMode(4, INPUT);
  • 상태 읽기 (LOW = 막힘, HIGH = 비어 있음):
int state = digitalRead(4);
  • 인터럽트로 빠른 펄스 세기 (톱니 하나당 한 번, FALLING 에지에서):
attachInterrupt(digitalPinToInterrupt(4), countPulse, FALLING);
  • 펄스를 RPM으로 변환 (1초 동안 센 펄스):
float rpm = pulses * 60.0 / SLOTS_PER_TURN;

ESP32 C3 Super Mini 코드 - 슬롯 안의 물체 감지

이 코드가 하는 일:

  • digitalRead()로 OUT 핀을 계속 읽습니다
  • 상태가 바뀔 때만 메시지를 출력합니다
  • 슬롯이 막힐 때마다 카운터에 1을 더합니다
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 4; // ESP32 C3 Super Mini GPIO4 connected to the OUT pin of the speed sensor int lastState; // the previous state of the sensor int objectCount = 0; // how many times the slot was blocked void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); lastState = digitalRead(SENSOR_PIN); } void loop() { int state = digitalRead(SENSOR_PIN); if (state != lastState) { // the state has changed if (state == LOW) { // LOW = something is in the slot objectCount++; Serial.print("The slot is blocked - count: "); Serial.println(objectCount); } else { // HIGH = the slot is clear Serial.println("The slot is clear"); } lastState = state; } }

빠른 단계

  1. 이 보드를 처음 사용하시나요? Arduino IDE를 설정하려면 ESP32 C3 슈퍼 미니 - 시작하기를 읽어 보세요.
  2. 위의 표와 같이 센서를 배선합니다.
  3. USB Type-C 케이블로 ESP32 C3 Super Mini를 PC에 연결합니다.
  4. Arduino IDE에서 ESP32 C3 Super Mini 보드와 올바른 COM 포트를 선택합니다.
  5. 코드를 복사하여 Arduino IDE에 붙여넣습니다.
  6. Upload를 클릭합니다. 업로드가 실패하면 BOOT 버튼을 누른 채로 RESET을 누른 다음 다시 시도합니다.
  7. 시리얼 모니터를 열고 9600 보드레이트로 설정합니다.
  8. 카드 조각이나 손가락을 슬롯 사이로 몇 번 지나가게 합니다.
  9. 시리얼 모니터에서 결과를 확인합니다.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
The slot is blocked - count: 1 The slot is clear The slot is blocked - count: 2 The slot is clear The slot is blocked - count: 3 The slot is clear
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

ESP32 C3 Super Mini 코드 - 모터 속도(RPM) 측정

이 코드가 하는 일:

  • FALLING 에지에서 인터럽트를 사용합니다. 슬롯을 막는 디스크 톱니 하나마다 펄스가 1씩 늘어납니다.
  • 1초마다 펄스 수를 읽고 0으로 초기화합니다
  • RPM을 계산하여 펄스와 속도를 출력합니다

왜 인터럽트를 사용할까요?

  • 펄스가 매우 빠르게 들어옵니다. loop()에서 핀을 확인하면 일부를 놓칠 수 있습니다.
  • FALLING은 톱니 하나당 한 번 센다는 뜻입니다.

RPM 공식:

  • 1회전 = 펄스 20개 (TT 기어 모터의 일반적인 디스크는 슬롯이 20개입니다)
  • 1초 동안의 펄스 × 60 = 분당 펄스 수
  • 분당 펄스 수 ÷ 20 = 분당 회전수 (RPM)
  • 디스크의 슬롯 수가 다른가요? 코드에서 SLOTS_PER_TURN을 바꾸세요.
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 4; // ESP32 C3 Super Mini GPIO4 connected to the OUT pin of the speed sensor const int SLOTS_PER_TURN = 20; // number of slots (holes) in the encoder disc volatile unsigned long pulseCount = 0; // changed inside the interrupt unsigned long lastTime = 0; // runs every time a tooth of the disc blocks the slot void IRAM_ATTR countPulse() { pulseCount++; } void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING); } void loop() { if (millis() - lastTime >= 1000) { // every 1 second lastTime = millis(); unsigned long pulses = pulseCount; // read and reset the counter pulseCount = 0; float rpm = pulses * 60.0 / SLOTS_PER_TURN; // pulses per second -> turns per minute Serial.print("Pulses: "); Serial.print(pulses); Serial.print(" | Speed: "); Serial.print(rpm); Serial.println(" RPM"); } }

빠른 단계

  1. 첫 번째 예제와 같은 배선을 유지합니다.
  2. 인코더 디스크를 모터 축이나 바퀴에 고정합니다. 톱니가 센서에 닿지 않고 슬롯을 통과해야 합니다.
  3. 앞에서와 같은 방법으로 코드를 업로드합니다.
  4. 시리얼 모니터를 9600 보드레이트로 엽니다.
  5. 디스크를 손으로 돌리거나 모터를 켭니다.
  6. 펄스와 RPM이 1초마다 바뀌는 것을 확인합니다.

모터가 약 300 RPM일 때의 출력 예시:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
Pulses: 0 | Speed: 0.00 RPM Pulses: 98 | Speed: 294.00 RPM Pulses: 101 | Speed: 303.00 RPM Pulses: 100 | Speed: 300.00 RPM Pulses: 99 | Speed: 297.00 RPM Pulses: 0 | Speed: 0.00 RPM
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2
  • RPM 코드는 슬롯당 에지를 한 번 셉니다. 그래서 모듈이 반대 로직이어도 작동합니다.

추가 지식

슬롯 센서와 다른 센서 비교:

  • IR 슬롯형 광학 속도 센서: 5.9 mm 슬롯 안의 물체를 감지합니다. 속도, RPM, 개수 세기에 가장 좋습니다.
  • IR 장애물 회피 센서: 슬롯 안이 아니라 앞쪽 멀리 있는 물체를 감지합니다.
  • ESP32 C3 Super Mini - 로터리 인코더: 손으로 입력하는 노브입니다. 회전 방향도 알려 줍니다.

회전당 슬롯 수 고르기:

  • 슬롯이 많을수록 회전당 펄스가 많아지고 속도를 더 세밀하게 읽을 수 있습니다

바퀴 회전수로 거리 계산:

  • 회전수 = 펄스 ÷ 회전당 슬롯 수
  • 거리 = 회전수 × 바퀴 둘레 (π × 지름)

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

댓글

관련 튜토리얼