Raspberry Piで作る障害物回避ロボット

投稿者: | 2025年1月18日

Raspberry Piを活用した障害物回避ロボットは、ロボット製作初心者にも挑戦しやすいプロジェクトです。このブログでは、超音波センサーを使用して障害物を検知し、回避して進むロボットの作り方を解説します。Pythonを使った柔軟なプログラミングで、自由なカスタマイズも可能です!

必要な材料

  1. Raspberry Pi(モデル3以降がおすすめ)
  2. 超音波センサー(HC-SR04)
  3. DCモーター(2つまたは4つ)
  4. モータードライバ(L298NまたはモータードライバHAT)
  5. ロボットカー用シャーシと車輪
  6. モバイルバッテリー(5V供給)
  7. ジャンパーワイヤー
  8. BreadboardまたはGPIO拡張ボード

ステップ 1: ロボットの組み立て

  1. 車体にモーターと車輪を取り付けます。
  2. モータードライバをシャーシ中央に固定します。
  3. 超音波センサーを車体の前面に取り付けます。マウントを使うと角度調整が容易です。

ステップ 2: 配線の接続

  • 超音波センサー (HC-SR04)
    • VCC → Raspberry Piの5Vピン
    • GND → Raspberry PiのGNDピン
    • Trig → Raspberry PiのGPIO 18
    • Echo → Raspberry PiのGPIO 24
  • モータードライバ (L298N)
    • IN1IN2 → Raspberry PiのGPIO 23, 24
    • IN3IN4 → Raspberry PiのGPIO 25, 26
    • モータードライバの電源入力にバッテリーを接続。

ステップ 3: ソフトウェアのセットアップ

  1. OSの準備
    Raspberry PiにRaspberry Pi OSをインストールし、Wi-Fi設定を完了させます。
  2. 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: 動作確認

  1. ターミナルで以下を実行してコードを起動します。
python3 obstacle_avoidance.py

2.ロボットが障害物を検知し、自動的に回避するか確認してください。

応用アイデア

  • センサーの増設: 左右にもセンサーを取り付けて、より正確な回避動作を実現。
  • LED表示: 障害物との距離に応じてLEDを点灯させる。
  • カメラモジュールの追加: 障害物検知に加えて、物体認識機能を持たせる。

このプロジェクトは、Raspberry Piを用いたロボット製作の基本を学ぶだけでなく、自由なカスタマイズでさらに多くの可能性を広げることができます。ぜひ挑戦してみてください!

コメントを残す

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