半正方形三角形动态艺术

老小孩
转载
发布时间: 2025-06-14 15:33:01 | 阅读数 0收藏数 0评论数 0
封面
我的项目是,通过 HST 元件的 90 度旋转步骤来显示不同的模型。本质上,该机构由微控制器驱动的步进电机组成。让我们看看如何...

准备工作:

材料:

  1. 500mmx500mm的MDF板,厚度8mm,1块;
  2. 3D 打印部件:电机支架 16 件、微动开关支架 16 件、HST 模型支架 2x8 件、一堆线夹、几个模板 - 所有文件都在Tinkercad上;
  3. Arduino MEGA 2560 mini型号 1 件;
  4. 数字I/O扩展器MCP23017模块4个;
  5. 步进电机 28BYJ-48 5V + 驱动器 ULN2003 套件16 件;
  6. 微动开关10T85型16个;
  7. 微动开关按钮1个;
  8. 5.5x2.5mm DC 母插头带线1 个;
  9. 5V/3A 电源,带 5.5x2.5mm DC 公插头 1 个;
  10. 自粘喷墨哑光相纸至少8页;
  11. 不同尺寸的木螺钉;
  12. M2 螺钉(长度不同:开关为 10 毫米,HST 支架为 14 毫米和 20 毫米)、垫圈和螺母;
1

一些设计考虑

为了实现我的目标,我需要一些电机。我可以使用伺服电机或步进电机。

伺服电机的优点:

  1. 它们相对便宜;
  2. 他们的动力很简单;
  3. 它们具有非常好的精度(但这取决于电子部件的质量);
  4. 它们在高速时具有高扭矩;

步进电机的优点:

  1. 便宜的;
  2. 驾驶相对简单;
  3. 精度好(取决于转速,转速越高精度越低,可能出现失步);低速时扭矩大;

最后,我选择了步进电机。为什么?因为:

  1. 我不需要高速,相反,当模型逐渐变化时,较低的速度下的视觉效果更强,就好像它们相互滑动一样(我做了一些计算机模拟,这就是我知道的原因:);
  2. 由于速度低,所以定位精度很好、扭矩大;
  3. 步进电机和驱动器套件非常便宜
  4. 270 度旋转可以很容易地完成,相比之下,270 度旋转的伺服电机更难找到,而且比 180 度旋转的伺服电机更贵(例如众所周知的 SG90);
  5. 停止时步进电机根本不动,执行器在固定位置附近有轻微的振荡运动。因为在我的项目中,旋转部分相当大,由于惯性,振荡运动会太明显,这对我来说根本不合适。

最后但并非最不重要的一点是,我有许多 28BYJ-48 5V 步进电机 + ULN2003 驱动器模块套件,所以这最终导致我使用步进电机:) 我仍然不得不说,这个套件的缺点是,每个步进电机都需要四个微控制器输出和每个电机上一个微动开关来使每个步进电机归位。

关于归巢。

我将限位开关放置在比零点稍远的位置。当开关启动时,电机停止,但由于它不是所需的零点,电机将不得不朝相反方向移动。多少?我必须这样设置,以便在返回运动后,电机将位于零点,并且不会启动归位开关。你可能觉得我把事情搞得太复杂了,但我这样做是有目的的。即:仅使用 Arduino Nano 模块的一个输入对每个电机进行归位。

是的。在第一阶段,我以为我会使用 Arduino Nano。但在制作软件时,我意识到 Arduino Nano 模块的 RAM 不够用。这是因为当我定义 16 个步进电机时,Arduino IDE 中的编译器向我发出信号,表示我的 RAM 容量超出了 24%。所以我不得不重新调整自己,并选择了 Wemos D1 mini 模块来完成这项工作。一切都很顺利,直到我在 Wemos 中上传了程序的第一个版本。哎哟!Wemos 一直在重置!寻找原因时,我发现我使用的库 MCP23017AccelStepper 库似乎与 ESP8266 不兼容。所以我最终转向了 Arduino Mega。我手头有一个迷你 Arduino Mega 模块,它很小但功能强大 :)。 Arduino Nano 和 Wemos D1 mini 都只有少量输出用于 16 个引擎,这是事实。即使是 Arduino Mega 也不足以实现此目的,因为它“仅”有 54 个输出 :) 这就是为什么我使用了四个数字输出扩展器,每个扩展器有 16 个数字输出。最后我得到了所需的 I/OI 数量。

