ロボットは、産業、工場、病院などのタスクを自動化することにより、重い作業での人的労力を軽減する機械です。ほとんどのロボットは、プッシュボタン、リモート、ジョイスティック、PC、ジェスチャーなどの制御ユニットまたはコンポーネントを使用して実行されます。コントローラまたはプロセッサを使用してコマンドを実行する。しかし、今日、私たちは、外部イベントなしで自律的に移動する自動ロボットを使用して、その経路上のすべての障害物を回避しています。はい、障害物回避ロボットについて話します。このプロジェクトでは、Raspberry Piとモータードライバーを使用してロボットを駆動し、超音波センサーを使用してロボットの経路内の物体を検出しました。
これまで、多くの便利なロボットについて説明してきましたが、それらはロボットプロジェクトのセクションにあります。
必要なコンポーネント:
- ラズベリーパイ
- 超音波センサーモジュールHC-SR04
- ネジ付きROBOTシャーシ
- DCモーター
- L293D IC
- ホイール
- ブレッドボード
- 抵抗器(1k)
- コンデンサ(100nF)
- 接続線
- 電源またはパワーバンク
超音波センサーモジュール:
障害物回避手段ロボットは自動ロボットであり、任意のリモートを使用して制御する必要はありません。これらのタイプの自動ロボットには、障害物検出器、音検出器、熱検出器、金属探知機などの「第六感」センサーがあります。ここでは、超音波信号を使用して障害物を検出しました。この目的のために、超音波センサーモジュールを使用しました。
超音波センサーは、物体を検出し、センサーから障害物までの距離を決定するために一般的に使用されます。タンク内の水位測定、距離測定、障害物回避ロボットなど、物理的に接触することなく距離を測定するのに最適なツールです。ここでは、超音波センサーとラズベリーパイを使用して物体を検出し、距離を測定しました。
超音波センサーHC-SR04を使用して、2cm〜400cmの範囲の距離を3mmの精度で測定します。センサーモジュールは、超音波送信機、受信機、および制御回路で構成されています。超音波センサーは2つの円形の目で構成され、そのうちの1つは超音波を送信し、もう1つは超音波を受信するために使用されます。
超音波がセンサーに戻るまでにかかる時間に基づいて、物体の距離を計算できます。音の時間と速度がわかっているので、次の式で距離を計算できます。
- 距離=(時間x空気中の音速(343 m / s))/ 2。
波は同じ距離を前後に移動するため、値を2で割ると、障害物に到達するまでの時間は合計時間の半分になります。
したがって、以下のように障害物からの距離(センチメートル単位)を計算しました。
pulse_start = time.time()while GPIO.input(ECHO)== 1:#ECHOがHIGHかどうかを確認GPIO.output(led、False)pulse_end = time.time()pulse_duration = pulse_end-pulse_start距離= pulse_duration * 17150距離= round(distance、2)avgDistance = avgDistance + distance
ここで、 pulse_duration は、超音波信号を送信してから受信するまでの時間です。
回路の説明:
Raspberry Piを使用したこの障害物回避ロボットの回路は非常に単純です。超音波センサモジュールオブジェクトを検出するために使用される、GPIOピン17とラズベリーパイの27に接続されています。AモータドライバIC L293Dは、ロボットのモータを駆動するためにラズベリーパイ3に接続されています。モータードライバーの入力ピン2、7、10、および15は、それぞれRaspberry Pi GPIOピン番号12、16、20、および21に接続されています。ここでは、2つのDCモーターを使用してロボットを駆動し、1つのモーターをモータードライバーICの出力ピン3と6に接続し、もう1つのモーターをモータードライバーICのピン11と14に接続しました。
使い方:
この自律型ロボットの操作は非常に簡単です。ロボットの電源がオンになり、実行が開始されると、Raspberry Piは、超音波センサーモジュールを使用して、ロボットの前にあるオブジェクトの距離を測定し、変数に格納します。次に、RPiはこの値を事前定義された値と比較し、それに応じてロボットを左、右、前方、または後方に移動する決定を行います。
このプロジェクトでは、RaspberryPiによる決定を行うために15cmの距離を選択しました。これで、Raspberry Piがオブジェクトから15cm未満の距離になると、Raspberry Piはロボットを停止して後方に移動し、左または右に回転させます。再び前方に移動する前に、Raspberry Piは、15 cmの距離内に障害物が存在するかどうかを再度確認します。存在する場合は、前のプロセスを繰り返します。それ以外の場合は、障害物またはオブジェクトが再び検出されるまでロボットを前方に移動します。
プログラミングの説明:
ここでは、プログラムにPython言語を使用 しています。コーディングする前に、ユーザーはRaspberryPiを構成する必要があります。Raspberry Piの使用開始、およびPiでのRaspbian JessieOSのインストールと構成に関する以前のチュートリアルを確認できます。
このプロジェクトのプログラミング部分は、すべての操作を実行するために非常に重要な役割を果たします。まず、必要なライブラリを含め、変数を初期化し、超音波センサー、モーター、およびコンポーネントのピンを定義します。
import RPi.GPIO as GPIO import time #Import time library GPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)TRIG = 17 ECHO = 27…………….。
その後、いくつかの関数 def forward()、def back()、def left()、def right() を作成してロボットをそれぞれ前方、後方、左、または右方向に移動し、 def stop() を作成してロボットを停止します。以下のコードの機能を確認してください。
次に、メインプログラムで、超音波センサーを起動し、信号の送信から受信までの時間を読み取り、距離を計算しました。ここでは、精度を高めるためにこのプロセスを5回繰り返しました。超音波センサーを使用して距離を計算するプロセスについては、すでに説明しました。
i = 0 avgDistance = 0 for i in range(5):GPIO.output(TRIG、False)time.sleep(0.1)GPIO.output(TRIG、True)time.sleep(0.00001)GPIO.output(TRIG、False) while GPIO.input(ECHO)== 0:GPIO.output(led、False)pulse_start = time.time()while GPIO.input(ECHO)== 1:#ECHOがHIGHかどうかを確認GPIO.output(led、 False)pulse_end = time.time()pulse_duration = pulse_end --pulse_start distance = pulse_duration * 17150 distance = round(distance、2)avgDistance = avgDistance + distance
最後に、ロボットがその前に障害物を見つけた場合、障害物から距離をとった後、別のルートを取るようにロボットをプログラムしました。
if avgDistance <15:count = count + 1 stop()time.sleep(1)back()time.sleep(1.5)if(count%3 == 1)&(flag == 0):right()flag = 1 else:left()flag = 0 time.sleep(1.5)stop()time.sleep(1)else:forward()flag = 0
このRaspberryPi障害物回避ロボットの完全なコードは、デモンストレーションビデオとともに以下に示されています。