与覆盆子PI和GPIOzero的基本伺服用途

4

伺服电机是使用一组齿轮来产生旋转运动的电动机。无线电控制的车辆和动画项目经常使用它们来生成运动。它们的大小和能力不同,但小型伺服功能很便宜,以及将流量引入覆盆子PI项目的绝佳方式。

这篇文章将解释如何以最简单的硬件中最简单的方式将小伺服连接到PI。

部分

塔9G伺服你会需要 :

  • 覆盆子pi.
  • SD卡与最新的Raspbian操作系统
  • 小伺服(Towerpro 9g或同等)

伺服彩色代码

伺服器通常有三根电线。两个是因为功率,一个是数据信号。这些电线的着色在制造商之间变化,但通常遵循以下方案之一:

伺服彩色代码表

矿井遵循红色/橙色/棕色方案。

servos和pwm.

那里有很多资源,解释了伺服选择。重要的位是它们采用PWM(脉冲宽度调制)数据信号。这是一系列高低脉冲,其中每个脉冲之间的定时确定旋转位置。

伺服PWM示例波形

在此基本示例中,将使用软件生成PWM信号。这是一个’T作为适当的硬件生成的PWM信号,但足以让基础提供足够的。

硬件设置

最简单的配置是将伺服直接连接到PI。这适用于aren的小伺服’T期望执行任何苛刻的任务。电源将通过pi绘制’S 5V引脚并受到某些限制。如果您的伺服吸取过多的电流,则可能会影响USB设备或PI本身的操作。

可以使用任何GPIO引脚

伺服电线颜色覆盆子PI GPIO评论
电力(+)红色的PIN 2(5V)
信号/数据白色/黄色/橙色/蓝色销11(GPIO17)
地面黑褐色Pin 9可以使用任何接地销

任何pi’可以使用S接地引脚。请参考 覆盆子PI GPIO标题图像 找到额外的接地销。

覆盆子PI基本伺服示例

在这个例子中,我使用了销9(黑色)进行地面。电源线(红色)连接到引脚2.信号线(橙色)可以连接到任何GPIO引脚,但是我更喜欢使用引脚11(GPIO17),因为它旁边是引脚9,并且它使接线更容易。如果使用不同的GPIO,请务必使用正确的数字更新示例脚本。

示例Python伺服脚本#1

一旦连接了最简单的方法,可以在Python脚本中使用GPIOzero库。它是默认安装在最新的Raspbian图像中。

您可以使用此Python脚本:

from gpiozero import Servo
from time import sleep

myGPIO=17

servo = Servo(myGPIO)

while True:
    servo.mid()
    print("mid")
    sleep(0.5)
    servo.min()
    print("min")
    sleep(1)
    servo.mid()
    print("mid")
    sleep(0.5)
    servo.max()
    print("max")
    sleep(1)

将上面的代码复制到名为的新文本文件中“servo1.py”或者从我的Bitbucket存储库直接下载到您的PI:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/servo1.py

我建议使用WGET而不是复制和粘贴所以你不’失去了正确的缩进。

要运行脚本,请使用以下命令:

Python servo1.py

现在,伺服应该在其最小,中间和最大位置之间移动,延迟延迟。

示例Python伺服脚本#2– Calibrating Range

首先script makes use of the Gpiozero defaults. It assumes the servo uses a signal frame width of 20ms. The pulse width for the minimum and maximum rotation is assumed to be 1ms and 2ms. This information should be available in the servo specification and I would avoid sellers that don’t provide this data.

我发现,使用默认设置我的伺服仅移动+ 45 / -45度。我改变了脉冲宽度参数,以便在任一方向上获得完整的90度旋转。下面的脚本演示了:

from gpiozero import Servo
from time import sleep

myGPIO=17

myCorrection=0.45
maxPW=(2.0+myCorrection)/1000
minPW=(1.0-myCorrection)/1000

servo = Servo(myGPIO,min_pulse_width=minPW,max_pulse_width=maxPW)

while True:
    servo.mid()
    print("mid")
    sleep(0.5)
    servo.min()
    print("min")
    sleep(1)
    servo.mid()
    print("mid")
    sleep(0.5)
    servo.max()
    print("max")
    sleep(1)

