モータ駆動アプリケーション作成(Raspberry Pi 3B + Motor Driver HAT)

この記事では、「Raspberry Pi 3 MODEL B」と「Motor Driver HAT」を使用して、2つのDCモータを別々に駆動させるアプリケーションをご紹介します。

1. アプリケーション概要


今回作成したアプリケーションの動作確認時の様子を撮影した動画です。

ライブラリは「Motor Driver HAT」を製作した「Waveshare」社が提供しているものをそのままダウンロードして使用します。該当ライブラリは再配布可能なライセンスのため、「MIT License」で再配布しています。
広告
「motor_driver_test.ipynb」の各ブロックの解説は次章以降で行います。

2. アプリケーション解説

2-1. import Libraries path setting


このブロックでは、「PCA9685.py」の格納ディレクトリをモジュール検索パスに追加しています。

このブロックを実行しない場合、次ブロックで「PCA9685」をインポートする際に「PCA9685.py」が見つからず参照エラーが発生します。

(「PCA9685.py」を「motor_driver_test.ipynb」と同じディレクトリに配置する場合には、このブロックは不要です。)

2-2. Import Libraries


このブロックでは、pythonの標準ライブラリ「IntEnum」「sleep」と「Waveshare」社の「PCA9685」をアプリケーションで使用できるようにインポートします。

各ライブラリの用途は以下の通りです。

  • 「IntEnum」: モータ種別、並進方向の定数定義時に使用
  • 「sleep」: モータのデューティ比を段階的に変更させる際のインターバルを実現するために使用
  • 「PCA9685」: Raspberry Piのインタフェース設定用の関数群を使用

2-3. Define Constant Values


このブロックでは、モータ種別、並進方向を分類できるように列挙型定数を定義します。

各列挙型定数の定義は以下の通りです。

  • 「MotorName」: 0/モータA、1/モータB
    (MotorDriver Hatの配線時のコネクタに印字されている「MA」「MB」が、それぞれ「モータA」「モータB」に対応します)
  • 「RotateDirection」: 0/前転、1/後転
    (MotorDriver Hatの配線時のコネクタに印字されている「MA1」から「MA2」に電流が流れる方向が、「前転」に対応します)
    (動作確認時にモータが逆回転する場合は、モータの配線を逆にする必要があります)

2-4. Define Classies


このブロックでは、ライブラリ「PCA9685」を 使用してモータを駆動させるクラス「MotorDriver」を定義します。
クラス内メソッドの概要は以下の通りです。

メソッド名 __init__
メソッド名(和名) コンストラクタ
処理概要 1. メンバ変数定義、初期化
2. ライブラリ「PCA9685」の初期設定
入力 なし
出力 なし(レジストリメモリ「0x40」の初期化
特記事項 コンストラクタはクラス「MotorDriver」のインスタンス生成時に呼び出されるメソッドです
メソッド名 MotorRun
メソッド名(和名) モータ駆動
処理概要 1. モータ駆動(モータ種別、並進方向、デューティ比はユーザが指定)
入力 1. motor: モータ種別(0/モータA、1/モータB)
2. direction: 並進方向( 0/前転、1/後転)
3. duty_ratio: デューティ比(値域[0,100])
出力 なし(レジストリ「0x40」への書き込み)
特記事項 1.モータ種別、並進方向に{0|1}以外を与えた場合、エラーメッセージが出力されます
2. デューティ比に値域[0,100]を与えた場合、エラーメッセージが出力されます
メソッド名 MotorStop
メソッド名(和名) モータ停止
処理概要 1. モータ停止(モータ種別は使用者が指定)
入力 1. motor: モータ種別(0/モータA、1/モータB)
出力 なし(レジストリ「0x40」への書き込み)
特記事項 モータ種別に{0|1}以外を与えた場合、エラーメッセージが出力されます
ライブラリ「PCA9685」内のメソッドの詳細が知りたい方は、Motor Driver HATのUser Manualをご覧ください。

Motor Driver HATのUser Manualはこちら

2-5. Create Instance


このブロックでは、前ブロックで定義したクラス「MotorDriver」のインスタンスを生成します。

2-6. MotorDriver Functions Test

2-6-1. MotorRun


このブロックでは、クラス「MotorDriver」のメソッド「MotorRun」をテストします。

テスト内容は、概要で述べた通りです。

テスト内容: 左右のDCモータをデューティ比:1[%]~100[%]の範囲で、±1[%]/500[msec]で段階的に変化させる

2-6-2. MotorStop


このブロックでは、クラス「MotorDriver」のメソッド「MotorStop」をテスト実行します。

テスト内容は、以下の通りです。

テスト内容: 左右のDCモータを停止させる
広告

3. 記事内で使用している商品


4. 参考記事

4-1. Raspberry Piの環境整備


OSのインストール・初期セットアップ方法については、以下の記事をご覧ください。

関連記事

この記事では、Raspberry Piの購入後に実施する以下の2点について、書いています。 1. OS(Raspbian)インストール 2. 初期セットアップ この記事は以下のような方向けのものになります。 Raspberr[…]

raspberry-pi-initial-set-up

開発環境のセットアップ方法については、以下の記事をご覧ください。

関連記事

この記事では、Raspberry Pi 3 MODEL Bを対象に、ロボット製作に適した開発環境のセットアップ手順を紹介します。 このセットアップ手順を実行することで、以下の記事で紹介したようなロボット用のプログラミングが可能になりま[…]

make-jupyter-notebook

4-2. ロボット本体の組み立て


「Raspberry Pi」と「MotorDriver HAT」の配線方法、電源の確保方法や、ロボット本体の組み立て方法について知りたい方は、以下のページをご覧ください。

関連記事

この記事では、ロボットを構成する3つの要素技術「知能・制御系」「センサー系」「駆動系」を全て搭載可能なロボット本体の組立方法について書いています。 3つの要素技術について、詳細を知りたい方は以下の記事をご覧ください。 [site[…]

car-robot-bird-eye-view
広告