伺服电机图
组件和用品
| × | 1 | ||||
| × | 3 | ||||
| × | 36 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 36 | ||||
| × | 5 |
必要的工具和机器
| ||||
|
应用和在线服务
|
关于这个项目
下面的视频展示了 36 个伺服电机创造电子艺术品的过程。一个 Arduino Uno 和三个 16 通道 PWM 伺服控制器在幕后工作。最初的灵感是我在现代艺术博物馆看到的带有 450 个伺服器的更大版本。但即使这个只有 36 个舵机的小版本也提供了一些有趣的效果。
有一个我没有在视频中展示的可选功能,但可以添加它以使显示具有交互性。它完全是可选的,如果没有它,软件也能正常工作。对于此选项,五个超声波距离传感器安装在显示器上边缘的背面。当您将手放在中心传感器上方时,Uno 会进入交互模式,当您在距离传感器上方移动手时,所有伺服系统都会尝试跟随您的手。当您将手移开几秒钟时,程序将返回其显示画面。同样,您可以根据需要添加此选项。如果你不这样做,没有它,软件也能正常工作。
硬件
如您所见,这个项目是建立在一块 24" x 48" 的钉板上。宽度被削减到 32 英寸。舵机相隔 4 英寸安装,并用热胶固定在挂板的背面。冰棒棒,切成 3 1/4 英寸,再次使用热胶安装在伺服系统的轴上。
SG90 伺服电机是该项目中唯一昂贵的项目。您可以在亚马逊上以 20 美元的价格购买一套 8 个。即便如此,您仍需要在伺服系统上投资 100 美元。 SG90 应该都是 180º 舵机,但大多数都没有做到。有一些远远不够,应该丢弃。如果你买 5 套 8 件,你应该可以找到 36 件至少 160º 旅行的商品。
伺服器需要设置到它们的最小位置(PWM 150 的位置),并且从正面看,在这个最小位置中安装的冰棒棒水平和向右。我提供了一个小程序,你可以用它来确保舵机处于这个最小位置:SetServosToMinimum。
上图显示了背面布局。三个 PWM 控制器安装在舵机的左侧。 30 瓦 5 伏电源在最右侧。 Arduino 通过 USB 电源适配器单独供电。我这样做只是为了拔掉 USB 电缆,然后通过 USB 延长线将其插入我的计算机以更改程序。看起来有点奇怪,但我觉得很方便。
您还可以看到安装在显示屏顶部的可选超声波距离传感器。使用热胶和额外的冰棒棍来安装它们。您在 Uno 下方看到的小型原型板只是为了方便为所有超声波传感器供电和接地。
软件
我正在使用 Adafruit 的 PWM 伺服驱动程序库来处理 16 通道伺服控制器,因此您需要从 Adafruit 获取它并安装在 Arduino 库中。我的软件可以在有或没有可选超声波传感器的情况下按原样使用。它在一个持续三分钟多一点的节目中呈现出各种效果,然后再重复。如果安装了可选传感器,只要将手放在中央传感器上就会进入交互模式。
软件里有很多东西。我不会试图在这里解释整个事情,但我会给你一些关于它是如何工作的信息。我有两张桌子。 curPos 表存储每个舵机的当前位置除以 3。 tarPos 表存储每个舵机的期望位置除以 3。它们被 3 除有两个原因。首先,它允许将它们存储在一个字节中,其次,我总是以 3 步为增量移动舵机。
Uno 最初并不知道每个舵机的位置,因此设置例程将所有舵机设置为垂直位置,并设置所有 curPos 和 tarPos 变量以匹配该垂直位置。然后,我们可以通过更改 tarPos 中的所需位置,将舵机从那里移动到其他位置。
名为 goToTargets() 的子程序是伺服器移动的主要方式。我们通过在 tarPos 设置目标来控制舵机的去向,然后我们可以使用 goToTargets 例程控制它们去那里的速度。它有两种控制速度的方法。它以 15 步为增量将伺服系统移向目标,其中输入到子程序的次数为您提供 15 步的倍数。另一个输入是 mydelay,它只是为 goToTargets 的每次调用添加一个以毫秒为单位的延迟。
还有很多其他的东西,但基本上其他的一切都只是呈现的各种效果的各种设置和实现。
可选的交互功能由名为 trackRoutine 的子程序处理。当 goToTarget 例程在中心超声波传感器上方的某处看到物体(您的手)时调用它。当您在传感器上移动时,它会尝试使所有伺服系统跟随您的手的运动。当它在几秒钟内没有感应到手时,它返回并恢复常规程序。
代码
- 用于 Arduino Uno 的 ServosArt 软件
Arduino Uno的ServosArt软件Arduino
无预览(仅限下载)。
示意图
展示了 Uno 和舵机如何通过三个 16 通道控制器连接 将 5 个超声波距离传感器连接到 Uno,使伺服系统能够跟踪手部运动。制造工艺