锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

硬核!用Arduino打造纯机械装置模拟数字时钟

时间:2022-10-25 03:00:04 连接器amp端子

本文转载自程序员极客实验室

图片

这个项目是真正意义上的「机械时钟」,由 3D 打印部件、25 个 Arduino Nano 和 48 步进电机构建。每个时钟表面都是用来做的。 Eagle 设计的 PCB。

几年前我在波士顿的一家商店里看到的时钟的灵感来自于 ClockClock 24,成本约为 6000 美元,很漂亮。

完成这个项目,学习 3D 打印、Arduino 编程、原理图和 PCB 设计、机械技能和一定的调试技能。

材料和成本

完整的材料清单文件(ClockPartsList.xlsx)可在文末项目文件库下载。

  • 工具清单

  • 3D 打印机

  • 烙铁

  • 螺丝刀

  • 剪线钳和压线钳

  • 粘胶

费用大约是 500 美元。你也可以通过购买更便宜的零件来降低成本。电子表中的描述是一个单击链接。如果链接失效,可以 google 搜索链接中的单词。

3D 打印

打印使用整个项目 PLA 材料,所用的 3D 打印机是 Creality Ender 3 Pro。利用 Cura 免费版切成薄片。

大约花费了 1 每月打印一次。其中,每个时钟模块的底板大约需要 9 一个小时的打印时间。如果每天打印 2 张,需要 12 天,如果用两个 3D 打印机,速度会更快。

所有零件均低于标准温度 20% 打印填充率。

这个项目有很多关于这个项目的信息 3D 印刷知识:
机床需要每隔几天平整一次。否则,零件将从机床上抬起或损坏。
喷嘴需要每隔一段时间清洗一次。否则,打印件会变薄。
PLA 线轴需要保持紧绷,这样打印时的长丝就不会被束缚和卡住。

3D 打印部件清单(Clock 3D Printed Parts List.xlsx)打印所需 STL 文件(stls.zip),可在文末项目文件库下载。

原理图和 PCB 文件

原理图是用 Autodesk 的 Eagle 绘制的。

需要注意的是,光电模块最初被使用,而不是磁检测器模块,这就是为什么光电模块可以在原理图和电路板上看到。

每个磁霍尔效应传感器都连接起来 PCB 板上的 5V,Gnd 和 模拟引脚(O_0 或 O_1)。

参见组装详情。

原理图文件(analog_clock_rev2.sch),可在文末项目文件库下载。

该项目需要 25 个 PCB 板。附在这里 Gerber 文件,可以在任何地方 PCB 工厂制造电路板。打开压缩成 .gz 推荐文件 7Zip 解压缩程序。

原理图文件(H2W-312555_Analog_clock_Rev2.zip.gz),可在文末项目文件库下载。

Arduino 编程

项目的 Arduino 有两个文件:主控文件和从属设备文件。

主控代码只使用一次,控制所有从属设备。使用从属设备代码 24 次。

RTC(实时时钟)库 .zip 文件也包含在内 .gz 文件中。可以执行以下操作 .zip 文件添加到 Arduino IDE:

sketch -> include library -> add .zip library.

要对 Arduino 编程,请选择:

tools -> Boards: Arduino Nano
tools -> Processor Atmega328 (旧的引导程序)
tools -> port (选择端口)

代码文件(HartClock_Arduino_Code.zip.gz),可在文末项目文件库下载。

Arduino SW 介绍

主控的 Arduino 将 I2C 每个时钟面后面发送串行命令 24 个从属 Arduino。从属 Arduino 将 I2C 将命令解码为时钟运动。

主机可以到达 Arduino I2C 命令:
0= IDLE, 1= Calibrate, 2= Arm_go_clockwise, 3= Arm_go_counter_clockwise
(0 = 空闲,1 = 校准,2 = 顺时针旋转,3 = 逆时针旋转)

如图所示,时钟有 8 可能的位置。

重置后,主机将面向每个 Arduino 向时钟位置发送校准命令 8 相应的原始位置。每个时钟后面的齿轮都有归位磁铁和霍尔效应传感器,以检测磁铁是否归位。

PCB 焊接

PCB 板中有 24 如有必要,可向朋友求助:)

切记要从电动机随附的小型驱动板的插座中拔出 ULN2003 驱动器 IC。

将每个元件插入电路板,稍微弯曲引脚,以免掉落,将元件引脚焊接到板上。

注:每块板焊接 6 跳线。这里没有使用图片中显示的绿色 4 针端直接焊接板间线,压降低,更可靠。

