前回、micropythonでWIFI APとWEBサーバーを立てるプログラムを作成しました。↓
今回は以前に作成したmicropythonでのPCA9685制御プログラムで2足歩行ロボットのモーションを作成したいと思います。
ロボットについては過去記事で作成したものを使用します。↓
それでは初めに、ロボット(サーボモーター)、pca9685,M5stack,pcを繋いで、モーションの確認が出来るようにしておきます。
モーションテスト環境構築
写真のように準備ができれば、第2回で作成した「mtest.py」のプログラムにモーションのプログラムを追加していきます。
mtest.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
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サーバーのプログラムに埋め込みたいと思います。