Arduinoで高速・高精度RPM測定 – レーザーとIRセンサーによる新アルゴリズム
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| IR近接センサー(推奨品使用) | 1 | 赤色レーザーの微弱IRを検知可能なもの |
| 赤色レーザーポインター(655nm) | 1 | 緑/青レーザーはIR成分が少なく不可 |
| DCモーター(テスト用) | 1 | ファンブレード付き |
| 9V電池、USBケーブル、ジャンパーワイヤー | 各1 |
必要な工具
- はんだごて(モーターリード線接続用)
- Arduino IDE
プロジェクト概要
単一のIRセンサーと赤色レーザーポインターを用いて、モーターの回転数(RPM)を高速・高精度に測定する装置です。独自開発の「シングルショット検出アルゴリズム」により、ファンブレード1枚分の通過(1/n回転)ごとにRPMを計算し、40ms未満で結果を出力。変動にも強く、小数点以下2桁の精度を実現しています。

原理
- 赤色レーザーは微弱な赤外線成分を含み、IRセンサーで検知可能
- ファンブレードがレーザー光を遮るとセンサー出力がLowに、通過するとHighに戻る
- この遮断→復帰の時間差からブレード通過速度を求め、RPMに換算
- ブレード枚数nの場合、1回遮断=1/n回転
独自アルゴリズム: シングルショット検出
従来の「一定時間内のパルスカウント」ではなく、1回の遮断イベントごとにRPMを算出します。これにより:
- 測定周期が極めて短い(〜40ms)
- 回転数変動をリアルタイムに追従
- 小数点以下2桁の分解能
スケッチ
// High-Speed RPM Counter - Single Shot Detection Algorithm
// by YASH36
const int sen = A0;
const float bladeWidth = 0.012; // ブレード幅 [m] - 実測値に調整
const float radius = 0.045; // 検知点の半径 [m] - 実測値に調整
const float twoPi = 6.2831853; // 2π
float t1, t2, diff, vel, tRot, rpm;
void setup() {
Serial.begin(9600);
pinMode(sen, INPUT);
Serial.println("Start motor and wait 3 sec...");
delay(3000);
}
void loop() {
// ブレード遮断待ち(センサー値が閾値未満)
if(analogRead(sen) < 950) {
t1 = millis();
delay(30); // デバウンス
}
// ブレード通過(センサー値が閾値以上)
if(analogRead(sen) > 950) {
t2 = millis();
diff = t2 - t1; // 遮断時間 [ms]
vel = bladeWidth / diff; // 線速度 [m/ms]
tRot = (twoPi * radius) / vel; // 1周時間 [ms]
rpm = 60000.0 / tRot; // RPM換算
}
Serial.print("RPM: ");
Serial.println(rpm, 2); // 小数点以下2桁
}
調整ポイント
bladeWidth: ファンブレードの厚み(遮断距離)をメートル単位で実測入力radius: 回転中心からレーザー照射点までの距離をメートル単位で実測入力- 閾値
950は環境光・センサー特性に合わせて調整(シリアルプロッターで波形確認推奨) - レーザーとセンサーは正対させ、光軸を合わせる
回路図・設置例


応用・拡張
- 複数ブレード対応(n枚ならRPM = 60000 / (tRot * n))
- OLED/LCD表示化、データロギング(SDカード/シリアル)
- PID制御のフィードバックセンサーとして活用
製造プロセス
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Arduino Portenta H7にMAX6675でサーモカップル温度センサーを接続する
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
- K30 CO2センサで室内空気質をリアルタイム監視する
- Unopad: Ableton Live連携シームレスなArduino MIDIコントローラー
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
- Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」