使用raspberry pi同时控制两个伺服电机
Control two servo motors simultaneously using raspberry pi
我是 Raspberry pi 的新手。目前我正在做一个项目,我正在使用 raspberry pi 3 model 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()
以上代码仅运行舵机一个接一个。我在这里做错了什么?
有人可以建议我同时 运行 两个同步伺服系统的方法。
非常感谢您!!!
您正在做的是 运行宁 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()
希望对您有所帮助
我是 Raspberry pi 的新手。目前我正在做一个项目,我正在使用 raspberry pi 3 model 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()
以上代码仅运行舵机一个接一个。我在这里做错了什么? 有人可以建议我同时 运行 两个同步伺服系统的方法。
非常感谢您!!!
您正在做的是 运行宁 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()
希望对您有所帮助