潜水艦のソナー画面風のものを作ってみました。
超音波距離センサーをサーボで回転させて、各角度の距離を測って、プロットしています。
緑の線が超音波距離センサーが向いている方向になります。
潜水艦のソナーだと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は↓で購入できます。
■Raspberry Pi Picoの関連記事
Raspberry Pi Pico+Arduinoでサーボをたくさん動かしたい
会話ができる「ぴよロボ」作りました! (Raspberry Pi + Pico + ChatGPT)
Raspberry Pi Pico W でPCとBluetooth(シリアル)接続する
Raspberry Pi Pico/Pico WをArduino開発環境で使うためのメモ
超音波距離センサー + Raspberry Pi Picoで潜水艦ソナー風
コップの水がこぼれない台 MPU6050 + Raspberry Pi Pico(Arduino)
MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示