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

micro:bit人形机器人

binglingdang2019-01-30 2399人围观

故事背景

这是一款由Micro:bit控制的来自Hitchhiker银河电影指南的Marvin微型模型的人形机器人。

物品清单

名称 数量
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

8 +1

评论