制作坊micro:bit人形机器人 专区
micro:bit人形机器人

故事背景
物品清单
名称 | 数量 |
---|---|
micro:bit | 1 |
9g舵机 | 4 |
pcb板 | 2 |
7号电池 | 2 |

制作步骤
经过几次步行测试后,我决定不再给它一个巨大的脑袋。我尝试了许多不同的头(包括一个工艺品商店的几个亚克力球,一个娃娃的头和一个灯泡),最后在纸板轮廓上定了下来。

接下来是micro:bit的python代码
import microbit
class Servo:
def __init__(self, pin, trim=0):
self.pin = pin
self.trim = trim
self.position = 90
self.set_period()
def set_period(self):
self.pin.set_analog_period(20)
self.write(self.position)
microbit.sleep(80)
self.pin.set_analog_period(20)
self.write(self.position)
microbit.sleep(80)
self.pin.write_analog(0)
def write(self, degrees):
self.pin.write_analog(int(25 + 100 * degrees / 180 + self.trim))
self.position = degrees
def move(self, degrees, delay=5):
if degrees > self.position:
step = 1
else:
step = -1
for position in range(self.position, degrees, step):
self.write(position)
microbit.sleep(delay)
class Robot:
NORMAL_FACE = microbit.Image(
"42024\n"
"90009\n"
"00000\n"
"61016\n"
"27972\n"
)
RIGHT_FACE = microbit.Image(
"24024\n"
"09009\n"
"00000\n"
"81001\n"
"28952\n"
)
LEFT_FACE = microbit.Image(
"42042\n"
"90090\n"
"00000\n"
"10018\n"
"25983\n"
)
def __init__(self):
self.feet_servo = Servo(microbit.pin2, -2)
self.left_servo = Servo(microbit.pin1, 4)
self.right_servo = Servo(microbit.pin0, 4)
microbit.display.show(self.NORMAL_FACE)
def right_step(self):
microbit.display.show(self.RIGHT_FACE)
self.feet_servo.move(120)
self.left_servo.move(60)
self.right_servo.move(60)
self.feet_servo.move(90)
def left_step(self):
microbit.display.show(self.LEFT_FACE)
self.feet_servo.move(60)
self.right_servo.move(120)
self.left_servo.move(120)
self.feet_servo.move(90)
def right_half_step(self):
microbit.display.show(self.NOLRMAL_FACE)
self.feet_servo.move(120)
self.left_servo.move(90)
self.right_servo.move(90)
self.feet_servo.move(90)
def left_half_step(self):
microbit.display.show(self.NORMAL_FACE)
self.feet_servo.move(60)
self.right_servo.move(90)
self.left_servo.move(90)
self.feet_servo.move(90)
def walk(self, steps=1):
step = 0
for step in range(steps - 1):
if step % 2:
self.left_step()
else:
self.right_step()
if step % 2:
self.right_half_step()
else:
self.left_half_step()
robot = Robot()
robot.walk(8)
作者:eshipu
来源:https://hackaday.io/project/19936/logs
