多舵机控制,使用 Python 和云台机制构造进行 Raspberry Pi 相机定位。
所需材料
在本教程中,我们将探索如何在 Raspberry Pi 上使用 Python 控制多个舵机。我们的目标是使用云台机制来定位相机(PiCam)。
如下最终结果:
PWM 工作原理
Raspberry Pi 没有模拟输出,但我们可以使用 PWM(脉宽调制)方法模拟这一点。 我们要做的是生成一个具有固定频率的数字信号,我们将改变脉冲序列宽度,将“转换”为“平均”输出电压电平,如下所示:
我们可以使用这个“平均”电压电平来控制 LED 亮度,例如:
请注意,这里重要的不是频率本身,而是“占空比”,即脉冲“高”的时间除以波周期之间的关系。 例如,假设我们将在我们的 Raspberry Pi GPIO 之一上生成 50Hz 的脉冲频率。 周期 § 将是频率或 20 毫秒 (1/f) 的倒数。 如果我们希望我们的 LED 具有“半”亮,我们必须有 50% 的占空比,这意味着“脉冲”将“高”持续 10 毫秒。
这个原则对我们来说非常重要,控制我们的舵机位置,一旦“占空比”将定义舵机位置,如下所示:
硬件安装
舵机将连接到外部 5V 电源,将它们的数据引脚(在我的情况下,它们的黄色接线)连接到 Raspberry Pi GPIO,如下所示:
- GPIO 17 ==> 倾斜伺服
- GPIO 27 ==> 平移伺服
不要忘记将 GND 连接在一起 ==> Raspberry Pi - 伺服 - 外部电源。
您可以选择在 Raspberry Pi GPIO 和服务器数据输入引脚之间连接一个 1K 欧姆的电阻器。如果出现伺服问题,这将保护您的 RPi。
伺服校准
首先要做的是确认伺服系统的主要特性。我使用的是 Power Pro SG90。
从它的数据表中,我们可以考虑:
- 范围:
- 电源:4.8V(外部5VDC作为USB电源工作正常)
- 工作频率:50Hz(周期:20ms)
- 脉冲宽度:从1ms到2ms
理论上,伺服将在其
- 当 1ms 的脉冲施加到其数据终端时的初始位置(0 度)
- 将 1.5 ms 的脉冲施加到其数据终端时的中立位置(90 度)
- 当 2 ms 的脉冲施加到其数据终端时的最终位置(180 度)
Python 控制脚本
云台控制机制
云台机械结构
云台电气组装
源代码