用 Arduino 步进电机驱动的机械木条时钟
MAKER: Moose408/译:趣无尽
本期介绍一个木制滑动时钟项目,纯手工制作。时钟的时间由四根木条上下滑动来显示,其核心由 Arduino 开发板和四个步进电机构成。简单粗暴,但很有趣~
其中,步进电机是由 Arduino 以及 CNC 步进电机扩展板来驱动,同时使用 Adafruit PCF8523 RTC 模块来控制时间。时钟背后的卡槽和齿轮都是 3D 打印而成,显示数字的滑片由木头制成,上面的数字通过激光雕刻。
时钟保留了木材的天然纹理,外型简洁干净,非常适合作为墙面的装饰品。这种通过上下移动木条来显示时间的时钟是不是非常的独特呢?
组件清单
Arduino 开发板 × 1
CNC 电机扩展板 × 1
A4988 步进电机 × 4
Adafruit PCF8523 RTC × 1
28BYJ 5V 步进电机 × 4
圆孔电源连接器 × 1
按钮开关 × 2
12V 电源 × 1
3mm 螺栓 × 若干
3mm 螺母 × 若干
2mm 螺丝(用于 RTC 板) × 2
1.5 板英尺 木板 × 4
3D 打印零件
时钟共有 14 个 3D 打印部件。使用 PLA 打印。
3D 打印的部件为:
电机载体 × 4
小齿轮 × 4
齿条 × 7
后盖 × 1
挡板 × 1
因为时钟齿条太长,无法放在 3D 打印机床上打印,所以我将它们分成 A 和 B 两个部分并使用燕尾榫相连。
架子滑轨 A – 500mm × 2
架子滑轨 B – 500mm × 2
架子滑轨 A – 300mm × 2
架子滑轨 B – 300mm × 1
3D 打印 STL 文件可在本项目文件库中下载:
https://make.quwj.com/project/409
准备 CNC 步进电机扩展板
1、添加 A4988 步进驱动器
CNC 电机扩展板可以适用于不同型号的电机,在项目中我使用 Pololu A4988 步进驱动器。接下来,我会讲解安装电机的所有步骤。
安装好后,将 Vref 电压设置为 0.15V,以便限制流向电机的电流。
2、将 A 电机设置为独立的电机
CNC 电机扩展板可支持四个电机,A 电机可以作为主要模拟 X、Y 或 Z 电机之一的第二个电机,也可以是独立电机。在滑动时钟中,它需要被设置为独立的电机,并且由 Arduino 的 D12 和 D13 来控制。
如图所示,将 A.Stp 和 A.Dir 引脚分别连接到 D12 和 D13。
3、设置步进电机功率
5V 步进电机使用 12V 来驱动。将 12V 电源连接到 CNC 电机扩展板的电源连接器。
4、为 Arduino Uno 供电
Arduino Uno 的电源由 CNC 电机扩展板的 12V 电源提供。
如图所示,扩展板上的 Vin 引脚是开路,没有连接到扩展板上的任何接头。因此,只需要将一根线从 12V 正极连接到扩展板上的 Vin 引脚即可。
调校步进电机
28BYJ 步进电机是双极电机,带有 5 个引脚的连接头。CNC 电机扩展板为单极电机,带有 4 个引脚的连接头。为了将步进电机直接连接到扩展板,我需要调整步进电机连接器的接线,要将 2 号线(粉色)和 3 号线(黄色)进行交换。
如图所示,我用小螺丝刀将固定在卡槽的电线推出,然后交换电线。同时在连接器上做好标记,表示换过电线。
将电机插头连接到扩展板时,红线不会使用到。我将插头连接到接头上时,仅连接引脚 1-4,红色引脚 5 不连接。
滑动时钟电机的连接方式如下:
X 轴表示分钟滑块
Y 轴表示数十分钟滑块
Z 轴表示小时滑块
A 轴表示数十小时滑块
添加 RTC 和开关
1、连接实时时钟
Adafruit PFC8523 实时时钟使用 I2C 与 Arduino 通信,但是 CNC 电机扩展板没有连接到 Arduino 上的 I2C SDA 和 SCL 引脚。
如图所示,为了解决这个问题,我使用了两个带针脚连接器的跳线,并将它们插入到 Arduino 板上的 SDA 和 SCL 接头位置,然后将扩展板安装在顶部。
2、连接按钮
将两个按钮连接到 Arduino 上的 A1 和 A2。CNC 电机扩展板将这些引脚连接到扩展板边缘的接头上,并将它们命名为按住和重启开关。然后将开关安装到接头中。
3、滑动时钟的整个电路示意图
可在本项目文件库中下载:
https://make.quwj.com/project/409
制作滑动的木条
我选用枫木来制作滑动的木条,厚度为 9.5mm,然后再用 150 号粗的砂纸进行打磨。
滑动木块的尺寸如下:
分钟滑块:500mm x 40mm x 9.5mm
数十分钟滑块:300mm x 40mm x 9.5mm
小时滑块:500mm x 40mm x 9.5mm(与分钟滑块一样)
数十小时滑块:150mm x 40mm x 9.5mm
激光刻字
在激光雕刻数字前,我将蓝色胶带贴在木块的表面进行激光雕刻,这是为了防止数字边缘因激光引起焦痕。
我使用了 45W Epilog Helix Laser,它的床尺寸为 24″ x 18″。由于分钟和小时滑块长大于 18″,我在雕刻时将所有滑块旋转了 90°。
时钟数字字体可在本项目文件库中下载(SlideClock 包中的 dxf 文件):
https://make.quwj.com/project/409
激光设置为:
速度:13
功率:90
加工木块
1、雕刻完成后,首先使用 180 号粗的砂纸对木块进行打磨,然后刷亚麻籽油,等待 10 分钟将其擦掉并让它风干 24 小时。
2、再使用 180 号粗的砂纸对木块进行打磨并涂上另一层亚麻籽油并擦拭,等待 24 小时。
3、再使用 180 号粗的砂纸对木块进行打磨并涂上清漆。
你可以选用合适的砂纸直至打磨到你喜欢的程度。
在木块上添加齿轮条
齿轮条被添加到木块的背面,它们沿背面垂直和水平居中。
1、对于分钟和小时滑块,需要将两个半个的 500mm 的齿轮连接在一起。
2、数十分钟滑块,需要两个半个的 300mm 齿轮连接在一起。
3、数十小时滑块,需要使用一个半个的 300mm 齿轮。
从滑块背面看时,齿轮齿应位于右侧。
组装时钟
组装非常的简单。我使用 3mm 六角头螺栓进行所有组装。
组装步骤如下:
1、将步进电机安装到电机支架上。
2、将小齿轮添加到电机上,它们是松动的,然后用齿条滑轨固定到位。
3、在背面安装电子设备。使用螺栓和螺母固定 Arduino 和电路板。
4、使用两个 2mm 的螺钉将 RTC 固定到塑料中。
5、将电源连接器装入外壳中;将开关安装在两个孔中。
6、后盖的燕尾榫接头是连接到电机托架的背面,一侧可弯曲可使两侧与燕尾榫连接。从正面拧入 3mm 的螺栓固定后盖。
7、安装挡板。
8、将带有数字的滑块放置在插槽中并位于正齿轮的边缘。当时钟通电时,它们将连接起来。
后盖上有锁孔可以将时钟挂在墙上。其中,STL 文件中包括一个可选的 L 型支架,方便将时钟放置到桌子或工作台进行测试。
软件部分
源代码可在 GitHub 上找到:
https://github.com/moose408/SlideClock
或在本项目文件库中下载:
https://make.quwj.com/project/409
所用到的库
Slide Clock,SpeedyStepper by Stan Reifel
https://github.com/Stan-Reifel/SpeedyStepper
AccelStepper 库
https://www.airspayce.com/mikem/arduino/AccelStepper/index.html
对于单个步进电机来说效果很好,但是当我尝试同时移动四个步进电机时,它的速度变慢了。最后,我选择 SpeedyStepper 库。
启动
启动时,代码会在串行端口上扫描按键状态。
1、如果用户按下一个键,它将启用调试菜单,允许手动控制所有步进电机。
2、如果串行端口上没有活动,软件会通过归位滑块来初始化时钟,然后显示当前时间。
归位滑块
使用步进电机时,你需要将其初始化为“原始位置”,以便软件知道每块滑块的位置。我原本打算在每块滑块上添加霍尔效应传感器和磁铁来检测原始位置。但这将需要额外的电子设备。
经过深思后,我意识到我可以将滑块一直运行到顶部,表示最大的数值。当滑块达到最大步数之前,它会弹跳到正齿轮上。当电机停止时,所有滑块都将靠在正齿轮顶部的极限。会有点嘈杂而且随着时间的推移可能会导致正齿轮的磨损,但这种情况很少见,问题不大。
实操
启动时钟
当第一次给时钟通电时,四块滑块将归位,然后显示当前时间。
设置时间
设置时间时按住时钟底部的蓝色模式并按住 1 秒钟。数十小时滑块将上下移动 1/2″ 表示被选中。按黄色选择按钮可以更改时间,或按模式按钮移动到下一块滑块(小时)。重复操作直到时间已设置完成,最后按一下模式按钮就可以启动时钟。
思考
这款时钟的设计还有很多可以探索的地方。比如,可以用字母替换数字,显示的 4 个字母的单词可以传达诸如天气、股票市场或者状态等信息。
例如我的妻子想让我制作一个能够显示她工作状态的版本,例如:忙碌、空闲、呼叫等。这个版本只需更换滑片和更改一个小软件即可轻松完成。
最后,各种可能性都是无止境的,当我们尝试着做出自己的想法是非常酷的事情。
https://make.quwj.com/project/409
via instructables.com/Slide-Clock/
文中链接可点击文末阅读原文查看