当サイトは広告が表示されます。

WRX micro:bitを車両で使う その40 フルカラーLED(WS2812B)でメーターを作る

Ad,micro:bit,OBD2,動画,社外部品・DIY

前回はmicro:bitで車両パルス信号から車速を割り出してみましたが、今回は車両のOBD2ポート(診断コネクター)にELM327を接続して、エンジン回転数などの情報を読み出します。ELM327を経由しての車両情報の読み出しはこれまでも行っていますが、今回はその表示方法としてmicro:bit用のLEDリングを使用してみます。

スポンサーリンク

ELM327経由でOBD2から車両情報を読み出す

micro:bitからELM327を経由しての車両情報の読み出しは、以下の記事で行っています。従って、ここでのELM327に関する詳細については記載しません。

フルカラーLEDリング

micro:bitで使用出来るフルカラーLEDは「ネオピクセルLED」とも呼ばれ、1つ1つのLEDを個別に制御出来る「WS2812B」が使用されています。micro:bit用にも幾つか製品が発売されていますが、汎用の製品も使用は可能で、micro:bit側も拡張ボード等の必要はなく、micro:bit本体のみで制御出来ます。ただしLEDの消費電力が大きいので、LEDを数多く搭載するLEDテープやマトリックスボードでは、別電源や5Vへの接続が必要になります。

今回はmicro:bit用としてKitronik社の「ZIP Halo」を購入しました(私はスイッチサイエンスから購入)。ZIP Haloは24個のフルカラーLEDがリング形状に搭載され、micro:bit本体も用意されているネジ穴で固定する事が可能です。電源についてはZIP Haloに電源用コネクタ(JST PH2.0・micro:bit本体と同様)があり、このコネクタにDC3.5V~5Vを供給すると、micro:bit本体にも同時に電源が供給されます。注意点としてmicro:bit本体側から電源を供給しても、ZIP HaloのLEDは点灯しません。これは先に書いた通りLEDの消費電力が大きい為に、ZIP Haloでその様に制御(保護)されています。プログラム作成や転送でmicro:bit本体にUSBケーブルを接続する場合も同様です。ちなみにZIP Haloの制御で使用する端子は「P0」です。ZIP Haloの基板上からP1とP2信号を取り出せますが、半田付けが必要です。

フルカラーLED用の拡張機能

micro:bitではMicrosoft Makecodeにて、フルカラーLED(WS2812B)用の拡張機能「Neopixel」があります。この拡張機能を追加すると、以下のブロックが表示されます。

最初に変数(デフォルトで「strip」)でLEDを接続している端子と、そのLED数を設定します。また別途変数(デフォルトで「range」)を設定する事で、点灯するLEDの範囲を指定する事も可能です。1つ注意点として、先頭のLEDは「0番目」となっています。24個のLEDがある場合は「0番目~23番目」です。しかしZIP Haloの基盤上ではLED1~LED24とプリントされているので、プログラムを作る上では非常に惑わされます。これは配列等でも存在しますが、先頭が「0」となる指示方法には注意が必要です。

LEDの点灯設定をした後、「strip(またはrange)を設定した色で点灯する」のブロックで、実際のLEDが点灯します。他のLEDや色への変更後も、この「点灯する」のブロックを配置する必要があり、思った通りに点灯しない場合はこのブロックの配置忘れが多いと思います。

またLEDはデフォルトでは最大光度となっていて非常に明るく、直視出来ないレベルです。懐中電灯やスマホのライトも、LED1個でも十分な明るさであることを考えると分かりやすいと思います。明るさを設定するブロック(最大値255)で「20」程度で良いと思います。

LEDリングでのプログラム

拡張機能の「Neopixel」にはリング形状のLEDを想定したブロックはありませんが、ZIP Halo等のリング形状のLEDは1列に並んでいるLEDテープをリング状に並べ替えた物に過ぎません。従ってリング形状のLEDには先頭と後尾が存在します。利用方法にもよりますが、取り付けの際には注意が必要になります。

