2025年1月27日
020-1.SPIKEセンサー自作入門-第10回「測距センサーをつなぐ」
この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」で動作するセンサーの作り方を紹介します。センサーを自作して、市販のセンサーにはできないような面白い使い方を考えてみましょう。センサーを作るには電子工作のスキルが必要となります。様々な危険がともないますので、充分に注意して行いましょう。なお、以下の内容によって生じた損害については保障できかねますのでご了承ください。
SPIKEアプリおよびハブOSは、SPIKE App Legacyを利用しています。SPIKE App3での動作は未確認となりますのでご了承ください。(文/松原拓也)
◆ 測距センサーとは

今回は「測距センサー」を使って、きょりセンサーの互換品を自作してみたいと思います。測距センサーはきょりを測定するセンサーです。前回に引き続き制御用のマイコンにはRaspberry Pi Picoを使います。
こちらがシャープ製の測距センサー「GP2Y0E03」です。 秋月電子通商ではケーブル付きの状態で売られています。 電源電圧は2.7~5.5V、測距範囲は4~50cmとのことです。 SPIKEプライムの純正品のきょりセンサーは超音波を使ってきょりを求めています。 一方、GP2Y0E03は赤外線を使います。丸い窓が2つあり、向かって左側が発光部、右側が受光部です。赤外線を照射して、それが反射した角度からきょりを求めるという仕組みです。測定値が物体の反射率に影響されないという特徴があります。

回路図です。
GP2Y0E03の通信方式はアナログとI2Cの2種類から選択できます。今回はI2Cを使います。GP2Y0E03のGPIO1端子をHighに接続すると、通信方式にI2Cが選択されます。

ブレッドボードに挿し込むため、ピンヘッダをハンダ付けします。
◆ プログラミング

回路を組み立てました。

「Thonny」を使ってセンサーの動作テスト用のプログラムを作ります(GP2Y0E03test_for_pico.py)。
「gp2y0e03_init」関数はセンサーを初期化する関数です。GP2Y0E03内部の0x35番地にモード番号を書き込みます。 値が「1」の場合、きょりの最大値は128cm。モード番号が「2」の場合、最大値は64cmとなります。
「gp2y0e03_getvalue」関数はきょりを測定する関数です。GP2Y0E03内部の0x5E番地と0x5F番地からデータを読み取って、きょりを算出しています。

きょりの計算方法については、秋月電子通商のサイト内にある製品のpdfが参考になります。
https://akizukidenshi.com/catalog/g/gI-07547/
これによると、きょりは「(DH×16+DL)÷16÷2^SHIFTBIT」という式で求めています。 DHは0x5E番地の中身、DLは0x5F番地の中身、SHIFTBITはモード番号です。今回、モード番号は1なので、「(DH×16+DL)÷32」と式を簡略化することができます。

動作テスト用のプログラムを実行します。
この時点では、まだラージハブには接続しません。 USBケーブルでパソコンとRaspberry Pi Picoをつないでおきます。
対象物を10cmくらい手前に置いた状態で実行すると、「10」前後の値が表示されました。成功です。測定値は少数を含んでいます。実際にラージハブと通信するには、値を整数に変換する(少数を捨てる)必要があります。

続いて、きょりセンサーのプログラムを作ってみました(diydistsensor.py)。プログラムは「main.py」という名前でRaspberry Pi Pico内に書き込みます。あとは電源が入ると自動的にプログラムが実行されます。
測定値をラージハブのライトマトリクスに表示してみました。センサーの4cmくらい手前で手をかざしてみたところ、「4」と表示されました。値はほぼ正確だと思います。このセンサーがどこまで使えるか気になるところです。興味のある方は実際に作って、確かめてみてはいかがでしょうか。
今回作成したプログラム(Thonny用/SPIKE App用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。