【问题标题】:How to control Servo-Motor from Arduino with Raspberry如何使用 Raspberry 从 Arduino 控制伺服电机
【发布时间】:2020-01-21 07:24:23
【问题描述】:

目前我正在使用一个伺服电机和两个电机。我的目标是,如果我执行脚本,它应该首先启动电机,然后将伺服电机旋转 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()

【问题讨论】:

标签: python raspberry-pi


【解决方案1】:

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

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

【讨论】:

  • 我想我应该有一个 TowerPro MicroServo 99 SG90
  • @DizzySailor 检查您的变速箱是否被剥离或更改,因为我能找到的所有消息来源都说 TowerPro MicroServo 99 SG90 是 180 度,而不是 CR 伺服。有趣的是,该伺服系统上的变速箱很容易发生故障。
  • 对不起,我再次控制了我的舵机,它只能做 180°,而不是 360。
猜你喜欢
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多