2025年1月28日
023-1.SPIKEプライム Bluetooth入門-第3回「センサーを入力する」
この連載ではBluetooth Low Energy(ブルートゥース・ロー・エナジー。以下、Bluetooth LE)という機能を使って、「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」のラージハブと通信する方法について紹介します。この技術を応用すると、パソコンからラージハブにプログラムを送ったり、パソコンでセンサーの測定値を受け取ったり、いろいろなことができるようになります。なお、この記事ではWindows10以上のパソコンを推奨しています。(文/松原拓也)
◆ 用意するもの
◆ サンプルプログラムを改造する
公式資料のサンプルプログラムを改造します。やることが多いので、要点だけを説明します。
まず、次のWebページからソースファイルを入手します。
"https://github.com/LEGO/spike-prime-docs/
必要となるファイルは「app.py」「cobs.py」「crc.py」「messages.py」の4つです(2024年11月現在、まだカラーセンサーを読めないバグが残っているので、連載第2回目で紹介した方法で「messages.py」を修正してください)。
Thonnyを起動して、「app.py」を開いて、内容を修正します。今回は「Hello World」という文字を表示する機能がまるごと不要なので、関係する処理を削除します。
初期設定値では「5秒おき」にラージハブからセンサーの測定値が送られてきますが、遅すぎるので「1秒おき」に変更します。 保存できる測定値はカラーセンサーときょりセンサーとフォースセンサーとモーターだけにします。修正のじゃまになってしまうので、バッテリー残量やIMUの測定値は保存しません。
◆ CSVファイルを開く
センサーの測定値のフォーマットは公式資料の「SPIKEプライム・プロトコル」に書かれているとおりです。
https://lego.github.io/spike-prime-docs/messages.html
カラーセンサーの場合は先頭から3番目のデータがカラー番号です。
カラー番号(-1~+10)を「色の名前」に置き換えて表示します。ただし、困った問題として、色の名前が資料によってバラバラで統一されていません。
図の左側は海外のレゴ エデュケーションの公式サイトに書かれているカラーセンサーの資料です。図の右側は「SPIKEプライム・プロトコル」に書かれている資料です。両者を比較するお、半分近くが食い違っています。
実際に試したところでは、カラー番号の2番と5番と8番はセンサーが返すことがない値なので、空欄にします。色の名前の「アズール」や「ヴァイオレット」は日本では馴染みがないので、別の名前に変更することにします。結果として、次のようになりました。
・-1: No object(なし)
・ 0: Black(黒)
・ 1: Purple(紫)
・ 3: Blue(青)
・ 4: Sky Blue(水色)
・ 6: Green(緑)
・ 7: Yellow(黄)
・ 9: Red(赤)
・10: White(白)
カラー番号から「色の名前」に変換して表示する機能を追加します。画面の右側にあるのが「カラー番号」と「色の名前」の対応表です。カラー番号から「色の名前」を求めるには「VLOOKUP」という関数を使います。VLOOKUP関数の書式は次のとおりです。
=VLOOKUP(検索する値;検索範囲;使用する列数)
引数の「検索する値」は検索したい内容です。ここではカラー番号を指定します。
「検索範囲」は検索するセルの範囲です。ここでは対応表の範囲を指定します。
「使用する列数」は検索がヒットした時に取り出す値が存在する列のことです。選択範囲の一番左側を「1」列目として考えます。ここでは色の名前を取り出したいので「2」列目を指定します。
CSV形式のファイルでは関数を使えないので、「ods」というファイル形式で保存し直す必要があります。
この記事ではカラーセンサーだけを使いましたが、その他のセンサーも使用できるので、ためしてみてはいかがでしょうか。以上でセンサーの入力方法については理解できたかと思います。次回にはモーターの制御を行ってみたいと思います。
今回作成したプログラム
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。