You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
3.5 KiB
Python
180 lines
3.5 KiB
Python
import machine
|
|
import servo
|
|
import time
|
|
|
|
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
|
|
|
|
# Tower pro MG90s
|
|
servos = servo.Servos(i2c, address=0x40, freq=50, min_us=600, max_us=2400, degrees=180)
|
|
|
|
INIT_POSITIONS = [
|
|
(0, 40),
|
|
(1, 90),
|
|
(2, 130),
|
|
(3, 90),
|
|
(4, 60),
|
|
(5, 90),
|
|
(6, 130),
|
|
(7, 90)
|
|
]
|
|
|
|
|
|
def init_legs():
|
|
for i, a, in INIT_POSITIONS:
|
|
servos.position(i, a)
|
|
|
|
|
|
def tip_forward(pause=1):
|
|
servos.position(7, 150)
|
|
servos.position(1, 30)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def tip_back(pause=1):
|
|
servos.position(3, 150)
|
|
servos.position(5, 30)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def lean_left(pause=1):
|
|
servos.position(7, 150)
|
|
servos.position(5, 30)
|
|
servos.position(3, 60)
|
|
servos.position(1, 120)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def lean_left(pause=1):
|
|
servos.position(7, 150)
|
|
servos.position(5, 30)
|
|
servos.position(3, 60)
|
|
servos.position(1, 120)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def lean_right(pause=1):
|
|
servos.position(7, 60)
|
|
servos.position(5, 120)
|
|
servos.position(3, 150)
|
|
servos.position(1, 30)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def look_left(pause=1):
|
|
servos.position(0, 10)
|
|
servos.position(2, 100)
|
|
servos.position(4, 30)
|
|
servos.position(6, 100)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def look_right(pause=1):
|
|
servos.position(0, 70)
|
|
servos.position(2, 160)
|
|
servos.position(4, 90)
|
|
servos.position(6, 160)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
def all_move(pause=1):
|
|
moves = (
|
|
tip_forward, tip_back, lean_left, lean_right, look_left, look_right, fall, wave, turn_left, turn_right, turn_right,
|
|
turn_left)
|
|
for move in moves:
|
|
move(pause=pause)
|
|
time.sleep(0.5)
|
|
|
|
|
|
def turn_left(pause=None):
|
|
servos.position(0, 10)
|
|
servos.position(2, 100)
|
|
servos.position(4, 30)
|
|
servos.position(6, 100)
|
|
time.sleep(0.1)
|
|
servos.position(7, 120)
|
|
servos.position(6, 160)
|
|
time.sleep(0.1)
|
|
servos.position(7, 90)
|
|
time.sleep(0.1)
|
|
servos.position(3, 120)
|
|
servos.position(2, 160)
|
|
time.sleep(0.1)
|
|
servos.position(3, 90)
|
|
time.sleep(0.1)
|
|
servos.position(5, 30)
|
|
servos.position(4, 90)
|
|
time.sleep(0.1)
|
|
servos.position(5, 90)
|
|
time.sleep(0.1)
|
|
servos.position(1, 30)
|
|
servos.position(0, 90)
|
|
time.sleep(0.1)
|
|
servos.position(1, 90)
|
|
time.sleep(0.1)
|
|
init_legs()
|
|
|
|
|
|
def turn_right(pause=None):
|
|
servos.position(0, 70)
|
|
servos.position(2, 160)
|
|
servos.position(4, 90)
|
|
servos.position(6, 160)
|
|
time.sleep(0.1)
|
|
# front left
|
|
servos.position(1, 30)
|
|
servos.position(0, 10)
|
|
time.sleep(0.1)
|
|
servos.position(1, 90)
|
|
time.sleep(0.1)
|
|
# back right
|
|
servos.position(5, 30)
|
|
servos.position(4, 30)
|
|
time.sleep(0.1)
|
|
servos.position(5, 90)
|
|
time.sleep(0.1)
|
|
# front right
|
|
servos.position(7, 120)
|
|
servos.position(6, 60)
|
|
time.sleep(0.1)
|
|
servos.position(7, 90)
|
|
time.sleep(0.1)
|
|
# back left
|
|
servos.position(3, 120)
|
|
servos.position(2, 60)
|
|
time.sleep(0.1)
|
|
servos.position(3, 90)
|
|
time.sleep(0.1)
|
|
|
|
init_legs()
|
|
|
|
|
|
def wave(pause=None, times=3):
|
|
counter = times
|
|
while counter:
|
|
servos.position(7, 180)
|
|
time.sleep(0.1)
|
|
servos.position(7, 160)
|
|
time.sleep(0.1)
|
|
counter -= 1
|
|
servos.position(7, 90)
|
|
init_legs()
|
|
|
|
|
|
def fall(pause=1):
|
|
servos.position(3, 160)
|
|
servos.position(1, 30)
|
|
servos.position(5, 30)
|
|
servos.position(7, 160)
|
|
time.sleep(pause)
|
|
init_legs()
|
|
|
|
|
|
init_legs()
|