WRX micro:bitを車両で使う その39 車速パルス信号から速度を計算する
今回は車両の車速パルス信号を利用して、micro:bitで速度を表示出来る様にしてみます。車速パルス信号とは車軸の回転に比例したパルス信号で、スピードメーターをはじめ様々な車両制御などに利用されています。分かりやすい物ではカーナビゲーションでの走行中の操作ロックや画面制御です。
WRX(VAB)での車速パルス信号取り出し
私の車両(WRX)では、車速パルス信号は運転席のハンドル下にある15ピンの「OPコネクター」から取り出す事が出来ます。内容については以前に記事にしているので、下記を見て下さい。
※注意点として、車速パルス「信号」なので「電源」としての利用は出来ません。車速パルス信号に負荷を必要とする接続はしない様に。
上記、黄色矢印がOPコネクター(のれん分けハーネス)です。ちなみに白色矢印はOBD2接続ポートです。
「OPコネクター」はハンドル下にあるとしましたが、奥へ覗き込まないと見えません。私の車両ではカーナビ用に「のれん分けハーネス」が1つ、さらにLEDアクセサリーライナー用のハーネスが1つ付いているので、かなり下側まで出て来ています。今回はここに、さらに別途購入してあったサードパーティーの配線コネクターを接続します。
車速パルス信号
車速パルス信号は「JIS D5601」で規格として定められていますが、時速60km時の車軸回転数は「637rpm」である事と、車軸1回転あたりのパルス数は「4~25(四輪車)」のいずれかとなっています。詳しくはこちら(gooネットピット)で分かりやすく書かれています。
出力形態は分かりましたが、その時のパルス電圧が分かりません。メーカーや車種によりますが、12Vや5Vが多い様子です。車両で実際に計ってみます。
停車状態で「8~9V」程度が出力されていました(イグニッションON/OFFで若干変動)。という事は車速パルス信号は「負理論」で、走行すると電圧が下がるパルスになる様です。
さらにテスターを当てたまま実際に走行してみると、確かにその通りの指針の動きでした。上記はその時撮影した動画からアニメーションGIFに切り出した物です(1秒間の繰り返し)。指針はあまり大きく動いていませんが、これは指針の動きが遅いので、パルス信号のON/OFFに追従出来ていない為です。
さらに動画から、10km/h時の1秒間で指針の動く回数を調べると約7回でした。1分間では7回×60で420回。一方、JISでは60km/h時の車軸回転数が637(rpm=1分間の回転数)なので、10km/h時では673回転÷6で約106回転。従って420回÷106回転=3.96(回/1回転)となり、私の車両は車軸1回転当たり「4パルス」が出力されている事が分かります。
micro:bitへのパルス信号入力
micro:bitでは各端子でデジタル・アナログ入力も可能ですが、電圧は3Vまでです。車両の車速パルス信号を直接接続する事は出来ないので抵抗を入れるか、トランジスタ等でスイッチング回路を作るかになります。
少し前にプラレールを制御する際に使用した、ボリューム抵抗があったのでこれを利用する事にします。micro:bitではアナログ入出力を行う場合、電圧の0~3Vに対して「0~1023」までの数値で指定・モニターが可能です。ちなみにデジタル入出力では0か1(=1023)です。
パルス幅の計測
Microsoft MakeCodeのブロックに「パルスの長さを測る」というブロックがあるので、これを利用します。便利な事に正負の選択まで可能です。
パルス幅から車速を計算
まず最初に、パルス幅から周波数を求める必要があります。パルス信号のON/OFFが同じ時間間隔であるとすれば、単純にパルス幅の2倍がパルス周期になります。また1秒間のパルス回数が周波数(Hz)なので、1÷パルス周期で周波数が分かります。
「パルスの長さを測る」ブロックは「マイクロ秒」で計測されています。1秒は1,000,000マイクロ秒です。計測されたパルス幅から周波数を計算するには、上記の様な計算式と計算ブロックで可能です。
次にJISの計算式から車速を求めます。上記でn1は車軸1回転当たりのパルス数で、私の車両では「4」です。N2は時速60km時の車軸回転数で「637」。
JISの計算式を「V(速度)=」の形にして速度を求める計算式にすると、上記の様な計算式と計算ブロックになります。ちなみに速度の小数点以下は不要なので、四捨五入のブロックを挿入しています。これでmicro:bitに入力されるパルス信号から、速度を求める事が出来ます。
完成形(一応)
車速パルス信号からmicro:bitで速度を求める計算プログラムが出来たので、実際に車両でのスピードメーターと比較してみようと思います。上記(a)は車両からの車速パルス信号を、ボリューム抵抗で3V程度に落として接続しています。
(b)はリバース信号を接続していますが、リバース信号は12Vなので上記の抵抗(販売名称はなぜか電圧センサー)を入れています。入力電圧が1/5に下がる抵抗値になっています。
(d)の7セグメントLEDで速度を表示しますが、micro:bitのボタンで車速パルス信号とリバース信号の入力アナログ値や、その他確認したい値を表示出来る様にしています。
また折角なので、micro:bitに以下の機能を付加してみました。
音声による速度案内(c)
前回の記事で「DFPlayer Mini(ただし互換品)」を利用して、micro:bitでSDメモリーに保存されたmp3音声ファイルの再生を行いました。今回は10km/h、20km/h…と、速度の切り替わりで音声ファイルを再生してみます。音声については前回同様に「VOICEVOX」で作成しています。
速度警告装置(e)
1980年代までは車両に搭載されていた速度警告装置、いわゆる「キンコンチャイム」を作成しました。本当はこれがメイン機能だったのですが車速パルス信号で手間取り、おまけ機能になってしまいました。
おもちゃの鉄琴を買いました。ちょうど良さそうな音階の2枚を外します。
3Dプリンターで箱を作り、両側に鉄琴を取り付けます。
速度警告装置と同様に電磁式のソレノイドを利用します。上記はDC4.5Vで動作しますが、電磁石は消費電流が大きいので別電源で駆動します。これを3Dプリンターで作った箱の中心に取り付けて、ソレノイドのON/OFFで両側の鉄琴を叩きます。
※上記の様な小型ソレノイドの中には、OFF時にシャフト軸が抜けるタイプがあります。また動作時の押し付け力はほとんどありません(数グラム程度)。
別電源はUSBの5Vからスイッチング電源で4.5Vに下げます。実際には5Vでもソレノイドは動作しますが…。
micro:bitの出力で上記のリレーを駆動します。接点側でソレノイドへの別電源をON/OFFします。ちなみにこのリレーは3.3V~20Vで動作するMOSFETリレーで、接点側は5V~36V。また20kHzまでのPWM信号に対応しているので、車速パルス信号でこのリレーを制御して、別電源をmicro:bitにパルス信号として入力する事も可能かもしれません。ただし接点保護回路が入っていないので、逆起電圧対策として本来はダイオードを加える事が望ましいです。
プログラム
上記の付加機能を加えた、micro:bitの最終的なプログラムは以下です(Microsoft MakeCodeで開く)。
完成形に至るまで
一応の完成形に至るまで、実際にはなかなか上手くいかずに悩んだ部分がありました。以下に記載します。
車速パルス周期の取得
車速パルスからパルス周期、さらに周波数を求める方法を、最初は下記の様に考えていました。
micro:bitでのプログラムは、こちらのサイトで「心拍計」用のプログラムが紹介されていて、これを参考にすることが出来ました。micro:bitには電源ONから計測している「稼働時間」があります。これを利用して車速パルス信号の電圧の上下波形から現在時間を記録し、次の上下波形で現在時間と過去時間の差から周期を求めています。その結果のプログラムは以下ですが、はたしてmicro:bitで処理出来るのか…。
実際に車両で試してみると、案の定、速度が20km/hを超えると正確な速度が表示出来ませんでした。micro:bitで心拍計を作る場合は、心拍はせいぜい数Hz程度なので問題は無いと思います。
「パルスの長さを測る」ブロック
先の計算式から、車速パルス信号の周波数の約1.4倍が速度になります。周波数(H)は100km/hでも70Hz程度ですが、micro:bitでは他の処理と同時に計測するのは難しい…?と悩んでいた所に、「パルスの長さを測る」ブロックの存在に気が付きました。これで幾分は改善されるかもしれないと期待しましたが、結果は変わりませんでした。
ちなみに「パルスの長さを測る」ブロックはアナログで電圧を入力する場合、おおよそ2V以上で計測出来る様子です。当初、車速パルス信号は先の写真「b」を介してmicro:bitに入力していましたが、電圧が1/5の1.8Vほどにまで下がってしまうので、ボリューム抵抗に変更しました。
micro:bitを2台にする
「パルスの長さを測る」ブロックを使用しても改善されなかったので、車速パルス信号から速度を算出するmicro:bitと、その後の音声案内と速度警告装置のmicro:bitと機能を2つに分けて、処理を軽減させてみました。2台のmicro:bit間は無線通信にしています。
micro:bitを2台にして機能を分けても、やはり30km/hを超えて来ると正確に速度が表示出来ません。根本的に車速パルス信号の計測に無理がある様子です。ただしmicro:bitでのアナログパルスの発信周期や計測は「マイクロ秒」で指定が出来るので、100Hz程度では問題は無いと思っていますが…。
micro:bitの並列処理
Microsoft MakeCodeのプログラム上では「ずっと」のブロックを複数個並べる事が可能で、一見それらが並列で処理されるようにも思えますが、実際には「順番に」1つずつ処理されています。さらに「ずっと」のブロックでは、最後に「一時停止」処理が僅かに行われていて、その一時停止で他の「ずっと」のブロック処理が開始されるとの事。「ずっと」のブロックを出来るだけ少なくすればその分一時停止処理も減りますが、それでもプログラムの長さを考えると、大きな改善には至らないと思います。
そこでパルスの長さを測る「ずっと」のブロックを、高度なブロックの「制御」にある「バックグラウンドで実行する」に置き換えてみました。この「バックグラウンドで実行する」のブロックは常に最優先で処理され、終了後に「ずっと」の処理が行われる様です(「ずっと」が1つ終われば、また「バックグラウンド」)。ただしやはり「バックグラウンドで実行する」のブロックにも僅かな一時停止処理が含まれているそうです。また「バックグラウンドで実行する」を複数個使用してしまうと、結局は「ずっと」のブロックを複数個使用するのと変わらなくなってしまいます。最優先で処理させたい1つに限定する形が良さそうです。
別のmicro:bitでパルス発信
また別のmicro:bitで、パルス発信機となるプログラムを作成しました(Microsoft Makecodeで開く)。ABボタンを押す事で、0Hz・1Hz・10~100(10刻み)HzのパルスをP0端子から出力します。なお簡易的に0Hz時は負理論にする為、P0端子はONにしています。
パルス発信機としたmicro:bitから、「バックグラウンドで実行する」に置き換えたmicro:bitに100Hzまでパルス信号を出力してみたところ、ちゃんと100Hzを計測し、速度も142km/hを表示出来ました。
そしてようやく、完成形に至りました。
その他
本当は「速度警告装置」を再現してみたかっただけなのですが、車速パルス信号の処理で悩んでしまい、最終的な目的が良く分からなくなってしまいました。「速度警告装置」その物をもっと改善したいのですが、もはや気力がありません。次に試してみたい事もあるのですが、今年中は無理そうです。
動画
以下は完成形に至るまでの動画です。
ブログ記事公開後に再び同じ内容(翌年に同じ場所を走行など)の動画を作成・公開している場合があります。記事内の動画もなるべく最新を掲載する様にしていますが、最新や過去・その他の動画を見る場合はYoutubeを見て下さい。
「micro:bit」関連記事
以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。クリックで開きます
- WRX micro:bitを車両で使う その1 micro:bitの購入
- WRX micro:bitを車両で使う その2 Microsot MakeCodeとスマホ用アプリ
- WRX micro:bitを車両で使う その3 micro:bitの仕様と購入したブレイクアウトボード
- WRX micro:bitを車両で使う その4 本体ファームウェアの更新とWebUSB
- WRX micro:bitを車両で使う その5 無線機能の利用
- WRX micro:bitを車両で使う その6 方位センサーの利用
- WRX micro:bitを車両で使う その7 加速度センサーの利用
- WRX micro:bitを車両で使う その8 micro:bitからSIドライブのモード切替
- WRX micro:bitを車両で使う その9 サーボモーターの利用(準備編)
- WRX micro:bitを車両で使う その10 サーボモーターの利用(動作編)
- WRX micro:bitを車両で使う その11 可動式雲台を作る(2軸編)
- WRX micro:bitを車両で使う その12 可動式雲台を作る(1軸編)
- WRX micro:bitを車両で使う その13 連続回転サーボモーターの利用
- WRX micro:bitを車両で使う その14 Bluetoothでスマホから操作(データ受信)を行う
- WRX micro:bitを車両で使う その15 LCDパネル(I2C LCD1602・2004)の利用
- WRX micro:bitを車両で使う その16 シリアル通信(RS232C)を行う
- WRX micro:bitを車両で使う その17 光センサーと温度センサーの利用
- WRX micro:bitを車両で使う その18 LEDのフォントとスクロールスピードを変える
- WRX micro:bitを車両で使う その19 ELM327の車両との通信を確認する
- WRX micro:bitを車両で使う その20 アスキーコード16進数から数値10進数への変換
- WRX micro:bitを車両で使う その21 車両からエンジン回転数を得る
- WRX micro:bitを車両で使う その22 7セグメントLEDの利用(TM1637ドライバ)
- WRX micro:bitを車両で使う その23 DCモーターを制御する(TB6612FNG・DRV8833)
- WRX micro:bitを車両で使う その24 ステッピングモーターを制御する(ULN2003ドライバ)
- WRX micro:bitを車両で使う その25 micro:bit バージョン2.0を購入(2021年12月 v2.2アナウンスあり)
- WRX micro:bitを車両で使う その26 バージョン2.0で追加されたMakeCodeブロック
- WRX micro:bitを車両で使う その27 バージョン2.0の初期状態と追加された機能
- WRX micro:bitを車両で使う その28 新バージョン(v2.0)のI2C通信
- WRX micro:bitを車両で使う その29 環境モニターを作る(気温・気圧・湿度編)
- WRX micro:bitを車両で使う その30 環境モニターを作る(二酸化炭素・有機化合物編)
- WRX micro:bitを車両で使う その31 環境モニターを作る(LCD表示・動作確認編)
- WRX micro:bitを車両で使う その32 環境モニターを作る(RTCモジュール追加編)
- WRX micro:bitを車両で使う その33 環境モニターを作る(ロギングモジュール追加編)
- WRX micro:bitを車両で使う その34 環境モニターを作る(ログデータ記録編)
- WRX micro:bitを車両で使う その35 車内のCO2濃度と換気について
- WRX micro:bitを車両で使う その36 新バージョン(v2.0)でのI2C通信の問題解決
- WRX micro:bitを車両で使う その37 Microsoft MakeCodeの新バージョン(v4)と新機能データロガー
- WRX micro:bitを車両で使う その38 mp3音声ファイルの再生(DFPlayer Mini)
- WRX micro:bitを車両で使う その39 車速パルス信号から速度を計算する
- WRX micro:bitを車両で使う その40 フルカラーLED(WS2812B)でメーターを作る
- WRX micro:bitを車両で使う その41 フルカラーLEDマトリックス(WS2812B)で時計を作る
- WRX micro:bitを車両で使う その42 フルカラーLEDマトリックス(WS2812B)でピクセルアートアニメーションを作る
その他
FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。注記
-
- このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
- 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
- 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
- micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
- BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。