128只乒乓球组成的炫彩时钟

由 Arduino 驱动

Cherry

喜欢

6362
浏览
4
喜欢

> 更多图片

项目状态:已完成
开放度:公开
所属分类:电子
发布时间:2019-04-25
最近更新:2020-01-20

详细说明


对于 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
  • 木材 × 若干
  • 乒乓球 × 128
  • 钉子 × 4
  • USB线 × 1
  • 电源线 × 1
  • 5V 10A 电源 × 1
  • Arduino nano × 1
  • ws2812b LED灯条 × 若干
  • DS3231 时钟芯片 × 1
  • 电线 × 1
  • 母针连接器 × 1
  • 电阻 × 1
  • 电锯 × 1
  • 锯齿 × 1
  • 老虎钳 × 1
  • 烙铁 × 1
  • 12mm 钻头 × 1
  • 32mm 孔锯 × 1
  • 白乳胶 × 1
  • 热熔胶 × 1
  • 手电筒 × 1
  • 砂纸 × 1

材料清单


中纤板×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 灯条



接下来要切割数条 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 面板安装到框架上



将 LED 面板安装到乒乓球的背面顶部。用四个小钉子将面板固定到框架上。我将钉子朝框架的内侧固定。必要时方便我进行修理。(这么做可以方便我成倍的增加 LED 的数量,因为许多流明不存在。)

安装 Ariduino Nano

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 ,一切皆有可能。