M5stackで2足歩行ロボットの作成②「micropythonでPCA9685を制御してサーボモーターを動かしてみる」
2021-07-23
今回は早速、micropythonでサーボモーターを制御するプログラムを作成します。
サーボモーターの制御には「pca9685」のサーボドライバを使うので、正確に言えばこれを制御するプログラムになります。
raspberrypiのwebiopiにはpca9685のpythonライブラリがありましたが、M5stackにもmicropythonでpca9685を制御するライブラリがありましたので、これを使う事にします。
それでは、まずpca9685のライブラリをダウンロードします。
micropython-adafruit-pca9685
git-hubのリポジトリから下記のモジュールをDLし、USB経由でM5sackのフラッシュに保存します。
motor.py, pca9685.py, servo.py, setup.py, stepper.py
リンクはこちら↓
https://github.com/adafruit/micropython-adafruit-pca9685
ターミナルが使えるなら、git cloneでDLし、その後M5stackに移動させます。
ターミナルが使えないならサイトから直でファイルをDLして、thonny IDEでM5stackへ転送する事も可能です。
これでpca9685のライブラリが使えるようになります。
続いて、pc,M5stack,pca9685,サーボモーター,電源,のハードウェアの接続をしておきます。
ハードウェアの接続
図のように接続し、PCとM5stackをUSBケーブルでつないでおきます。
モーター用の電源は、たしか4V程度でも動作したはずですので、乾電池でもOKです。
ちなみに、ここでは過去にラズパイで作成したロボットがあるので、それを使ってテストします。
最後に制御プログラムを作成します。
mtest.py
M5stackは、microphthonのファームウェアが入っていれば起動後にまず「main.py」のプログラムを読みに行きます。
今回は、最終的にはmain.pyに「モーター制御」や「WEBサーバー」など、全てまとめて1つのファイルにする予定ですが、とりあえずテストとしてPC上から動作確認をしてみます。
以下のプログラムをPC上に作成し、実行してみます。
from machine import Pin, I2C import time import pca9685 import servo i2c = I2C(0, scl=Pin(22), sda=Pin(21)) sev = servo.Servos(i2c) while True: sev.position(0, 90) time.sleep_ms(1000) sev.position(0, 60) time.sleep_ms(1000) sev.position(0, 120) time.sleep_ms(1000)
必要なライブラリをインポートします。
i2cのインスタンス化は、引数に0(I2Cペリフェラルを識別),22(SCLに使用するピンを指定するピンオブジェクト),21(SDAに使用するピンを指定するピンオブジェクト)を指定しています。
servoのインスタンス化の引数にi2cを指定すれば、サーボモーターを動作させる下準備ができます。
インスタンスメソッドのpositionは、第一引数にサーボモーターのチャンネル、第二引数に角度を指定しています。
(サーボモーターのチャンネルは、pca9685に接続したモーターのチャンネルを指定すれば良いです。)
whileでループさせているので、実行すれば下のようになります。
次回はM5stackのWIFI APとWEBサーバーの設定を作りたいと思います。