如何用树莓控制Arduino的伺服电机

2024-09-24 06:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我使用的是一个伺服电机和两个电机。我的目标是,如果我执行脚本,它应该首先启动电机,然后将伺服电机旋转30度,等待3秒,在初始启动时旋转伺服电机,10秒后电机应该停止。 然而,我的电机启动时没有任何问题,但伺服电机试图使180° 两个电机同时停止 在这里您可以看到我的代码:

#!/usr/bin/env python
#import
from time import sleep
import RPi.GPIO as GPIO
from picamera import PiCamera

#Variables
in1 = 17
in2 = 27
in3 = 23
in4 = 24

enA = 22
enB = 25

spd = 15

servoMotor = 5


#Setup
GPIO.setmode(GPIO.BCM)

GPIO.setup(in1, GPIO.OUT)
GPIO.setup(in2, GPIO.OUT)
GPIO.setup(in3, GPIO.OUT)
GPIO.setup(in4, GPIO.OUT)
GPIO.setup(enA, GPIO.OUT)
GPIO.setup(enB, GPIO.OUT)
GPIO.setup(servoMotor, GPIO.OUT)

GPIO.setup(in1, GPIO.LOW)
GPIO.setup(in2, GPIO.LOW)
GPIO.setup(in3, GPIO.LOW)
GPIO.setup(in4, GPIO.LOW)



#Variable 
a = GPIO.PWM(enA,1000)
b = GPIO.PWM(enB,1000)
#PWM with 50Hz
servoP = GPIO.PWM(servoMotor, 50) 
#Starting
a.start(spd)
b.start(spd)
servoP.start(0)

#Code
GPIO.output(in1, GPIO.LOW)
GPIO.output(in2, GPIO.HIGH)
GPIO.output(in3, GPIO.HIGH)
GPIO.output(in4, GPIO.LOW)
sleep(10)
GPIO.output(in1, GPIO.LOW)
GPIO.output(in2, GPIO.LOW)
GPIO.output(in3, GPIO.LOW)
GPIO.output(in4, GPIO.LOW)
servoP.ChangeDutyCycle(15)
sleep(3)
servoP.ChangeDutyCycle(7.5)
servoP.stop()

Tags: importoutputgpiosetupsleepout电机low
1条回答
网友
1楼 · 发布于 2024-09-24 06:30:45

听起来您可能有一个连续旋转(CR)伺服。即使您不知道,所有伺服都有不同的PWN范围,所以您使用的伺服是一个细节,我需要给您一个更好的答案(很抱歉在回答中要求澄清,但我无法评论)。

尝试将占空比设置为最小3,最大11。这似乎是一个更好的范围为伺服您正在使用。根据电机的情况,你能告诉我它们连接到什么引脚吗

相关问题 更多 >