WRX micro:bitを車両で使う その21 車両からエンジン回転数を得る
前回と前々回の記事で、ELM327を介してエンジン回転数を示す2バイトのデータが、micro:bitのバッファ内の定位置に入る事の確認と、アスキーコード16進数から数値10進数への変換プログラムの作成を行いました。今回はこれらを踏まえた上で実際にエンジン回転数を得られるプログラムを作成し、車両で試してみます。
プログラム
※上記プログラムでLCDパネルのI2Cアドレスが「27」になっていますが、正しくは「39」です。16進数にすると「0x27」になります。ただしI2C通信用のICが「PFC8574T」は39(0x27)、「PFC8574AT」は69(0x3f)になります。
上記は今回のプログラム全体です。前回16進数から10進数の変換方法を2パターン記載しましたが、今回は配列を使用する方法を採用しています。Aボタンでエンジン回転数を取得する為の「010C」を1回送信し、Bボタンでは繰り返しのデータを取得する為の「改行コード」を1回送信します。また前々回に改行コードとして「0D」を文字列で送信してしまい、数値として送信しなければならないとしましたが、よくよく考えれば「空」の文字列を「1行書き出す」事で、改行コードのみが付加されて送信されます。
A+Bボタンでは繰り返しのデータ取得を行う条件とする為の変数「繰り返し状態」のON/OFFを行っています。また「最初に」と「シリアル通信 ~受信したとき」のブロックそれぞれの処理完了条件(変数「表示完了」)と合わせて、「ずっと」のブロックで条件が成り立てば繰り返し「改行コード」を送信します。手順としてはELM327を車両OBD2ポートに接続し、micro:bitとRS232Cで接続、micro:bitの電源を入れてから1度だけAボタンを押した後に、Bボタンを押して繰り返しのデータ取得可否を確認し、A+Bボタンで実際に連続で繰り返しのデータが取得されます。終了はもう一度A+Bボタン。
LCDパネルの表示内容
LCDパネルの表示内容は前々回からあまり変わっていませんが、最下部に結果となるエンジン回転数とデータ変換に伴う確認用の値を表示しています。上記の上側は最初にAボタンで「010C」を送信した時、下側はその後の改行コードによる繰り返しのデータ取得の様子です。繰り返し時は「010C」はELM327から返信されません(矢印)。
下側で「>」までがELM327からの返信、最下部の赤色枠はELM327の返信からそれぞれエンジン回転数を表す「0B」「4D」を抜き出した値、黄色枠は「0B」と「4D」の10進数変換後の値、緑色枠の「723」が計算後のエンジン回転数になります。
変換と計算
プログラムの方では「a」の3ブロックでELM327から受信した文字列から「0B」と「4D」を抜き出し、「0B4D」の1つにまとめています。
「b」の6ブロックで「0B4D」のそれぞれの文字を配列の位置(0~15)に置き換える事でアスキー16進数から数値10進数になります。また同時に10の位となる側に「16」を掛けてから1の位と足す事で、「0B」と「4D」が10進数「11」と「77」になります。
最後に最下位ブロックでOBD2の規格に沿った「(256A+B)/4」の計算を行って(A=11、B=77)、エンジン回転数「723」になります。
以前PLCを利用した際にはデータは1つ1つ順番で処理していましたが、Microsot MakeCodeのブロックでは幾つも重ねる事が出来るのでプログラムが意外に少なく済みました。やろうと思えばもっと減らせますが、逆に横方向へ伸びてしまうのでこの辺りは分かり易さ、バランス次第でしょうか。
実際の様子
当初は「ずっと」のブロック内で「100ms」の一時停止を行って、ELM327へのデータ送信を最低0.1秒空ける様にしていましたが、micro:bitでは特にLCDパネルへの表示(I2C通信)に時間が掛かる様子で、結果的に一時停止は必要ありませんでした。
上記がその時のELM327の様子でLEDの点滅が通信の頻度を示しています。micro:bitからの繰り返しによるデータ送信には一時停止を入れていない状態です。LCDパネルを使用しない場合はもっと高速(高頻度)で通信が行えそうですが、micro:bitでどこまで可能かは分かりません。
動画
上記の動画が今回のプログラムでの様子と、LCDパネルの代わりにmicro:bit本体のLEDでエンジン回転数(/100)を表示したり、エンジン回転数の変化で連続回転サーボモーターの速度を変えてみたりしています。
micro:bitはPLCに比べると当然非力ですが、動画中のサーボモーターの様に得られたデータを他の物に応用する事は簡単です。また車両OBD2から複数の情報(PID)を得る場合は計算等も増えるので、micro:bitの処理速度やメモリー容量も影響してきそうですが、無線機能でデータを他のmicro:bitに送信して処理を分ける事も可能です。
現在、次はどうしようか思案中です。
micro:bit 新バージョン「2.0」について
2020年11月25日より、Micro:bit本体の新バージョン「2.0」が発売になっています。従ってこれまでの古いmicro:bitを使用した記事(~その24)と新しいmicro:bitでは記事内容に相違がある場合があります。ただしこれまでのプログラムは基本的には新しいmicro:bitでも動作し、古いmicro:bitも引き続き使用する事が可能です(ハード的に新たに追加された機能は、拡張ボード等が必要ですが)。
なお新しいmicro:bitについては実際に1つ購入し、micro:bit関連記事「その25」から扱っています。
2022年4月追記
2021年12月にmicro:bit本体のバージョンが「2.2」になるとのアナウンスがありましたが、「2.0」との機能上の違いは無いとされています。
「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)でピクセルアートアニメーションを作る
「micro:bit+プラレール」も始めました。
その他
FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。
注記
-
- このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
- 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
- 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
- micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
- BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。