对于 Maker,我一贯相信给你一个支点,你可以撬起整个地球。现在给你一把手锯,你给我锯开128个乒乓球……
本期将耗费巨资,用这 128 个乒乓球制造一张桌子那么大的炫彩时钟!
https://v.qq.com/x/page/g0863ghueu1.html
https://www.bilibili.com/video/av53270277/ (下方视频如无法显示请点此链接查看)
乒乓球按照设计草图排列,使用12个乒乓球就可以清晰的显示单个数字。时钟中间的长度是 20 个乒乓球(20×4cm=80cm)。LED 需要显示四个数字和一个冒号,每个数字之间至少相隔一排乒乓球,方便读数。项目共需要 128 个乒乓球。
时钟特性
1、LED 灯条连接在一起形成像素点,可以编程控制像素点。
2、时钟后面有一块面板,可以遮挡间隙,暴露面较少。整体造型整洁干净,从前面看不到任何线头和电子设备。
3、制作方便快捷,只需连接 128×6 个接触点并剥除相同数量的电线。容易修理和修改项目。
温馨提示
1、该项目需要做一些重复性的工作,我建议可以先制作一版小型测试版,查看是否能够正常运行。你需要观察乒乓球发出的光是否完美,避免误差的发生(观察球之间的空间是否合理)。
2、选择合适的乒乓球对于这个项目来说非常的重要。最好选择球身没有印花的无缝的乒乓球,颜色为白色且不容易反光。
checkIfLedsAreBehindBalls.ino
[452 Bytes at 2019-05-05, 120 次下载]
onlyTime.ino
[1502 Bytes at 2019-05-06, 117 次下载]
CycleThroughDigits.ino
[1126 Bytes at 2019-05-06, 101 次下载]
timeWhiteBackgroundRainbow.ino
[1721 Bytes at 2019-05-06, 130 次下载]
SetTime_on_ds3231_nano.ino
[1911 Bytes at 2019-05-06, 120 次下载]
FastledExampleCode.ino
[5775 Bytes at 2019-05-06, 131 次下载]
中纤板×1(80×30 厘米)
木材×若干(宽 5 厘米,长 200 厘米)
乒乓球×128(乳白色)
钉子×4
USB 线×1
电源线×1
5V 10A 电源×1
Arduino nano ×1
ws2812b LED灯条×若干(5米 30个灯/米)
DS3231 时钟芯片×1
电线×1(3芯2米)
母针连接器×1
电阻×1(300~500欧姆之间)
电锯×1
锯齿×1
老虎钳×1
烙铁×1
12mm 钻头×1
32mm 孔锯×1
白乳胶×1
热熔胶×1
手电筒×1
砂纸×1
1、每个乒乓球的里都有 LED 灯。为了获得更大的亮度,乒乓球的背面都需要切除一部分,这样 LED 的光只从一面透过。孔的大小约为 30mm。
2、由于球体很薄,锯开前需要制作一个支撑的道具。找一块中纤板,在上面打数个 32mm 大小的孔。由于板上孔的直径比球小 8mm ,在锯球时需要一只手固定住乒乓球,另一只手将乒乓球锯开。在锯乒乓球之前,如球体印有商标,将有印标的那一面锯掉。
3、用手电筒查找乒乓球中间的缝隙。转动一下球体,从前面看,看不到商标,从缝隙那可以看得到一点。
锯开的孔可以有几毫米的误差。项目完成时不影响整体效果。
1、当所有的乒乓球处理完后,将它们成排的粘在一起。
2、17 个球、18 个球、19 个球各两排,20 个球一排。球体之间不要留空隙,尽量的保持直线。
3、如图所示,用两块木块将球夹起来,每个球孔朝上,粘在一起并确保每一排都是直的。使用少量胶水即可。如果你使用胶水过多,从正面会看到。
4、再次使用手电筒来检查乒乓球的正面有没有脏的斑点。
5、使用木条将两排乒乓球压在一起。注意请使用少量的胶水。在木框上找八个不同方向的点作为粘连点,将两排乒乓球同时紧密的粘在一起。
1、木制框架由六个部件组成,两块长木条和四块短木条。将这些木条以边缘 60 度角的方向拼接在一起。我的乒乓球大小约 39.5mm 而不是 40mm,我计算了一下框架大概的长度(这个可以通过测量木板的高度或宽度来完成)。
2、我计算出两块长木条的内部长度应为 66.3cm,四块短木条的内部长度应为 14.3cm。由于我锯不太精确,我只是尽量把它们切得更长一些,这样它们就不会短了。
3、所有部件切割完毕后,将它们安装到乒乓球面板周围,查看是否合适。如果不合适,再锯几毫米进行微调。将木制边框粘在乒乓球面板周围,确保粘合成想要的形状。
接下来要切割数条 LED 灯条。1灯1条,3灯1条,5灯1条,7灯17条。如图所示,所有的 LED 条带需要接线。首先是1灯1条 ,然后是5灯1条,再然后是7灯17条,最后是3灯1条。
注意连接的线要比所有灯条的长度要长,以预留更多的区域的连接。我将线头缠绕在一块中纤板上,检查是否每个 LED 灯都在球的后面。然后将所有的部件组合在一起,再次检查是否连接正常,是否每一个LED 灯都能正常工作。
1、当框架完成后,我将框架和乒乓球面板放在中纤板上,中纤板紧贴着 LED 灯。确保每个 LED 灯都在球的后面,取下了乒乓球面板。
2、沿着中纤板上的框架内侧划线,以获得需要剪切的形状。
3、因为 LED 不在球的中心,这样可以看到 LED 与框架的相对位置。
4、取下贴在板上的 LED 后,我剪下了所需面板的形状并打磨边缘,让它很好地贴合在框架内。
注意 LED 不在乒乓球后面居中,如图所见。
按照前面布 LED 线的方式,从前面可以看到电线。所以,我决定通过在每条垂直的 LED 灯条的末端钻孔来解决这个问题,这样电线就可以放在背面。
我将导线穿过孔并暂时用胶带粘住。再次确认每个 LED 灯都在乒乓球的后面,我取下了胶带并将 LED 灯条带连接到电路板上,此时胶带已经在 LED 灯条上。
注意:在中纤板上钻孔时,要非常小心,不要将板子弄破了。
将乒乓球面板倒置在框架中,在乒乓球碰到框架的每个点上涂上胶水固定。
将 LED 面板安装到乒乓球的背面顶部。用四个小钉子将面板固定到框架上。我将钉子朝框架的内侧固定。必要时方便我进行修理。(这么做可以方便我成倍的增加 LED 的数量,因为许多流明不存在。)
1、将连接器焊接到 Arduino Nano(不是必需的)。
如图所示,我连接的方式可以简单的将所有部件拆开,以便之后添加按钮、光敏电阻或其他功能。
2、将实时时钟连接到 Arduino ,确保时钟模块的 SDA 和 SCI 连接到 Arduino Nano 的 SDA 和 SCL 。
3、连接引脚 9 和 LED 灯条数据之间的电阻。
4、将导线连接到 LED 灯条的末端,以便为 LED 灯条的末端提供电源,防止电压下降。
5、供电方式。将连接到 Arduino Nano 的 USB 电缆切开半截,然后将两条 5V 电缆的分别连接到 LED 灯条和 USB 电缆上。在另一边做同样的处理。这样可直接为 LED 灯条供电而不通过 Arduino 。
6、使用一根电缆将 5V 10A 的电源与时钟连接。
7、在框架底部的一侧钻了一个洞,让电源线穿过。这样不仅方便时钟靠墙固定,也可以立在平面上。
上传代码时,请关闭电源。
1、在时钟模块上设置时间。这个做起来很简单,只需要添加四行代码并安装 DS1307RTC 模块后,就可以运行(SetTime_on_ds3231_nano.ino,点击获取原代码),将 Arduino 上的时间设置为 PC 时间。
2、设置好时间后,可以考虑编写一些代码。我在程序中使用了2个库,FastLED 库和 DS3232RTC 库。这两个库几乎可以完成所有的工作,编程经验少的 Maker 也容易上手。
编码后的效果如视频中展现的效果一样。(timeWhiteBackgroundRainbow.ino)
代码文件在本项目文件库中可以下载:
https://make.quwj.com/project/114
代码比较简短,但可以不断的去改进。现在它只是在实时时钟上读取时间和显示时间。 LED 点亮所形成数字的位置在矩阵“数字”中硬编码。例如,数字 [0] 应点亮形成零的所需 LED 的像素点。
我将提供一些我自己制作的程序,它们在原程序的基础上做了稍微的改动。
1、程序 'CycleThroughDigits.ino' 只计算到 9999 ,演示所有数字的外观。
2、程序 'onlyTime.ino' 只显示时间和变色,没有背景颜色。
3、程序 'FastledExampleCode.ino' 是 FastLED 库提供的一些代码,用来演示一些简单的动画。
这个项目不仅仅是一个时钟。你还可以添加按钮让它根据光线改变亮度,只显示某些颜色;或者让它对音乐有感应,用 ESP 连接到 wifi 等。该项目是一个带显示器的 Arduino ,一切皆有可能。