電子工作のお勉強を始めたというのは整備手帳でも触れたんですが、実際にラズパイとArduinoを導入したので色々テストしてみたいなと。
で、先日eKワゴンについていたオートゲージのタコメーターが突然死しまして。
そんなきっかけから、回転数に応じてLEDを点灯させる「タコインジゲーター」みたいなものを、ラズパイとArduinoを組み合わせて作ってみることにしました。
ラズパイが車両側を引き受けます。回転信号のパルス波をラズパイで出力。
で、ArduinoはLEDを点灯させる役割(インジゲーター側)とします。
今回の学習の目的は回転信号の原理を知ることとして、Arduinoやラズパイのコードは全てChatGPTに出力してもらいます(おい)。
で、緑のLED4つと黄色のLED1個、赤色LED1個の計6個のLEDをArduinoのA0~A5ピンに接続。
リードベンダーを持ってないので正直きったないですがお許しを。
これでArduino側のコードで、回転数に応じて点灯するLEDを設定します。
今回は、
アイドリング(700~1100rpm)でA0(緑1)を点滅、
1100rpm以上でA0(緑1)を点灯、
2100rpm以上でA1(緑2)を点灯、
3100rpm以上でA2(緑3)を点灯、
4200rpm以上でA3(緑4)を点灯、
5200rpm以上でA4(黄色)を点灯、
6300rpm以上でA5(赤色)を点灯、
6450rpm以上で全てのLEDをフラッシュ点滅
という感じで設定しました。
回転数の元ネタは今のH82Wです。
で、重要なのはここから。
回転信号というのはパルス波ってので送られてきます。 Hz(ヘルツ)ってやつです。
1Hzだと1秒に1回の繰り返し周期になると覚えると覚えやすいです。
今回は1分間の回転数を1秒あたりのパルスに変換する想定で、÷60で計算します。
1秒で1回転するということは、1分で60rpm。
なので、1Hz=60rpmということで計算していくということです。
つまり1000回転なら16.67Hz
3000回転なら50Hz
6000回転なら100Hz
という感じになります。
これを短形波(0と1)でArduinoに送ります。
車にもよりますが、この1秒に何回繰り返したかで何回転って信号が来るわけですね。
しかもこれのややこしいところは車によってその方式が違います。
市販のタコメーターはそれを自動で判断して正確な回転数を表示してくれてるというわけです。
さらに実車だと瞬間的なスパイクや逆潮というものも発生する上にノイズも乗るので単純にマイコンひとつあるだけでは正確な回転信号を検出することが出来ないんです。
市販のタコメーターが安物でも6,000円とかする理由が何となく理解できますね。
実際私が今回机上テストした時ですらノイズが原因で正しく動作せず、えんらい苦労してます。
当初はラズパイとArduinoの間にフォトカプラPC817というものを挟んでました。が、これが原因でノイズが乗る上、聞くところによるとPC817はパルスには向かないという特徴もあるらしく、このトラブルシューティングで実に4時間近くもかかってしまったのです。
さらに言うとArduinoの受け取り方にも方法があって、それが
ΔT法と窓法に別れます。
この辺は勉強中なので私も概要だけ伝えますが、ΔT法は素直に1Hzを繰り返し読み込みます。なので、波形が長い=Hzが低い、つまり回転数が低い時はΔ法が安定して波形を読み取ることが出来る、ということらしいです。
しかし高回転になると読み取りが追いつかないとかナントカカントカで「波打つ」そうです。
対する窓法はそんな高回転に強く、波形をミリ秒単位で「カウント」します。波形を複数カウントして、その中で0が何個、1が何個とかをカウントしてるんですね。
低回転で窓法が使えないのは例えば120msにしていた場合で60rpm(1Hz)だと、0が1個、1が1個とカウントしてしまい500rpm回ってると勘違いしてしまうんです。
高回転なら120msに111000111みたいな感じでカウントできるので、正確な回転数を割り出せるということだそうです。
今回は6500がレブリミット近辺のeKワゴンということで、ΔT法のみで計測することにしてます。
これが高回転型のVTECなどを想定すると、ΔT法と窓法のハイブリッド構成でArduinoのコードを記述しないといけなくなります。
で、ラズパイ側に関しては最初はコマンドで制御します。アイドリング~レブリミット近辺までの段数と、start/stopのコマンドを用意して、そのコマンドを打つと任意の回転数にセットしてくれる感じ。
で、ノイズと四苦八苦戦いながら完成した簡易版の映像がこちら↓
https://youtu.be/_3RQm8bCxTw?si=5NWsuXf_ugqSqZ_F
こんな感じで動作しました。
ノイズやフォトカプラが向かない件は結局ラズパイとArduinoを直結する形で解決させました。
これが1日目。
2日目はラズパイ側のPythonスクリプトを変更して、ラズパイをサーバーとして稼働してWeb上のUIからStart/Stopとスロットルを操作できるようにしてみました。
当然コードはGPTに丸投げですが、ちゃんと動作ロジックがどうなってるかなどはコード読みながら勉強中です。
で、こっちは幾つかのPi内のライブラリが読み込まないとかはあったもののそんなに苦労することなく再現が出来ました。
で、それがこれ↓
https://youtu.be/B7BZfRBdXK4?si=JSKjh_4gdZ_u6iUG
こうして可視化できると物凄く面白いです。
今後は、これを元に拡張していこうかなと考えてます。今はArduinoのA(アナログ)ピンにLEDを6個刺してるので、調光したり減光したり出来ませんが、ドライバと呼ばれるモジュールを使えば複数のLEDを制御できるようになったりもするので、フルカラーLEDにしてレブリミット時は全て赤点滅、みたいなことも出来るようになります。
今手元にドライバがないのが残念ですが、年明けくらいにはこの工作を進展させないな。
そんな感じのお話でした。
ブログ一覧
Posted at
2025/11/06 22:39:47