microbit舵机驱动(简化,优化,中文说明)

micro:bit编程、教学、展示
STEM
回复
头像
shaoziyang
帖子: 3917
注册时间: 2019年 10月 21日 13:48

microbit舵机驱动(简化,优化,中文说明)

#1

帖子 shaoziyang »

原帖作者:chpczx 发表于 2019-7-7

Code: Select all

from microbit import *

"""
一个控制舵机的简单类。
参数:
    pin (pin0 .. pin3):连接servo的引脚。
    min_us(int):servo支持的最小信号长度。
    max_us(int):servo支持的最大信号长度。
    angle(int) :最小和最大位置之间的角度。
"""

class Servo:
    def __init__(self, pin, min_us=600, max_us=2400, angle=180):
        self.pin = pin
        self.min_us = min_us
        self.max_us = max_us
        self.us = 0

        self.angle = angle
        # 将输出的PWM信号的周期设置为20毫秒
        self.pin.set_analog_period(20)

    # 将微秒数转成模拟量值 (模拟量值1024对应20000 us即20毫秒)
    def write_us(self, us):
        us = min(self.max_us, max(self.min_us, us))
        duty = round(us * 1024  // 20000)
        self.pin.write_analog(duty)

    # 将角度转成微秒数 (min_us对应0度,max_us对应180度)
    def write_angle(self, degrees=0):
        degrees = degrees % 360
        total_range = self.max_us - self.min_us
        us = self.min_us + total_range * degrees // self.angle
        self.write_us(us)

if __name__ == "__main__":
    # 说明:如果你的舵机不能转到指定的角度,可以将min_us和max_us值微调
    # 我在这里,将min_us=600调整到500, 将max_us=2400调整到2450
    # 注意:只能微调,不然舵机损坏。
    sv1 = Servo(pin2, 500, 2450, 180)
    for i in range(6):
        sv1.write_angle(180)
        sleep(1000)
        sv1.write_angle(0)
        sleep(1000)

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章