この記事では、「Raspberry Pi 3 MODEL B」と「Motor Driver HAT」を使用して、2つのDCモータを別々に駆動させるアプリケーションをご紹介します。
1. アプリケーション概要
今回作成したアプリケーションの動作確認時の様子を撮影した動画です。
- [アプリケーション]
https://github.com/hotsmmr/RwRP/blob/master/notebooks/motor_driver_test.ipynb
本アプリケーションは、左右のDCモータをデューティ比:1[%]~100[%]の範囲で、±1[%]/500[msec]で段階的に変化させるものです。
モータの回転速度は、モータ用電源の容量によって変化します。この記事では9.0[V]の電源(単三乾電池6本)を使用しています。 - [ライブラリ]
https://github.com/hotsmmr/RwRP/blob/master/libs/PCA9685.py
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}以外を与えた場合、エラーメッセージが出力されます |
Motor Driver HATのUser Manualはこちら
2-5. Create Instance
このブロックでは、前ブロックで定義したクラス「MotorDriver」のインスタンスを生成します。
2-6. MotorDriver Functions Test
2-6-1. MotorRun
このブロックでは、クラス「MotorDriver」のメソッド「MotorRun」をテストします。
テスト内容は、概要で述べた通りです。
2-6-2. MotorStop
このブロックでは、クラス「MotorDriver」のメソッド「MotorStop」をテスト実行します。
テスト内容は、以下の通りです。
3. 記事内で使用している商品
4. 参考記事
4-1. Raspberry Piの環境整備
OSのインストール・初期セットアップ方法については、以下の記事をご覧ください。
この記事では、Raspberry Piの購入後に実施する以下の2点について、書いています。 1. OS(Raspbian)インストール 2. 初期セットアップ この記事は以下のような方向けのものになります。 Raspberr[…]
開発環境のセットアップ方法については、以下の記事をご覧ください。
この記事では、Raspberry Pi 3 MODEL Bを対象に、ロボット製作に適した開発環境のセットアップ手順を紹介します。 このセットアップ手順を実行することで、以下の記事で紹介したようなロボット用のプログラミングが可能になりま[…]
4-2. ロボット本体の組み立て
「Raspberry Pi」と「MotorDriver HAT」の配線方法、電源の確保方法や、ロボット本体の組み立て方法について知りたい方は、以下のページをご覧ください。
この記事では、ロボットを構成する3つの要素技術「知能・制御系」「センサー系」「駆動系」を全て搭載可能なロボット本体の組立方法について書いています。 3つの要素技術について、詳細を知りたい方は以下の記事をご覧ください。 [site[…]