PyFirmata舵机控制问题(Arduino与Python)

0 投票
1 回答
45 浏览
提问于 2025-04-13 21:06

我正在尝试用PyFirmata2控制我的舵机(使用Arduino Nano)。它有时候能正常工作,但有时候会在随机的角度停下来。为什么结果不一致,不能可靠呢?

使用延迟和不使用延迟的结果是一样的。

有没有人能帮我解决这个问题?或者直接换用PySerial可行吗?


PYTHON代码:

import pyfirmata2
from pyfirmata2 import Arduino
import time

board= Arduino("COM14")
iter8 = pyfirmata2.util.Iterator(board)
iter8.start()

servo_pinX = board.get_pin('d:9:s') #Servo-x to pin 9 
servo_pinY = board.get_pin('d:10:s') #Servo-y to pin 10         

def move_servoX(): 
    servo_pinX.write(servoPos[0])
    time.sleep(0.2)

def move_servoY():
    servo_pinY.write(servoPos[1])
    time.sleep(0.2)

servoPos = [18.0,42.0]
move_servoX()
move_servoY()

servoPos = [93.0,0.0]
move_servoX()
move_servoY()

servoPos = [89.0,100.0]
move_servoX()
move_servoY()

servoPos = [8.0,170.0]
move_servoX()
move_servoY()

servoPos = [3.0,83.0]
move_servoX()
move_servoY()

servoPos = [149.0,0.0]
move_servoX()
move_servoY()

servoPos = [90.0,90.0]
move_servoX()
move_servoY()
board.exit()

我希望舵机能对所有指令做出反应,但它只对前几个角度有效,然后就停了 :(

提前谢谢大家!!

1 个回答

0

我不知道你为什么要这样写你的代码,但我建议你可以试试下面的方法。

看看pyfirmata2库里的伺服电机示例,尽量按照那个示例来写。你可以在这里找到它:https://github.com/berndporr/pyFirmata2/blob/master/examples/servo.py

我觉得你调用board.digital[9].write(10)这行代码有点奇怪,尤其是因为那个示例的结果应该是这样的:

servo_5 = board.get_pin('d:5:s')

v = 90.0 # example value

# Set the duty cycle
servo_5.write(v)

撰写回答