masimaro blog

menu

home > 電子工作:M5Stack > M5stackで2足歩行ロボットの作成④「micropythonでPCA9685を制御してロボットのモーションを作成」

M5stackで2足歩行ロボットの作成④「micropythonでPCA9685を制御してロボットのモーションを作成」


M5Stack
2021-07-23


今回は以前に作成したmicropythonでのPCA9685制御プログラムで2足歩行ロボットのモーションを作成したいと思います。

それでは初めに、ロボット(サーボモーター)、pca9685,M5stack,pcを繋いで、モーションの確認が出来るようにしておきます。

モーションテスト環境構築

テンプレのように準備ができれば、第2回で作成した「mtest.py」のプログラムにモーションのプログラムを追加していきます。

mtest.py

from machine import Pin,I2C
import time
import servo
import pca9685

i2c = I2C(0, scl=Pin(22), sda=Pin(21))
s = servo.Servos(i2c)

def set():
    s.position(0, 97)
    time.sleep_ms(1000)
    print('a')
    s.position(1, 90)
    time.sleep_ms(1000)
    print('b')
    s.position(2, 100)
    time.sleep_ms(1000)
    print('c')
    s.position(3, 90)
    time.sleep_ms(1000)
    print('c')
    
def fw():
    s.position(3, 70)
    s.position(1, 70)
    time.sleep_ms(500)
    s.position(0, 77)
    s.position(2, 80)
    time.sleep_ms(500)
    s.position(3, 90)
    s.position(1, 90)
    time.sleep_ms(500)
    s.position(3, 110)
    s.position(1, 110)
    time.sleep_ms(500)
    s.position(0,117)
    s.position(2, 120)
    time.sleep_ms(500)
    s.position(3, 90)
    s.position(1, 90)
    time.sleep_ms(500)
    
def bk():
    s.position(3, 110)
    s.position(1, 110)
    time.sleep_ms(500)
    s.position(0, 77)
    s.position(2, 80)
    time.sleep_ms(500)
    s.position(3, 90)
    s.position(1, 90)
    time.sleep_ms(500)
    s.position(3, 70)
    s.position(1, 70)
    time.sleep_ms(500)
    s.position(0,117)
    s.position(2, 120)
    time.sleep_ms(500)
    s.position(3, 90)
    s.position(1, 90)
    time.sleep_ms(500)
    
def lt():
    s.position(3, 40)
    s.position(1, 60)
    time.sleep_ms(500)
    s.position(0, 117)
    time.sleep_ms(500)
    s.position(3, 90)
    time.sleep_ms(500)
    s.position(1, 90)
    time.sleep_ms(500)
    s.position(0, 97)
    time.sleep_ms(500)
    
def rt():
    s.position(3, 120)
    s.position(1, 140)
    time.sleep_ms(500)
    s.position(2, 80)
    time.sleep_ms(500)
    s.position(1, 90)
    time.sleep_ms(500)
    s.position(3, 90)
    time.sleep_ms(500)
    s.position(2, 100)
    time.sleep_ms(500)
    

while(True):
    print('0/set 1/fw 2/lt 3/rt 4/bk')
    move = int(input('set No please:'))

    if move == 0:
        set()
    elif move == 1:
        fw()
    elif move == 2:
        lt()
    elif move == 3:
        rt()
    elif move == 4:
        bk()
    else:
        exit

関数にそれぞれ前進、後退、左旋回、右旋回、セットポジション、のモーションを作成しました。

第二引数の角度については、使用するサーボモーターで誤差が生じるため、微調整を繰り返しながらいい感じの数値に修正していきます。

このプログラムを実行すると、set No please: の表示の後でシェルに番号を入力出来るので、動作させたい箇所の関数の番号を入力すればそれぞれのモーションの確認が可能になっています。

実行すると、下のような感じになります。↓

次回はこのプログラムを、前回作成したWEBサーバーのプログラムに埋め込みたいと思います。

コメントを残す

お名前

コメント



コメント一覧

コメントはまだありません
MENU