硬核!纯机械装置模拟数字时钟

美男子玩编程

共 6025字,需浏览 13分钟

 ·

2021-04-02 13:20

点击上方蓝色字体,关注我们

MAKER: ihart/译:趣无尽

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


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


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




1


材料和成本



完整的材料清单文件(ClockPartsList.xlsx)在本项目文件库中可以下载:
https://make.quwj.com/project/367



2


工具清单


  • 3D 打印机

  • 烙铁

  • 螺丝刀

  • 剪线钳和压线钳

  • 粘胶


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



3


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)在本项目文件库中可以下载:
https://make.quwj.com/project/367



4


原理图和 PCB 文件



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


需要注意的是,最初使用的是光电模块而不是磁检测器模块,这就是在原理图和电路板上都能看到光电模块的原因。


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


更多信息参见组装详情。


原理图文件(analog_clock_rev2.sch)在本项目文件库中可以下载:
https://make.quwj.com/project/367


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


原理图文件(H2W-312555_Analog_clock_Rev2.zip.gz)在本项目文件库中可以下载:https://make.quwj.com/project/367



5


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)在本项目文件库中可以下载:
https://make.quwj.com/project/367



6


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 相对应的原始位置。每个时钟后面的齿轮中都有归位磁铁,还有一个霍尔效应传感器,用于检测磁铁是否归位。



7


PCB 焊接



PCB 板中有 24 个需要焊接,必要时可求助朋友:)


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


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



注意:每块板上焊接有 6 条跳线。此处未使用图片中显示的绿色 4 针端子,直接焊接了板间线路,这样压降较低且更可靠。




8


设置拨码开关



每个 PCB 板上都有一个拨码开关。将每个时钟的拨码开关设置为图片中所示的值,以便主控器可以分别寻址每个从属时钟模块。




9


组装 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 稳压器并将其焊接到主板上。这里需执行此操作。



10


时钟模块组装




通过使用霍尔效应传感器模块(连接到 5V 电源或小型电池组)进行测试,确定磁体朝上。这里使用了 4.5V 电池组供电。方向正确时,指示灯应变为绿色。


用 Cyanoacrylate Krazy 粘胶将磁铁粘上。


如图所示,组装时钟。


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



11


单个时钟 Arduino 代码测试



建议在组建每个时钟模块后对其进行测试。为此,请确保时钟模块已完全组装好,并且(临时)将拨码开关设置为大于 23 的值。这将在通电后强制 Arduino 从代码运行校准。视频仅供参考,这样可以检查时钟的运动是否良好和磁铁是否正确归位。USB 电源能够为该测试的两个电动机供电,因此不需要电源连接。


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


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



12


电源连接



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


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


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


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

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

如果所有 48 台电动机都在运动,则为 48 * 214mA = 10.2Amps。


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


仅供参考,当电动机未处于主动驱动状态时,Arduino 代码会关闭绕组,因此在电动机不运动时不会向电动机施加电流。且 Arduino Nano 和霍尔效应传感器使用的电流很小。



13


单个时钟数字 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)在本项目文件库中可以下载:
https://make.quwj.com/project/367




14


安装全部时钟数字



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



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


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




15


安装边框



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


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


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


如图所示组装框架。



下面固定 Arduino PCB 主板。



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




16


主控的反向选项



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



17


调试和维修



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


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


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




18


常见问题


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。


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


项目所用的代码在本项目文件库中可以下载:
https://make.quwj.com/project/367


往期推荐



点击阅读原文,更精彩~
浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报