使用树莓派同时控制两个伺服电机

时间:2018-06-28 18:15:56

标签: raspberry-pi synchronization raspberry-pi3 servo

我是Raspberry pi的新手。目前,我正在做一个项目,并且使用的是树莓派3 B型。我的伺服器是SG90微型伺服器。我想同时运行两个伺服器。并且以某种方式使它们同步。到目前为止,我已经设法使用11和13引脚运行两个伺服器。这是我当前的代码

import RPi.GPIO as GPIO
import time

l = 0
r = 0

lServoPin = 11
rServoPin = 13
GPIO.setmode(GPIO.BOARD)

GPIO.setup(lServoPin, GPIO.OUT)
GPIO.setup(rServoPin, GPIO.OUT)

lPwm = GPIO.PWM(lServoPin, 50)
rPwm = GPIO.PWM(rServoPin, 50)
lPwm.start(5)
rPwm.start(5)

while(l < 5):
    for i in range(45, 135):
        position = 1./18.*(i)+2
        lPwm.ChangeDutyCycle(position)
        time.sleep(0.005)

    for i in range(135, 45, -1):
        position = 1./18.*(i)+2
        lPwm.ChangeDutyCycle(position)
        time.sleep(0.005)
    l = l + 1
lPwm.stop()

while(r < 5):
    for i in range(135, 45, -1):
        position = 1./18.*(i)+2
        rPwm.ChangeDutyCycle(position)
        time.sleep(0.005)

    for i in range(45, 135):
        position = 1./18.*(i)+2
        rPwm.ChangeDutyCycle(position)
        time.sleep(0.005)
    r = r + 1
rPwm.stop()
GPIO.cleanup()

以上代码仅一个接一个地运行伺服。我在这里做错了什么? 有人可以建议我同时运行两个同步伺服器的方法。

非常感谢您!

1 个答案:

答案 0 :(得分:0)

您正在做的是,您正在运行2个循环。 1个用于左马达,1个用于右马达。如果要将它们一起运行,则需要将这两个电动机都放在一个回路中。

尝试以下代码:

x=0    
while(x<5):
    for i in range(45, 135):
        positionl = 1./18.*(i)+2
        positionr = 1./18.*(180-i)+2
        lPwm.ChangeDutyCycle(positionl)
        rPwm.ChangeDutyCycle(positionr)
        time.sleep(0.005)
    for i in range(135, 45, -1):
        positionl = 1./18.*(i)+2
        positionr = 1./18.*(180-i)+2
        lPwm.ChangeDutyCycle(positionl)
        rPwm.ChangeDutyCycle(positionr)
        time.sleep(0.005)
    x = x + 1

lPwm.stop()
rPwm.stop()
GPIO.cleanup()

希望这会有所帮助