Raspberry Pi Python Code不会移动伺服

时间:2016-09-23 01:31:59

标签: python python-3.x raspberry-pi servo

所以我正在做一个涉及移动伺服电机的Raspberry Pi的小项目。在 Python 3 中的以下代码中,我首先以大约45度开始伺服。稍后在代码中,基于先前的角度确定不同的角度,并且改变占空比。

def main():   
    #Import functions
    import measure, move
    import time
    import RPi.GPIO as GPIO
    #Declare Variables
    Servo_pin = 35
    angle = 45
    freq = 50
    #Setup board
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(Servo_pin, GPIO.OUT)
    servo = GPIO.PWM(Servo_pin,freq)
    #Determine Duty Cycle
    dc = 1/18 * (angle) + 2
    print("Starting Duty Cycle: ",dc)
    #Start servo
    servo.start(dc)

    i = 1
    #Determine angle based on previous angle
    while True:
        if (i == 0):
            angle = 45
        elif (i == 1):
            angle = 90
        elif (i == 2):
            angle = 180
        elif (i > 2):
            angle = 45
            i = 0
        i = i+1
        #Change servo's position
        #Convert angle to Duty Cycle
        dc = 1/18 * (angle) + 2
        print("Setting Duty Cycle: ",dc)
        #Change position
        servo.ChangeDutyCycle(dc)
        #Give servo time to finish moving
        time.sleep(0.3)    
main()

我将伺服器连接到电池组(4节AA电池),但伺服电机不能使用此代码移动。现在,我承认我是初学者,这可能是非常简单的事情,如果情况确实如此,我会提前道歉。

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

需要有一个共同点。我正在使用两个独立的面包板,并没有连接共同点。一旦我连接了一个共同点,伺服就开始按照我的意愿运行。

感谢您提供编码帮助!

答案 1 :(得分:0)

根据https://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/ sourceforge上的文档,当表示PWM的实例变量超出范围时,PWM将停止。这两个函数都包含这一行:servo = GPIO.PWM(pin,freq),创建一个局部变量servo,一旦达到函数结束就会超出范围。一个解决方法是移动这些行:

import time
import RPi.GPIO as GPIO
# HERE you need to define which pin you are using
# I can't tell you how to do that
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)
freq = 10.0   # or some other value to get started
servo = GPIO.PWM(pin,freq)

到脚本的顶部,然后从各个函数中删除这些行。现在servo将是一个全局变量,在程序中的任何时候都不会超出范围。

可能还有其他问题。您是否有电压表或示波器来验证引脚是否按照您的意图进行操作?我一直都在处理这种应用程序,在连接所有硬件之前,知道这些难题的小部分是否真正有效是很有帮助的。没有什么能在第一次正常工作: - )。