2

电子原理图

您可以看到上面的电子图。图中只出现了四个电机、四个驱动器和一个输出扩展器,但其他三组组件的连接方式与第一组相同,只有数字扩展器的访问地址发生了变化。您可以在下图中看到地址选择输入如何链接到其他三个扩展器。

我没有在图中显示 Arduino Mega mini 模块的所有输出,因为我无论如何只使用 6 个连接:两个用于电源,两个用于 I2C 通信,一个用于归位开关,一个用于选择启动模式的按钮。整个 Arduino Mega 的图形太大了,它应该是方案的一半 :)

除此之外,我认为该方案相当简单。尽管似乎有很多连接,尤其是步进电机驱动器的连接,但它们都是重复的,并且易于理解。

3

施工

构造并不是很简单,但我尝试使我的工作尽可能简单。:)

当我在线订购切割好的 MDF 板时,我要求该公司(因为他们也进行激光和 CNC 切割)为我打一些孔,以便我能够尽可能准确、轻松地固定电机支架。我在下面附加了 SVG 模板文件。

当我 3D 打印组件时(这个操作花费了我很多时间,因为我打印了许多不同的变体)我也处理了软件部分。

然后我用 3x12mm 木螺钉将电机支架固定到 MDF 板上。

我用 2.5x10mm 木质螺钉将电机安装在支架上,并用 2.5x10mm 螺钉将步进电机的驱动模块和归位微动开关的支架直接安装在 MDF 板上。

然后,我用一些线夹将步进电机的电缆整齐地排列好。我用 2x10mm 的木螺钉固定了这些线夹。我还用热胶将扩展器粘在中密度纤维板上,从而安装了扩展器。

接下来是最困难的部分,进行焊接(根据上一步的方案)。

下一步是在支撑方块提供的位置安装 2 毫米螺丝(见图)。

请注意,HST 块支架有两种类型,在固定到电机轴的部分,有些较短,有些较高,一种 8 个,另一种 8 个。它们交替固定在电机轴上,否则方块在旋转过程中会发生碰撞。这就是为什么我还为归位开关的启动螺钉使用了 2 种不同长度,较短的 14 毫米螺钉用于轴较短的方块,而较长的 20 毫米螺钉用于轴较长的方块(见下图)。

除了这些支架之外,我还用 3D 打印了一些模板,可以在安装 HST 支架之前安装,它们对我检查一切是否正常有很大帮助:电机的高度、限位器的高度、电线是否不会干扰运动、电机的旋转方向是否正常。当然,它们在软件设计阶段对我帮助最大。

然后,我在喷墨打印机的帮助下打印了彩色模型,我使用了白色照片自粘纸(下面附有不同三角形颜色的 PDF 文件),我用精密切割机在边缘切割印刷品,并小心地将它们固定在方形支架上

然后,我将方块安装在电机轴上,并使用对准程序设置我想要的零位(更多有关软件步骤)。

然后我将最终程序加载到 Arduino Mega 2560 Mini 模块中。完成!

施工期间拍了一些照片,希望对大家有帮助。

PDF
HST3.pdf
1.03KB
PDF
HST2.pdf
1.03KB
PDF
HST1.pdf
281.17KB
SVG
FI34APQKFPZ8AP5.svg
22.91KB
4

软件

在谈论加载到微控制器中的软件之前,我想向您展示一个我制作的 HTML5 应用程序,用于模拟我在本文中介绍的项目。该应用程序如下图所示,您可以通过此地址访问它。如果您使用手机,最好使用 Chrome 浏览并在设置中选中“桌面网站”,以便更好地查看。

我使用了 32 种随机变化的 HST 积木模型,您也可以尝试不同的 HST 积木颜色模型。希望您会喜欢它的外观 :)

关于软件。

