利用树莓派和乒乓球制作一个假日彩灯
这个树莓派教程用于制作一个可编程的 LED 灯光显示器，非常适合各种技能水平的人。
LED 树莓派
172.98.155.83
是乒乓球自发光还是树莓派自发光？
来自美国的 Mobile Safari|iOS 15.7 用户
2022-12-26T22:28:04.000
172.98.155.83
是乒乓球自发光还是树莓派自发光？
来自美国的 Mobile Safari|iOS 15.7 用户
2022-12-26T22:28:05.000
172.98.155.83
是乒乓球自发光还是树莓派自发光？
来自美国的 Mobile Safari|iOS 15.7 用户
2022-12-26T22:28:09.000
172.98.155.83
是乒乓球自发光还是树莓派自发光？
来自美国的 Mobile Safari|iOS 15.7 用户
2022-12-26T22:28:10.000
这个树莓派教程用于制作一个可编程的 LED 灯光显示器，非常适合各种技能水平的人。
![](/data/attachment/album/202212/20/095754r7q0z001lvx6p600.jpg)



> 
> 这个树莓派教程用于制作一个可编程的 LED 灯光显示器，非常适合各种技能水平的人。
> 
> 
> 


我喜欢圣诞装饰品和灯饰，因此很长一段时间以来我一直想做一个可编程的 LED 项目。最近，我制作了一个由 LED 灯、乒乓球和树莓派 Zero 组成的灯阵列。这个项目相对简单并且具有教学价值，因此我认为它非常值得分享。


