2025年1月9日
017-1.SPIKEプライム入門-第3回「センサーを使う」
この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」を使ったプログラミングの方法を紹介します。SPIKEは2020年1月にレゴ エデュケーションが発売したSTEAM教材です。マイコン搭載のブロックをプログラミングすることで、科学・技術・工学・アート・数学を学ぶことができます。プログラミングを行うにはWindowsかMacのパソコン、Androidタブレット、iPad、Chromebookのいずれかが必要です。(文/松原拓也)
◆ SPIKEのセンサー

今回はSPIKE用の3つのセンサーを使ってみたいと思います。 写真は左から順に「テクニックカラーセンサー」と「テクニックフォースセンサー」と「テクニック距離センサー」です。名前が長いので、以後は「カラーセンサー」「フォースセンサー」「距離センサー」と呼ぶことにします。

「ラージ・ハブ(ハブ)」にセンサーを接続すると、こうなります。どのポートに接続してもかまわないのですが、ここではA/C/Eポートに接続しています。
カラーセンサーはライトが白く光ります。距離センサーからはブブブという感じの小さい音が鳴っています。

SPIKEアプリを起動してみましょう。これがセンサー関連のブロックです。
上の4つはカラーセンサー関連のブロックです。
カラーセンサーは「色」を測定するモードと「反射光」を測定するモードがあります。反射光のモードは、センサーから光を発して、それが反射した大きさを測定します。EV3のカラーセンサーではライトに赤い光が使われていましたが、SPIKEでは白い光が使われています。
この他にもフォースセンサー用のブロック2種類と、距離センサー用のブロック2種類があります。
さらにジャイロセンサー用のブロックなどもあるのですが、それは次回以降に紹介します。

こちらが反射光を測定するプログラムです。「反射光」のブロックと「~を表示する」ブロックを組み合わせるだけで測定ができます。
繰り返し処理を行うため、「ずっと」ブロックを使ってブロックを囲んでいます。

プログラムを実行すると、LEDマトリックスに測定値が表示されます。
この場合、「37」と表示されています。

この他にもセンサーを使ってみようかと思ったのですが、このセンサーの値のブロックが違うだけです。あと最低でも3回はプログラムの転送と実行を繰り返さないといけません。
この無駄をなくしたいので、1つのプログラムで4種類の測定ができるプログラムを作ってみたいと思います。
◆ センサー測定プログラム

プログラムができました。
ハブにある右ボタンと左ボタンを押すとモードを切り替えできるようにしてみました。「mode」という変数を使って処理を分岐させて、4種類の測定を行います。
処理を分岐させるには「もし~なら」ブロックを使います。

新しく変数を作るには「変数を作る」ボタンを押します。
変数の名前はここでは「mode」と入力します。「OK」を押すと変数が作られます。

これで完成、、、でも良かったのですが、実際に使ってみると問題点が出てきましたので、以下のように対策してみました。
・(問題)現在のモードがわからない→(対策)モードの種類を表示するようにする。
・(問題)左右のボタンを押し続けると測定しなくなる→(対策)モードが循環するようにする。
・(問題)ボタンの反応がない→(対策)ボタンが押されたら音を鳴らす。
写真は変更後のプログラムです。結果として、プログラムが長くなってしまいました。

プログラムを実行しました。 左/右ボタンを押すと、モードが変わります。
センサーの測定は、タイマーを使って、3秒おきに繰り返します。
モード0の場合は「REF」という文字が表示されて、その次にカラーセンサー(反射光モード)の測定値が表示されます。

変数modeが1の場合は「COLOR」と「測定値」が表示されます。 カラーセンサー(カラーモード)の測定値は色の番号を表しています。
「7」は黄色という意味です。

色の番号はこのように割り振られています。
理由はわかりませんが、番号には「2」や「6」や「8」が存在しません。もし、検出できなかった場合は「-1」となります。

変数modeが2の場合はフォースセンサーを測定するモードです。 LEDマトリックスには「FORCE」と「測定値」が表示されます。
フォースセンサーは先端を押す力(ちから)を検出するセンサーです。機能としてはEV3のタッチセンサーに似ています。タッチセンサーはオン/オフを検出するだけですが、このフォースセンサーは力を検出することができます。
写真は測定中の様子です。測定する単位は「newton(ニュートン)」「%」から選択することができます。ここではニュートンを選択しています。センサーの先端をめいっぱい押し込むと、LEDマトリックスには「9」ニュートンと表示されました。

変数modeが3の場合は距離センサーの測定を行います。「DIST」「測定値」の順に表示されます。
距離センサーは超音波を対象物に反射させることで距離を測定するセンサーです。
測定する単位は「%」「cm」「インチ」から選択することができます。ここでは単位をcmに設定しました。
写真は測定中の様子です。「13」と表示されました。かなり正確に測定されています。アプリのヘルプによると、 センサーには距離センシング(50~2000mm)と高速距離センシング(50~300mm)という2つのモードがあるらしいのですが、今現在がどうなっているかよくわかりません。測定中にモードを変えられるとは思えないので、高速ではないモードが選択されていると思います。

ちなみにハブとの接続中はアプリ上でセンサーの値を確認することができます。
フォースセンサーの値は「ON(オン)」ではなくて、「0(ゼロ)N(ニュートン)」という意味です。測定する単位は自由に変更することができます。
次回はセンサーとモーターを組み合わせてロボットを作ってみたいと思います。
今回作成したプログラム(SPIKEアプリ用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。