设置拨码开关

每个 PCB 板上有一个拨码开关。将每个时钟的拨码开关设置为图片中显示的值,使主控器能够分别找到每个从属时钟模块。

组装 PCB 主板

Arduino 主板包含 Real Time Clock(RTC)板和 Arduino nano。每当主 Arduino 通过其 USB 编程时,RTC 使用当前的计算机时间编程时间数据 RTC 保存电池。
可以将 RTC 热粘合板或用双面胶带粘贴到主板上 PCB 上。焊接连接使其牢固。

使用 3D 将主板固定在时钟上。

将 RTC Vcc 连接到板上 5 引脚。

将 RTC Gnd,SCL 和 SDA 连接到 PCB 板上的相应名称。

在 RTC 板 Vcc 和 SDA 之间的 I2C 上焊接 1 个 1.3k(或接近值)上拉电阻。

在 RTC 板 Vcc 和 SCL 之间的 I2C 上焊接 1 个 1.3k(或接近值)上拉电阻。

用 4 根导线焊接 6V、Gnd、SDA 和 SCL,预留长度约为 6 以便将来与其它电路板连接。

用 10 英寸长导线焊接 D2 通过按钮增加引脚和地面的时间。

用 10 英寸长导线对焊接 D3 按钮减少引脚和地面的时间。

注:关闭电源前,应从主 Arduino Nano 上拔下 USB 在电源关闭时,这是一条潜在的电流路径 Arduino 会尝试用 USB 电源供电,主机上的微型 7805 稳压器可能会烧坏。如果发生这种情况,请购买功率更大的 7805 将稳压器焊接到主板上。这个操作需要在这里进行。

时钟模块组装

使用霍尔效应传感器模块(连接到 5V 测试电源或小电池组,确定磁体向上。这里使用 4.5V 当方向正确时,指示灯应变绿。

用 Cyanoacrylate Krazy 粘上磁铁。

如图所示,组装时钟。

将 4 根钩形导线切成约 6 英寸长。剥下导线的两端。 1/4 把它们绞在一起。把它们焊接起来 PCB 的 6V、Gnd、SDA、SCL 点的一侧。安装数字时,将用于焊接到相邻时钟。

单个时钟 Arduino 代码测试

建议在建立每个时钟模块后进行测试。为此,请确保时钟模块已完全组装,拨码开关设置为大于 23 值。这将在通电后被迫通电。 Arduino 校准代码操作。视频仅供参考,可检查时钟运动是否良好,磁铁是否正确归位。USB 电源可以为测试的两个电机供电,因此无需电源连接。

插入 USB 线并加载从 Arduino 代码。应该看到它在每个臂上校准。每个臂校准后,将臂移到顶部 8 按下 Arduino Nano 上的 Reset(重置)按钮几次,确保能正常工作。

操作完成后,请不要忘记将拨码开关设置为正确值(0 到 23)。将时钟编号写在时钟背面的沙皮纸上,以便组装。

电源连接

如图所示,电源设备需要用连接器压接并连接到电源和供电线上,因此使用延长线。将电压调整到 7.5V,将胶带缠绕在调节旋钮上,以免意外旋转。

直流电压线将通过开关连接到主板。

此处每个 28BYJ48 步进电机均由 7.5V 电压驱动。绕组分别是 70 欧姆。

因此,每个绕组的电流是 7.5V/70 欧姆 = 107mA

每台步进电机主动驱动 2 绕组。因此,每个电机 2 * 107mA = 214mA

如果所有 48 台电机在运动,就是 48 * 214mA = 10.2Amps。

这是一个相当大的电流,显示在这里 10Amp 电源可以提供电流。

仅供参考。Arduino 代码将关闭绕组,因此电机不移动时不会向电机施加电流。 Arduino Nano 霍尔效应传感器使用的电流很小。

单时钟数字 Arduino 主控代码测试

测试由 6个时钟模块组成的数字。

在每个结点使用 2 个侧面连接器件并用螺丝拧紧,将 6 个时钟模块组装成一个数字。

此处称为 debug_master_counter.ino 的 Arduino 代码已加载到主 PCB 中。到现在为止,所有从时钟模块均应已加载 Analog_clock_slave.ino。

拨码开关应设置为:(0 至 5)或(6 至 11)或(12 至 17)或(18 至 23)

可以一次建立一个数字,对其进行测试并通过焊接将 6 个时钟连接起来。

暂时将这 4 个主模块导线焊接到该时钟的 +6V、Gnd、SDA、SCL空点进行测试。

确保主模块已连接电源(暂时不带开关)并设置为 7.5V。由于没有连接器,暂时将其焊接以进行此测试。

主模块上电并初始化所有 6 个时钟。如果尚未将手臂移到顶部(8 点钟位置),则需要将它们移到顶部。然后,它将发送指令显示从 0 到 9 的递增计数,如图所示。

测试完所有数字后,请使用正确的 master_clock_slave.ino 加载主 PCB Arduino。

测试用的代码文件(debug_master_counter.ino),在文末的项目文件库中可以下载。

安装全部时钟数字

组装完所有模块后,就可以开始使用连接器链接组装完整的时钟。每段连接需要 2 个连接器链节,然后将螺丝插入链节的每一侧,把部件固定在一起,如图操作。

时钟放在一起后,焊接每个模块之间的导线。最初,在每块板上都有绿色螺丝端子,但后来切换为焊接连接,因为螺丝端子在每个螺丝处引入电阻,导致 6V 线路和地上的电压下降。

请注意,如果不连接框架,则完整的 3×8 大时钟不稳定。

安装边框

添加框架,框架增加了支撑,让时钟整体将变稳定。

有 4 种框架。2 种角件和 2 种边件。尝试时,要看它们的适合程度。

给长框架打孔。组装框架时,将 3 个开关安装在钻出的孔中。将时钟放置在底部框架的中心。

如图所示组装框架。

下面固定 Arduino PCB 主板。

将主 Arduino PCB 固定(粘)在 master_support 支架上,然后如图所示,在中心找到一个合适的位置。拧入 2 个螺钉固定它。

主控的反向选项

Arduino 主代码具有反转时钟方向的功能。某些 28BYJ-48 步进电机的运行方向是反向的。那么可以在代码中控制它。如图,在 Arduino 主代码中设置 appropriate bits = 1 就好了。

调试和维修

推荐步骤:
1)组建并测试 24 个时钟模块(一个一个测)。
2)用 6 个时钟模块建立一个数字,并使用特殊的测试主控代码进行测试。
3)组建时钟整体,并使用正确主控代码对其进行测试。

