振动伺服在Pi与蓝牙

时间:2016-03-27 10:55:19

标签: servo

作为一个新手,我正在测试我的Pi2B,附带Micro Servo SG90。我正在运行下面的代码。 它的工作原理很好,但它不能稳定地保持左右位置,有小的振动。我的Pi有一个蓝牙鼠标,当我使用它时,伺服开始大量震动。我该如何防止这种行为?

我使用外部电源供电用于伺服,但将其移除并由Pi供电伺服并不能解决问题。也没有为Pi使用另一个USB充电器。从Pi上移除蓝牙适配器不会阻止小的振动。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)

p = GPIO.PWM(17, 50)
p.start(6.55)

for i in range(1000):

    p.ChangeDutyCycle(6.55)
    time.sleep(3)
    p.ChangeDutyCycle(6.85)
    time.sleep(3)

p.stop()
GPIO.cleanup()

1 个答案:

答案 0 :(得分:0)

您需要使用硬件定时PWM进行伺服。

尝试使用PiGPIO

从以下位置复制和修改的示例: https://raspberrypiwonderland.wordpress.com/2014/02/19/servo-test/

import time
import pigpio

servos = 4 #GPIO number

pigpio.start()
#pulsewidth can only set between 500-2500
try:
    while True:
        pigpio.set_servo_pulsewidth(servos, 500) #0 degree
        print("Servo {} {} micro pulses".format(servos, 1000))
        time.sleep(1)
        pigpio.set_servo_pulsewidth(servos, 1500) #90 degree
        print("Servo {} {} micro pulses".format(servos, 1500))
        time.sleep(1)
        pigpio.set_servo_pulsewidth(servos, 2500) #180 degree
        print("Servo {} {} micro pulses".format(servos, 2000))
        time.sleep(1)
        pigpio.set_servo_pulsewidth(servos, 1500)
        print("Servo {} {} micro pulses".format(servos, 1500))
        time.sleep(1)

# switch all servos off
except KeyboardInterrupt:
    pigpio.set_servo_pulsewidth(servos, 0);

pigpio.stop()

这是该图书馆的指南 http://abyz.co.uk/rpi/pigpio/python.html#set_servo_pulsewidth

您可能需要根据您的设置移动伺服信号连接或更改GPIO引脚设置。