2025年1月27日

020-1.SPIKEセンサー自作入門-第7回「アナログ・ジョイスティックを自作する」

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

◆ アナログ・ジョイスティックを読み取る

今回は「アナログ・ジョイスティック」のセンサーを作ってみたいと思います。このセンサーはラージハブ(ハブ)側からは「きょりセンサー」として認識されます。
ここでは、秋月電子通商の「アナログジョイスティックDIP化キット」を使います。価格は250円です。写真はキットが完成した様子です。このキットは自分でハンダ付けをして組み立てます。

回路図です。 「デジタル」ジョイスティックは2種類しか情報を読み取ることができません。たとえば、端子の電圧から「Low=押した」「High=押してない」として認識します。
「アナログ」ジョイスティックはもっと細かい段階を読み取ります。 この段階の数のことを「分解能」といいます。Raspberry Pi Picoの場合、ADの分解数が65536です。0~3.3Vの電圧を0~65535の値として読み取ることができます。
「AD」は正しくは「A/D」「Analog to Digital」と表記して、アナログからデジタルに変換するという意味です。これを「A/D変換」といいます。

Raspberry Pi Picoに接続してみました。
中央のレバー(黒い部分)をX方向とY方向に動かすことができます。 今回はY方向だけを読み取ります。

◆ ジョイスティックの仕組み

ジョイスティックの仕組みを紹介します。 ジョイスティックの中にある可変抵抗は、レバーを動かすと、抵抗値の割合が変化します。
1本の抵抗を2つに分離している状態と同じです。 この2本の抵抗の抵抗値Raと抵抗値Rbとした場合、中間の電圧は「V×(Rb÷(Ra+Rb))」という数式で求めることができます。

ジョイスティックの動作をテストするプログラム(.py)です。 「ADC(Pin(GPIO番号))」を呼び出すと、戻り値としてA/D変換用のオブジェクトが作成されます。
プログラムを書き込むため、Raspberry Pi Picoをパソコン(PC)のUSBポートに接続します。接続するさいには、念のためRaspberry Pi Picoをラージハブのコネクタから外しておきましょう。
もし、Raspberry Pi Pico内部でプログラム(main.py)が実行しっぱなしの場合、Thonnyの起動時に「Device is busy or does not respond.(デバイスは忙しい。または返事をしない)」というエラーが表示されます。もし、Ctrl+Cキーを押しても改善しないという場合、次の方法で対処しましょう。
キーボードのCtrl+Dキーを押す(Send EOF/Soft reboot)→USBケーブルを挿し直す →メニューバーの「STOP」ボタンを押す(Stop/Restart backend)→「ファイル - Save as」をメニュー選択。→「Raspberry Pi Pico」を選択。→カーソルを「main.py」に合わせて、右クリックして、「Delete」を選択。

実行結果です。Shell画面に測定値が表示されます。
レバーを動かしながら実行して、結果が変わるか確認してみましょう。

◆ プログラムの作成

自作センサーのプログラムを作ります。

自作センサーのプログラム(diydistsensor_ex2.py)です。Thonnyで開きます。
AD変換によって、変数countには0~65535のカウント値が格納されます。 そこから0~99の値にスケール変換を行い、きょりとして伝えます。

「ファイル - Save as...」をメニュー選択。→ファイルの保存先に「Raspberry Pi Pico」を選択。→ファイル名を「main.py」として保存します。書き込みが終わったら、PCとの接続を切り離します。これで、Raspberry Pi Picoの起動時にプログラムが自動的に実行されます。

SPIKEアプリのハブ側のプログラムです。
きょりを数値で表示するだけでは面白くないので、ライトマトリクスの点の数で表示してみます。
ライトマトリクスの点は25個なので、センサーの値(0~99)を4で割っています。

動作を確認してみましょう。 自作センサーをハブに接続して、ハブの電源をオンにします。 ハブ側でもプログラムを実行します。
ジョイスティックのレバーを上に動かすと点の数が減ります。ジョイスティックのレバーを下に動かすと点の数が増えます。レバーから手をはなすと、中間くらいの数に戻ります。
これでA/D変換の使い方がわかったと思います。

今回作成したプログラム(Thonny用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。