如果主控时钟有问题,请检查接线,并确保时钟模块之间的焊接正确。确保电线从 clk0 到 clk23 贯穿整个时钟。

如果遇到通信问题,请确保主机上有 I2C 上拉电阻。可使用示波器检查 I2C 信号是否正常。

图片

常见问题

1)为什么不用一个微控制器,并使用多路复用器在每个时钟之间切换?
组建这东西时,总要做出工程复杂度上的权衡。可以将单个微控制器与多路复用器配合使用,但一次只能移动一个时钟。实际上有一个这样的想法,使用伺服器并一次移动一个模拟时钟面。也可以用具有许多 IO 的 FPGA(现场可编程门阵列)来代替许多从属控制器,但这会贵得多,且需要额外技能。

2)为什么不用某种步进芯片替代 24 个从机的 Arduino Nano 呢?
Arduino nano 的价格在 2 美元。作为从机,每个都对 2 个电机执行步进控制,并且读取每个电机齿轮的霍尔效应模拟信号以进行校准。很难找到价格便宜的芯片来完成这两个功能。

3)为什么不使用霍尔效应传感器芯片,而使用 $1.50 的霍尔效应传感器模块?
单个霍尔效应传感器芯片更便宜,但它们需要添加一个电阻,因此每个霍尔效应传感器都必须放在 PCB 上。这需要另外的 3D 打印部件,并将 3 条导线焊接到小型设备的每个引脚上。而只安装 1 个螺钉的霍尔效应模块 PCB 板,使组装变得更加容易。

4)为什么用那么多 Arduino 而不用一个芯片?
将需要一个具有以下功能的 Arduino(或FPGA)芯片:

48 个电机 4 个步进信号 + 48 个电机 2 个用于校准的霍尔效应传感器 = 288 pin。Arduino 做不到,FPGA 可以。

5)在主控 Arduino 上增加 3 端稳压器的目的是什么?
3 端稳压器是添加到主控制器中的 7805 稳压器,当主控 Arduino 连接到其他电路板,关闭电源时,会烧。关闭电源之前,应先从主机上拔下 USB。

6)如果 RTC 模块的时间出现误差,如何调整?
可以使用按钮开关调整时区的小时数。要更改 RTC 芯片上的时钟时间,需要对 Arduino 主程序进行重新编程。
可以将代码修改为允许通过蓝牙无线访问主机和调整 RTC。

这个项目耗时三年,现在可以享受成果了。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章