整个彩灯由我设计，但其中一些灵感也来自 YouTube。你可以在我的 [Git 存储库](https://github.com/bmccafferty/ping-pong-led-wall) 中找到源代码和制作说明。


### 购物清单


* [树莓派 Zero](https://shop.pimoroni.com/products/raspberry-pi-zero-wh-with-pre-soldered-header)
* [树莓派保护壳](https://shop.pimoroni.com/products/pibow-zero-w)
* 5V 2A 的电源线
* 展架
* 255 个乒乓球
* 热熔胶枪和若干热熔胶棒
* 烙铁
* 焊锡丝
* 22 AWG 0.35mm 实芯线
* 10 米 WS2812(B) LED 灯带（每米 30 像素）
* 万用表
* 钢丝钳
* 剥线钳


### 设计树莓派的灯光效果


这个设计是根据我展框的大小决定的。我在全球速卖通买到了每米 30 像素的灯带，它可以轻松地切成 0.5 米的长度，每条有 15 个 LED 灯。乒乓球的直径是 40 毫米，所以我测量并隔开 40 毫米划了线，LED 灯条放在每隔 40 毫米的中间部分，这就产生了 17 条线。因此我的灯光阵列是 15×17。你可以根据实际情况来调整尺寸。


为了给灯带和树莓派供电，我在电路板底部设置了数据线和电源线。我的 LED 灯不需要很多电，所以我使用树莓派 Zero 的 5V 输出 GPIO 为它们供电。当我以 50% 的亮度运行时，这个亮度已经足以在白天和晚上透过我的窗户看到。


### 布线


我从电路板的底部以之字形开始布线，这使得焊接非常容易，因为每行的末尾不必返回到每行的开头。


我的线路大致像这样（为清楚起见，这里进行了简化，实际上它一共有 17 行）：



```
<---------------\
                |
/---------------/
|
\---------------< # 这里连接树莓派

```

### 使用树莓派制作显示屏


当设计和布线的工作完成后就可以开始制作显示屏了。


我在展板上测量并绘制了线路。我的灯带背面有胶带，所以我只需要取下背衬并将其贴在展板上。我检查了每个灯带的位置和数据线的方向，以确保灯带可以按照树莓派的指令正确串联起来。


连接好所有灯带后，我剪下三段长度相同的电线，并将每个灯带末端的电源线、数据线和接地线连接到其上方。


![Connect each light strip at the end of each line.](/data/attachment/album/202212/20/100354tlulluxeuclluhpm.jpg)


在线路连接完成后，我检查了每条灯带之间的电源线和地线之间的连接，以确保其连通性。我还检查了是否存在错误的桥接，所以我验证了电源线和地线之间的连接。我还进行了一些测试以确保所有灯都正常点亮（链路测试参阅 [测试代码](https://opensource.com#the-code)）。


完成上述工作后，我开始在乒乓球上剪洞，用剪刀刺入乒乓球的底部，然后剪一个小洞让 LED 灯穿进去。手工不太行，每个球都不太一样，但效果真的很好。我使用的每米 30 个像素的 LED 灯，所以每个 LED 之间有大约 30 毫米的空隙。一个乒乓球是 40 毫米宽，但我不打算开始单独焊接每一个 LED！我想，这是很重要的。首先，我并不擅长焊接（正如我的照片所显示的），而且无论如何，我想“好吧，它们是乒乓球。我可以把它们压在一起！”


我是这样做的：


在 LED 灯上滴上热熔胶，然后在 LED 上放了一个乒乓球并按住大约五秒钟，就粘好了一个乒乓球。粘贴下一个乒乓球时我只需要挤着上一个乒乓球，就能让所有乒乓球都变得整齐了。我对它的外观很满意。它还有一个很好的好处，就是掩盖了我糟糕的焊接工作；)


![It's a tight fit, but the 40mm ping pong balls fit in a 30mm space just fine.](/data/attachment/album/202212/20/100410arrfbthgvdjw4te9.jpg)


我继续为余下的乒乓球进行焊接。尽管这个过程中有几个乒乓球被压碎了，但最终还是顺利完成了制作。


![255 LEDs and 255 ping pong balls in an array.](/data/attachment/album/202212/20/100419er37eu6neeatmetu.jpg)


### 测试代码


测试代码需要确保所有部件都能正常工作，为此我使用了这个 [Adafruit 指南](https://learn.adafruit.com/neopixels-on-raspberry-pi/python-usage)，它以红、绿和蓝点亮每个 LED，然后依次进行循环。我在测试时使用它来确保我连接无误并且焊接正常。


在此之后，我在电子表格中设计了一个网格，将每个像素映射到一个网格位置。由于我的像素编号呈之字形排列，因此很难跟踪每个 LED（例如 A1 为 256，B1 为 226）。重新映射网格位置能使得我在构建图像时更容易。


在所有准备工作完成之后，我就可以在纸上和电子表格中设计图像，然后编码。于是我开始添加一些动画（使用循环并将像素变为一种颜色，然后变为另一种颜色）。


最终的结果还算顺利。


![A Christmas gift in LED.](/data/attachment/album/202212/20/100430ofhhsq7dw4h37bdz.jpg)


![Reindeer painted with light.](/data/attachment/album/202212/20/100438hwczghif9v01qr5b.jpg)


![An LED snowflake.](/data/attachment/album/202212/20/100445jhhgkds0kcups7zk.jpg)


### 能玩一年的树莓派彩灯


我不确定这是否已经完全完成了。自从把它摆放到橱窗里，几乎每个晚上我都会添加一些新的图像和动画。我已经在考虑除夕夜的时候要做成什么样了。它不会像圣诞装饰品一起在圣诞节后被放进储藏室。我只需要在上面显示其它图案，就能使它成为一个能玩一年的彩灯！我的一个朋友推荐了像素版马里奥，这听起来是个好主意！


我的代码仍然需要完善。例如，我做了一些滚动文本，但当我为文本的每个位置重新绘制时却花了很多时间。我想我可以用循环做一些事情，或者图像库可以帮助更轻松地滚动字母，并使添加文本更容易，而不是在每一步打开和关闭每个像素。


这里有一张照片记录了我制作的全过程：[LED 乒乓墙](https://projects.bdm.scot/Xmas%20LED%20Wall%202020/)。


可以在此处观看它的运行视频：[XMas 灯光展示](https://youtu.be/zc0501GzpMw)。


这个彩灯最终的效果我非常满意。以后我也会尝试更多利用 LED 彩灯完成的项目。我也鼓励大家亲自动手制作一个这样的彩灯，它会比你想象中更简单。




---


via: <https://opensource.com/article/22/11/raspberry-pi-holiday-light-display>


作者：[Brian McCafferty](https://opensource.com/users/bdm) 选题：[lkxed](https://github.com/lkxed) 译者：[Return7g](https://github.com/Return7g) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