Kitronik社でZIP Haloの使い方が紹介されていて、Microsoft Makecodeのサンプルプログラムも掲載されています。また「Neopixel」の拡張機能を利用しているので、他の汎用LEDでも使用出来ると思います。

色を変化させるプログラムを簡単に書くと上記の様になります。24個のLEDをフルカラーでグルグルと周回します(上記のgifアニメーション)。

上記ではLEDの点灯範囲を指定し、24個中の12個で点灯するプログラムです。

メーターとしての利用

今回は車両情報の内、エンジン回転数をZIP Haloにて表示してみました。「Neopixel」の拡張機能に「棒グラフで点灯する」ブロックがあり、エンジン回転数を割り当てる事で簡単にレベルメーターとなります。

また3Dプリンターで部品を作り、7セグLEDと180度のサーボモーターを利用して、7セグでエンジン回転数の数値、サーボモーターで速度(速度=角度で制御)を指針で表示する様にしました。7セグやサーボモーターの制御の為にmicro:bit本体はZIP Haloに固定はせず、別途サーボモーター用とブレイクアウト拡張ボードの計2枚刺しで接続しています。

実際、LEDに関するプログラムは簡単なのですが、ELM327からの情報を処理する部分が面倒になっています。ゆえにmicro:bitでは処理が重くなってしまい、バックグラウンド処理を併用しても更新回数は1秒間に3~4回が限界です。ZIP HaloのLEDや7セグの表示には違和感は少ないのですが、サーボモーターによる速度の指針はリアルタイムには動かず、少々ぎこちなくなっています。実際の様子は、この記事最後に掲載している動画を見て下さい。

その他

ZIP Halo(リング形状のLED)では時計表示も出来そうですが、LEDが24個なので中途半端になってしまいます。Kitronik社にはLEDを60個搭載した「ZIP Halo HD」もあり、RTC(リアルタイムクロック)も搭載していて、まさに時計利用も想定した製品です。Microsoft Makecode用の拡張機能やサンプルプログラムも公開されています。

ZIP Haloと一緒に8×8のマトリックスLEDも購入したので、次回はこちらを扱います。

動画

今回の動画です。

ブログ記事公開後に再び同じ内容(翌年に同じ場所を走行など)の動画を作成・公開している場合があります。記事内の動画もなるべく最新を掲載する様にしていますが、最新や過去・その他の動画を見る場合はYoutubeを見て下さい。

「micro:bit」関連記事

以下は「micro:bit」タグの記事一覧です(投稿順)。現在の記事とこれ以降に投稿した記事も含みます。「その24」までの記事ではmicro:bit本体のバージョン「1.5」を使用しています。
micro:bit関連記事
クリックで開きます
「micro:bit+プラレール」も始めました。
プラレール関連記事

その他

FA用PLCとELM327を使用した「OBD2」関連の記事は以下の記事から始まります。

注記

    • このブログ内で書いている内容はあくまで私の利用する製品(アプリ含む)や機器での場合です。他メーカーの製品や機器をはじめ、同じメーカーの製品・機器であってもバージョン違い等の場合もあるので、記事内容の保証や責任を負う事は出来ません。
    • 記事内で紹介している製品や、その他の類似製品を購入・利用する場合はそのメーカーや購入先で仕様等を確認し、自己判断と自己責任の下で利用して下さい。
    • 記事内で公開しているmicro:bit用プログラムは自由に利用・改変して頂いて構いません。ただし不具合やバグもありますので、プログラムを利用した際の故障や事故等についての保証や責任を負う事は出来ません。自己判断と自己責任の下で利用して下さい。
    • micro:bit製品やプログラミング、その他記事内容について個別の問合せや依頼を頂いても回答する事は出来ませんので、予め御了承下さい。
    • BBC micro:bitは、micro:bit教育財団の登録商標です。その他のブランド名または製品名は各所有者の商標です。