将上面的代码复制到名为的新文本文件中“servo2.py”或者从我的Bitbucket存储库直接下载到您的PI:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/servo2.py

我建议使用WGET而不是复制和粘贴所以你不’失去了正确的缩进。

要运行脚本,请使用以下命令:

Python servo2.py

现在,伺服应该在其最小,中间和最大位置之间移动,延迟延迟。

在该示例中,最小脉冲宽度从默认值1减小0.45至0.55ms。最大脉冲宽度从默认值2增加0.45至2.45ms。这使我的伺服在两个方向上都有90度旋转。价值“0.55” and “2.45”除以1000将它们转换为毫秒。

什么都没有神奇“0.45”。这只是对我的伺服工作最适合的更正。

要解决这些数字,我始于:

笨拙=0
maxPW=(2.0+myCorrection)/1000
minPW=(1.0-myCorrection)/1000

增加/减少了0.05的增量校正数。这让我找到了在伺服响起之前可以制作的最大变化。

“myCorrection”必须是0到1之间的数字,但不太可能需要是1!

示例伺服脚本#3– Precise Positioning

一旦您’确定最小和最大脉冲宽度值,可以使用“value”功能将伺服臂定位在其限制之间。

设置“value”参数到-1和+1之间的数字移动其最小和最大位置之间的臂。例子包括:

# Minimum position
servo.value=-1

# Mid-point
servo.value=0

# Maximum position
servo.value=1

# Position between mid-point and maximum
servo.value=0.5

下面的脚本会生成一系列“value”数字扫描其最大和最小位置之间的伺服:

from gpiozero import Servo
from time import sleep

myGPIO=17

myCorrection=0
maxPW=(2.0+myCorrection)/1000
minPW=(1.0-myCorrection)/1000

servo = Servo(myGPIO,min_pulse_width=minPW,max_pulse_width=maxPW)

while True:

  print("Set value range -1.0 to +1.0")
  for value in range(0,21):
    value2=(float(value)-10)/10
    servo.value=value2
    print(value2)
    sleep(0.5)

  print("Set value range +1.0 to -1.0")
  for value in range(20,-1,-1):
    value2=(float(value)-10)/10
    servo.value=value2
    print(value2)
    sleep(0.5)

将上面的代码复制到名为的新文本文件中“servo3.py”或者从我的Bitbucket存储库直接下载到您的PI:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/servo3.py

我建议使用WGET而不是复制和粘贴所以你不’失去了正确的缩进。

要运行脚本,请使用以下命令:

Python servo3.py

现在,伺服应该在其最小,中间和最大位置之间移动,延迟延迟。

首先“For”循环在0到20之间生成一组整数。值10从其中减10,以提供-10到10。然后最终将值除以10,以提供-1到+1的范围。原始值集包含20个整数,序列中仍有20个步骤。增加40的步数,您将用40替换20并减去20个而不是10。

第二“For”循环执行相同的操作,但从+1返回到-1的序列。

下一步

一旦您有这些脚本工作,您就可以修改它们以使手臂移动。例如,您可以随机生成-​​1和+1之间的数字,以将ARM位于其最大值和最小限制之间。或者或许基于传感器或操纵杆的输入移动它?只要您可以将传感器的值转换为-1到+1的范围,您可以使用伺服指示结果。

看看 GPIO.zero的官方文件 有关额外的技术信息。

以下是使用这三个示例脚本的伺服移动的短视频:


哪里买小伺服

这些伺服可从大量出口提供,包括 [亚马逊][eBay].

您可以阅读更多关于这些设备的更多信息 维基百科页面.

分享。

4评论

  1. 我想知道,有多少伺服’可以通过这种方式将这种方式连接到单个覆盆子pi w,以及​​如何添加专用的外部电源来驱动一些更大的伺服伺服电源?

    • It’很难预测你可以添加多少伺服电源,因为它取决于伺服,它会在停止时绘制多少。外部力量相当容易,我’我要做另一个博客的帖子。

  2. 您可以使用带有+和的外部电池供电伺服电源–一只手连接到伺服
    在另一个 - 伺服信号到pi
    照顾伺服的最大电压(数码伺服电压)
    问候

发表评论

本网站使用AkisMet减少垃圾邮件。 了解如何处理评论数据.