【Python/Arduino】簡易レーダーの製作

この記事では、Arduinoマイコン、パソコン(Python)、シリアル通信用いて、RCサーボの角度制御を行う方法をソースコード付きで解説します。

シリアル通信でRCサーボの制御(Python版)

今回は、赤外線測距モジュールをRCサーボの上に載せて周囲の障害物を検知する簡易レーダーを作ってみました。
尚、検知した障害物の位置はPython用モジュール「Pygame」を用いてレーダー風の画面上に描きました。

回路構成(配線図)

Arduinoと電子部品の構成・配線は下記の通りです。

【電子部品】
・Arduino UNO (1個)
・RCサーボ S03R 2BBMG (1個)
・赤外線測距モジュール GP2Y0A21 (1個)
・ジャンパワイヤー(数本)

処理手順

実装したプログラムの処理手順は下記の通りです。

【Arduino側】
①Servoオブジェクトを宣言する。(servo)
②PWM制御信号を送る出力ピンを設定する。(9番ピン)
③シリアルポートを9600 bps[ビット/秒]で初期化する。
④シリアル通信で受信したデータを数値に変換する。
⑤RCサーボを0~180度まで1度ずつ回転させる。
⑥1度回転させる毎に赤外線測距モジュールで測定した距離とサーボの角度をシリアル通信でPCへ送る。
⑦4~6の処理を繰り返す。

【Python側】
①モジュール「pygame」「sys」「math」をインポートする。
②レーダービームの初期角度を設定する。
③Pygameを初期化する。[pygame.init]
④大きさ400*400の画面(ウィンドウ)を生成する。[pygame.display.set_mode]
⑤シリアル通信の設定をする。
⑥レーダービームの軌跡を描画する。
⑦シリアル通信で受け取った角度と距離の値から障害物のXY座標を求める。(原点は赤外線測距モジュールの位置)
⑧最新50個分の障害物を塗りつぶした円で描く。
⑨レーダー画面の背景を描画する。(円と直線)
⑩背景色を黒に設定する。
⑪画面を更新する。(黒色で塗りつぶし)
⑫6-11の処理を繰り返す。
⑬閉じるボタンが押されたら終了する。

ソースコード

サンプルプログラムのソースコードは下記の通りです。
【Arduino側】

【パソコン側(Python)】

※上記のプログラムを動作させるのはライブラリ「Pygame」が必要です。

実行結果

サンプルプログラムの実行結果は下記の通りです。

雰囲気はそれっぽいのが出来ました。
ちなみに1[mm]を1[px]として障害物を描いています。

【関連記事】
Arduino入門 基本的な使い方
Python入門 基本文法

シェア&フォローお願いします!