Raspberry pi 利用raspberry pi同时控制两台伺服电机

Raspberry pi 利用raspberry pi同时控制两台伺服电机,raspberry-pi,synchronization,raspberry-pi3,servo,Raspberry Pi,Synchronization,Raspberry Pi3,Servo,我是新来的树莓皮。目前我正在做一个项目,我使用树莓皮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

我是新来的树莓皮。目前我正在做一个项目,我使用树莓皮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()
将RPi.GPIO导入为GPIO
导入时间
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)
而(l<5):
对于范围(45135)内的i:
位置=1./18.*(i)+2
lPwm.ChangeDutyCycle(位置)
睡眠时间(0.005)
对于范围(135,45,-1)内的i:
位置=1./18.*(i)+2
lPwm.ChangeDutyCycle(位置)
睡眠时间(0.005)
l=l+1
lPwm.stop()
而(r<5):
对于范围(135,45,-1)内的i:
位置=1./18.*(i)+2
rPwm.ChangeDutyCycle(位置)
睡眠时间(0.005)
对于范围(45135)内的i:
位置=1./18.*(i)+2
rPwm.ChangeDutyCycle(位置)
睡眠时间(0.005)
r=r+1
rPwm.stop()
GPIO.cleanup()
上面的代码只能一个接一个地运行伺服。我在这里做错了什么?? 有人能给我建议一种同时运行两个同步伺服的方法吗


提前非常感谢

您正在做的是,您正在运行两个循环。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()
x=0
while(x