Raspberry Pi とモーター制御:ロボットの基本

投稿者: | 2025年1月13日

Raspberry Pi を使用してモーターを制御する方法は、ロボット開発の第一歩として非常に重要です。このブログでは、モーター制御の基礎知識から具体的な制御方法まで、詳しく解説します。初心者でも取り組みやすい内容なので、ぜひ参考にしてください。

必要な基礎知識

  1. モーターの種類
    • DCモーター: 単方向または双方向の回転が可能で、速度制御も比較的簡単です。
    • サーボモーター: 角度を精密に制御でき、ロボットアームなどに使用されます。
    • ステッピングモーター: 一定のステップで正確に回転し、位置制御に最適です。
  2. 制御方式
    • GPIO (General Purpose Input/Output): Raspberry Pi のピンを使用してモーターを制御します。
    • PWM (Pulse Width Modulation): モーターの速度や角度を制御するための信号方式です。
    • Hブリッジ: DCモーターを双方向に動かすための回路です。

必要な機材とセットアップ

ハードウェア:

  • Raspberry Pi(どのモデルでも可、GPIO ピンがあるもの)
  • DCモーター(またはサーボモーター、ステッピングモーター)
  • モータードライバ(例: L298N、TB6612FNG)
  • 電源(モーター用に別途 5V または 12V 推奨)
  • ジャンパーワイヤー
  • ブレッドボード(プロトタイプ用)
  • 抵抗器やダイオード(必要に応じて)

ソフトウェア:

  • Raspberry Pi OS
  • Python(モーター制御用ライブラリ)

作り方

1. モータードライバの選定と接続

モータードライバは、Raspberry Pi の GPIO ピンからモーターに供給される信号を強化して動作させます。以下は、よく使用されるモータードライバの例です。

  • L298N モジュール: DCモーターを2つ制御可能で、Hブリッジ回路を搭載。速度と回転方向の制御が可能です。

L298N の基本接続例:

  • IN1, IN2: モーター1の制御ピン(Raspberry Pi GPIO に接続)
  • ENA: モーター1の速度制御用(PWM信号を送る)
  • VCC: モータードライバの電源入力
  • GND: グラウンド(Raspberry Pi と共有)
  • モーターの2本の端子を OUT1OUT2 に接続
2. Raspberry Pi との配線

Raspberry Pi の GPIO ピンを使って、モータードライバの入力ピンに接続します。次の例では GPIO 17 と GPIO 27 を制御信号として使用します。

  • GPIO 17 → IN1
  • GPIO 27 → IN2
  • GPIO 18 → ENA(PWM信号)
3. 基本的な Python コード

以下は、DCモーターを制御する基本コードです。

import RPi.GPIO as GPIO
import time

# GPIO ピンの設定
IN1 = 17
IN2 = 27
ENA = 18

# GPIO モードの設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
GPIO.setup(ENA, GPIO.OUT)

# PWMの設定
pwm = GPIO.PWM(ENA, 100)  # PWM周波数を100Hzに設定
pwm.start(0)  # 初期速度は0%

# モーターを前進させる関数
def motor_forward(speed):
    GPIO.output(IN1, GPIO.HIGH)
    GPIO.output(IN2, GPIO.LOW)
    pwm.ChangeDutyCycle(speed)

# モーターを後退させる関数
def motor_backward(speed):
    GPIO.output(IN1, GPIO.LOW)
    GPIO.output(IN2, GPIO.HIGH)
    pwm.ChangeDutyCycle(speed)

# モーターを停止させる関数
def motor_stop():
    GPIO.output(IN1, GPIO.LOW)
    GPIO.output(IN2, GPIO.LOW)
    pwm.ChangeDutyCycle(0)

try:
    while True:
        motor_forward(50)  # 50% の速度で前進
        time.sleep(3)      # 3秒間動作
        motor_backward(50) # 50% の速度で後退
        time.sleep(3)
        motor_stop()       # 停止
        time.sleep(2)
except KeyboardInterrupt:
    print("終了します")
    pwm.stop()
    GPIO.cleanup()
4. プロジェクトの拡張
  • センサーとの連携 障害物センサーや距離センサーを組み合わせて、自動で停止や方向転換を行います。
  • ステッピングモーターの制御 ステッピングモーターを使う場合、専用のライブラリ(例: RPi.GPIOgpiozero)を利用します。
  • 無線制御 Bluetooth や Wi-Fi モジュールを追加して、スマートフォンや PC からリモート操作を実現します。
5. トラブルシューティング
  • モーターが動かない場合、電源が十分に供給されているか確認してください。
  • GPIO ピンが正しく接続されているか、GPIO.cleanup() を使ってリセットしてみましょう。

応用例

  • ロボットカーの作成 Raspberry Pi を使った簡単なロボットカーを作り、障害物回避やライン追跡を実装。
  • ロボットアームの制御 サーボモーターを用いて、複数の関節を持つロボットアームを構築。
  • 自動化装置のプロトタイプ Raspberry Pi を制御装置として使い、工場の自動化装置を模倣。

Raspberry Pi を使ったモーター制御は、ロボット開発やプロトタイピングにおける基本スキルです。この知識を活かして、さまざまなプロジェクトに挑戦してみてください!

コメントを残す

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