아두이노 고속 RPM 카운터 – 레이저 + IR 센서 싱글샷 알고리즘으로 40ms 초고속 측정
부품 및 소모품
부품
수량
비고
아두이노 우노
1
IR 근접 센서 (적외선 수신)
1
추천 모델 사용 권장
적색 레이저 다이오드 655nm (레이저 포인터)
1
청/녹색 레이저는 IR 성분 부족으로 작동 안 함
DC 모터 (테스트용)
1
팬 블레이드 장착
9V 배터리, 점퍼 와이어 3개, USB 케이블
1식
필요 도구
납땜 인두 (모터 리드선 연결용), 솔더 와이어
프로젝트 소개
단일 IR 센서와 적색 레이저 포인터, 아두이노만으로 모터 RPM을 고정밀 측정하는 장치입니다. 독자 개발한 싱글샷 감지 알고리즘(Single Shot Detection)으로 40ms 이내에 RPM을 계산하며, 매 1/n 회전(블레이드 n개)마다 측정값을 갱신해 미세한 속도 변화도 실시간 포착합니다.
작동 원리
레이저 빔 차단: 모터 축에 부착된 팬 블레이드가 회전하며 레이저 빔을 주기적으로 차단
IR 센서 감지: 적색 레이저는 미량의 적외선 성분을 포함 → IR 센서가 수신. 블레이드 통과 시 신호 차단(LOW), 통과 후 수신(HIGH)
싱글샷 알고리즘: 차단 시작→끝 시간을 측정해 블레이드 폭/반지름 기반 각속도 계산 → RPM 환산
핵심: 싱글샷 감지 알고리즘
기존 방식: 고정 시간(예: 1초) 동안 펄스 카운트 → 평균 RPM
본 방식: 매 차단 이벤트마다 즉시 RPM 계산
측정 주기: 1/n 회전마다 (n=블레이드 수) → 고속 회전 시 초당 수십 회 측정
응답 시간: < 40ms
해상도: 소수점 2자리 (0.01 RPM 단위)
부하 변동, 전압 강하 등 미세 변화 실시간 감지 가능
설치 및 보정
레이저 포인터와 IR 센서를 마주보게 고정 (거리 5~20cm)
모터 팬 블레이드가 레이저 빔을 지나는 위치에 오도록 정렬
코드 상수 수정:
wid: 블레이드 폭 (미터 단위, 예: 0.012 = 12mm)
rad: 감지 지점 반지름 (미터 단위, 예: 0.045 = 45mm)
모터 구동 후 시리얼 모니터(9600 baud)로 RPM 확인
코드
// 고속 RPM 카운터 - 싱글샷 알고리즘
// by YASH36
const int sen = A0;
const float wid = 0.012; // 블레이드 폭 (m) - 실측값으로 수정
const float rad = 0.045; // 감지 반지름 (m) - 실측값으로 수정
const float konst = 6.2832; // 2 * PI
float time_1, time_2, vel, diff, tnet, rpm;
void setup() {
Serial.begin(9600);
pinMode(sen, INPUT);
Serial.println("모터 시작 후 3초 대기...");
delay(3000);
}
void loop() {
// 레이저 차단 시작 감지 (아날로그 값 하강)
if(analogRead(sen) < 950) {
time_1 = millis();
delay(30); // 디바운스/노이즈 필터
}
// 레이저 차단 종료 감지 (아날로그 값 상승)
if(analogRead(sen) > 950) {
time_2 = millis();
diff = time_2 - time_1; // 차단 지속 시간 (ms)
vel = wid / diff; // 선속도 (m/ms)
tnet = (konst * rad) / vel; // 한 바퀴 도는 시간 (ms)
rpm = 60000.0 / tnet; // RPM 환산
}
Serial.print("RPM: ");
Serial.println(rpm, 2); // 소수점 2자리 출력
}