我使用AccelStepper 库MCP23017AccelStepper 库(这是将 AccelStepper 库与 MCP23017 扩展器一起使用的扩展)创建了程序。在 setup() 函数中,对步进电机进行初始化,即归位,在循环中,通过步进电机的组合运动从一种模型过渡到另一种模型。代码并不复杂,我在源代码上做了注释以使其更易于理解,您可以在github上下载。

一些问题。

我选择步进电机采用半步进,虽然我知道这种情况下扭矩较低,但全步进时 16 个电机同时运动太不平稳。即使采用半步进,运动也不太平稳,但无论如何都比全步进好得多。

您必须小心电机的旋转方向。令我惊讶的是,尽管我以相同的方式焊接了电机,但其中一些电机的旋转方向与正确的方向相反。因此,在软件初始化中,我不得不使用 4、2、3、1 或 15、13、14、12(这是 I/O 扩展器的引脚号),而不是 1、3、2、4 的顺序。因此,不要安装 HST 块支架,在没有它们的情况下启动组装并模拟按下限位开关,并检查一切是否正常。

启动时,为了使支架尽可能对齐,必须使用适当的值更新 homingCompensation 数组。我为每个电机设置了 100 步,但最终我使用了以下值 {152, 209, 188, 204, 192, 210, 204, 180, 216, 197, 192, 221, 232, 252, 212, 214}

为了找出这些值,我使用了一个单独的程序,该程序也在github 上。在 Arduino Mega 中加载程序后,打开 Arduino IDE 的串行监视器,然后从那里执行以下操作:

- 您可以通过从键盘输入从“A”到“P”的大写字母来选择特定的引擎,“A”代表步进器 0,“P”代表步进器 15,当选择引擎时,如果它没有完成归位,那么它就会完成归位,

- 您可以通过串行监视器传输字符“+”和“-”来移动电机,每输入一个字符,电机就会走一步,您可以输入更多符号,让电机走更多步

- 通过串行传输字符“R”,您可以看到已经存储的值,完成后,您可以复制将粘贴在主程序 homingCompensation 数组源中的值。

您可以在下面看到此设置过程中的屏幕截图和图像。

确实,这些值可能并不完美,并且在主程序中,归位需要稍微优化,但这种设置仍然很有用,因为您以后不必浪费时间进行重复编辑和重复加载主程序。这种对齐设置确实需要一点时间,但一旦完成,就会保留很长时间。

借助按钮,我可以选择两种机制操作模式:如果在启动时未按下按钮,则归位后,电机将逐一制作 HSTModels.h 中预定义的模型。如果按住启动按钮直到归位开始,则随机数量的电机将旋转到随机位置,因此模型将完全随机。这些模式可以在下一步的视频中观看。

说到模型。 在 HSTModels.h 文件中,我定义了第一步中出现在图像中的 73 种模式。我根据下图中半正方形三角形可以具有的 3 个位置来定义它

0 表示 0 度,1 表示 90 度,2 表示 180 度,3 表示 270 度,因此下面的模型在 HSTModels.h 中的数组中显示如图

然而,在程序中,我使用一定数量的步数将电机轴移动到这些所需位置。我知道步进电机旋转一圈会走 4076 步,所以在 90 度时意味着 1019 步,即 1*1019 在 180 度时将是 2038 步,即 2*1019 步。等等

在代码中,我在每个 mcp 初始化后都输入了这个命令 TWBR = 12;这样 I2C 总线上的通信速度就是 400 khz(这是 MCP23017AccelStepper 库 github 上的一个提议)我希望电机能够运行得更平稳,但不幸的是,16 个电机同时运行对于 I2C 总线来说已经太多了。当所有电机都旋转时,运动会很慢而且经常很不平稳,如果它们旋转的电机较少,那就没问题了。您也会在视频中注意到这一点。

在 Instructable 和互联网上的许多地方都有关于将程序上传到 Arduino Mega 的记录,所以我认为没有必要介绍这部分。

5

它动了!

没有什么比视频演示更能说明问题了……

下面您可以看到一段相当长的视频,展示了半方形三角形动能艺术的操作:)

https://youtu.be/zPT0-u3tVhQ

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载