Raspberry Piを活用した障害物回避ロボットは、ロボット製作初心者にも挑戦しやすいプロジェクトです。このブログでは、超音波センサーを使用して障害物を検知し、回避して進むロボットの作り方を解説します。Pythonを使った柔軟なプログラミングで、自由なカスタマイズも可能です!
必要な材料
- Raspberry Pi(モデル3以降がおすすめ)
- 超音波センサー(HC-SR04)
- DCモーター(2つまたは4つ)
- モータードライバ(L298NまたはモータードライバHAT)
- ロボットカー用シャーシと車輪
- モバイルバッテリー(5V供給)
- ジャンパーワイヤー
- BreadboardまたはGPIO拡張ボード
ステップ 1: ロボットの組み立て
- 車体にモーターと車輪を取り付けます。
- モータードライバをシャーシ中央に固定します。
- 超音波センサーを車体の前面に取り付けます。マウントを使うと角度調整が容易です。
ステップ 2: 配線の接続
- 超音波センサー (HC-SR04)
VCC
→ Raspberry Piの5V
ピンGND
→ Raspberry PiのGND
ピンTrig
→ Raspberry PiのGPIO 18Echo
→ Raspberry PiのGPIO 24
- モータードライバ (L298N)
IN1
とIN2
→ Raspberry PiのGPIO 23, 24IN3
とIN4
→ Raspberry PiのGPIO 25, 26- モータードライバの電源入力にバッテリーを接続。
ステップ 3: ソフトウェアのセットアップ
- OSの準備
Raspberry PiにRaspberry Pi OSをインストールし、Wi-Fi設定を完了させます。 - Pythonライブラリのインストール
以下をターミナルで実行します。
sudo apt update
sudo apt install python3-pip
pip3 install RPi.GPIO
ステップ 4: プログラミング
以下のPythonコードをエディタに書き込み、obstacle_avoidance.py
という名前で保存してください。
import RPi.GPIO as GPIO
import time
# GPIOピンの設定
TRIG = 18
ECHO = 24
MOTOR1A = 23
MOTOR1B = 24
MOTOR2A = 25
MOTOR2B = 26
# GPIOの初期化
GPIO.setmode(GPIO.BCM)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(MOTOR1A, GPIO.OUT)
GPIO.setup(MOTOR1B, GPIO.OUT)
GPIO.setup(MOTOR2A, GPIO.OUT)
GPIO.setup(MOTOR2B, GPIO.OUT)
def measure_distance():
GPIO.output(TRIG, False)
time.sleep(0.2)
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO) == 0:
pulse_start = time.time()
while GPIO.input(ECHO) == 1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150 # 音速を用いて距離を計算
return round(distance, 2)
def forward():
GPIO.output(MOTOR1A, True)
GPIO.output(MOTOR1B, False)
GPIO.output(MOTOR2A, True)
GPIO.output(MOTOR2B, False)
def stop():
GPIO.output(MOTOR1A, False)
GPIO.output(MOTOR1B, False)
GPIO.output(MOTOR2A, False)
GPIO.output(MOTOR2B, False)
def turn_right():
GPIO.output(MOTOR1A, True)
GPIO.output(MOTOR1B, False)
GPIO.output(MOTOR2A, False)
GPIO.output(MOTOR2B, True)
try:
while True:
dist = measure_distance()
print("Distance:", dist, "cm")
if dist < 15:
stop()
time.sleep(0.5)
turn_right()
time.sleep(0.5)
else:
forward()
except KeyboardInterrupt:
print("終了中...")
GPIO.cleanup()
ステップ 5: 動作確認
- ターミナルで以下を実行してコードを起動します。
python3 obstacle_avoidance.py
2.ロボットが障害物を検知し、自動的に回避するか確認してください。
応用アイデア
- センサーの増設: 左右にもセンサーを取り付けて、より正確な回避動作を実現。
- LED表示: 障害物との距離に応じてLEDを点灯させる。
- カメラモジュールの追加: 障害物検知に加えて、物体認識機能を持たせる。
このプロジェクトは、Raspberry Piを用いたロボット製作の基本を学ぶだけでなく、自由なカスタマイズでさらに多くの可能性を広げることができます。ぜひ挑戦してみてください!