超音波距離センサー + Raspberry Pi Picoで潜水艦ソナー風

潜水艦のソナー画面風のものを作ってみました。
超音波距離センサーをサーボで回転させて、各角度の距離を測って、プロットしています。
緑の線が超音波距離センサーが向いている方向になります。
潜水艦のソナーだと360度ですが、サーボで動かしているので、前方180度のみです。

台車に載せてLiDARを使ったSLAMのようにマッピングできないかなと思っていましたが、超音波距離センサーは解像度が低くうまくいかなそうだったので、潜水艦ソナー風にしました。
古いルンバに搭載したら、新型ルンバの部屋マッピングみたいにできるかと妄想しています。

使用したパーツ

超音波距離センサー:HC-SR04
サーボ:GWS MINI
マイコン:Raspberry Pi Pico

超音波距離センサーのHC-SR04は最大4mぐらいまで計測できます。
レーザーのセンサーに比べて安価です。Amazonで5個\1,000で購入しました。

接続

  Pico
Pin4 GP2  -> サーボ
Pin6 GP4  -> Echo
Pin7 GP5  -> Trig

超音波距離センサーのHC-SR04は電圧が5Vなので、Pico(3.3V)に接続するために、Echo端子は以下のように5KΩと10KΩで分圧しています。Trig端子は直結してOKです。

Echo端子--5KΩ-+-10KΩ--GND
               |
               +-Pico(GP4)

プログラム

■マイコン側のプログラム
Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。

Raspberry Pi PicoのArduino開発環境構築については↓を参照ください。
Raspberry Pi PicoをArduino開発環境で使うためのメモ

サーボを-90~90度で動かして、距離を測定しています。
角度と距離をPC側にシリアルで送信します。

距離を算出する時に使用する音速が温度に影響するので、Picoに内臓されている温度センサーを使用していますが、室温よりも低めになるようで、適当に6℃プラスしています。

■PC側のプログラム
Pythonで作成しました。
描画にはtkinterを使用しています。
マイコンから受け取った角度と距離から、sin・cos関数を使用してx,y座標を算出します。
古い座標の色を暗くしたかったので、一定数の座標をバッファに保存して、毎回再描画しています。

PCとPicoのシリアル通信のためにpyserialを使用しています。
以下のコマンドでインストールしてください。

pip install pyserial

COM_PORT変数は適切なポートに書き換えてください。

ソースはこちらに置いています。
https://github.com/ponta1/SuperSonicMapping

動いている様子

Raspberry Pi Picoは↓で購入できます。

本格派対局将棋 ぴよ将棋
本格派対局将棋アプリ ぴよ将棋
[Android] [iOS]

かわいい「ひよこ」と対局する将棋アプリ。かわいいけどAIは本格派!
対局後の検討機能や棋譜管理機能も充実!棋譜解析機能も搭載!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です