用树莓派或 Arduino 制造 LED 矩阵彩灯


MAKER:maketvee/译:趣无尽 Cherry(转载请注明出处)
之前我们介绍过一款非常炫酷的《熔岩特效灯》。这期教程中我将为大家介绍一款更易上手的灯。
这款 LED 矩阵彩灯使用标准的 WS2812b LED 灯,构成一个圆柱形的灯体,最后由木制边框组合而成。效果相当棒!

先看下面的视频。

材料清单

790×384 纸板×若干(这里用的是 1.5mm 椴木板)
WS2812b LED×100(30个/米)
树莓派(Raspberry Pi)Arduino ×1
木制贴片或其他柔韧行强的材料×若干
电线×若干

外形设计和激光切割



主要的设计参数就是所使用材料的厚度。
1、该版本使用了 1.5 毫米的纸板,不仅容易切割而且非常便宜。如果改变厚度, CAD 数据也要随之更改。
2、3D 设计有助于避免在组装过程中的出现问题。
3、激光切割,部件的摆放方式必须方便激光机切割,纸板使用的大小为 790×384 厘米。
4、推荐使用 Inkscape 这个工具。附带的 SVG 文件包含了项目所有部件的信息。

注意:我通过用户参数规定的厚度修改了 Fusion360 的型号,你也可调整材料的厚度并生成自己的激光切割文件。
模型的链接为:https://a360.co/2OC2kvZ
激光切割的 SVG 文件请在项目文件库中下载。

激光切割、局部组装





激光切割出以下部件:
C形的水平部件×12
竖形的卡槽×18
垂直连接部件×2
LED 承载部件×20
8个C形,9个卡槽和1个连接部件可以组合成一个半圆形的造型。
在此步骤中,所有部件用卡槽连接起来,不使用胶水。

LED 接线




每一个 LED 灯条上有五个 LED 灯,并用胶水粘到载体上。
1、灯带的 DI(数据输入)和 DO(数据输出)引脚以Z字形的方式连接在一起,将第一条带的 DO 与下一条纹的 DI 连接,依此类推。
2、每个半圆形的需要 10 条灯带。5V 和 GND 仅在条带的一侧连接。电线的长度与矩阵的条带所需布线的长度相匹配。
3、将 LED 灯条安装到位之前,必须将所有结点用胶固定好。
4、将十个灯条用胶水固定到每半个圆柱体上。一个半圆的 DO 连接到另一半圆的 DI。第一个半圆的DI 将是 Raspberry Pi 或 Arduino 的输入。

第一次测试



为确保一切正常,将对 LED 彩灯进行第一次测试。使用 Arduino 和 Neopixel 应该是最简单的方法。

木质装饰



测量圆柱体的直径和高度后,将木质饰面安装到位。

Raspberry Pi、Arduino 以及电源



为了在 Python 中编写漂亮的矩阵效果,可以使用 Raspberry Pi。Raspberry Pi Zero 就可以,它通过 GPIO 引脚 18 连接到矩阵,并通过 74HCT245 电平转换器,使树莓派的 3.3V 适应 WS2812 的 5V。当使用更多的 Neopixel / WS2812 LED 灯时,将会使用更大的电容(2200 uF)和串联电阻(470 欧姆)。

电源
100个 WS2812b LED 的最大功率为 100x60mA = 6A。当然,如果降低亮度,功率损耗也会大大降低。5V 电源能够达到你想要的亮度。

Arduino
该矩阵可直接在 Arduino 设备上使用 Adafruit 的 NeoPixel 库和 NeoMatrix 库。如果你使用下面的用例,则必须修改 PIN 并初始化:

NeoMatrix:

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(20, 5, PIN,NEO_MATRIX_TOP + NEO_MATRIX_LEFT+ NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800);

你可以使用 Adafruit 的 GFX 库,可以下载高度为5像素的不同的点阵字体。请使用附带的 Arduino sketch 作为起点(使用 PIN 4 作为矩阵的起点)。它是 Neomatrix 示例草图的改编版本。

NeoPixel:

Adafruit_NeoPixel strip = Adafruit_NeoPixel(100, PIN, NEO_GRB + NEO_KHZ800);

所需文件请在项目文件库中下载。

模拟





Python 源代码可在 Github 库下载到。

编程

这里设置了两种模式。在 cylinder.py 的开头定义了 PI 变量。
1、PI=False,是模拟模式,将启动一个 Python 程序用来测试所有的动画效果。需要先安装程序依赖的所有库(如 pygame,numpy 等)。在模拟模式下,圆柱体显示为 5×20 像素矩阵。




2、PI=True,这将驱动树莓派的 GPIO 18# 引脚。你可以使用参数自由添加其他效果。
文本使用了3×5像素的字体,由于高度有限,不是所有字母都可以完整的显示。

希望你喜欢这个项目。

via

这是一篇发布于 6年 前的文章,其中的信息可能已经有所发展或是发生改变,请了解。


46 评论

  1. 太炫酷了,我想仿制一个,其他材料都找到了,请问最外面包的木制纸板在哪里可以买到?谢谢!

  2. 请问木制饰面你是用的多厚的椴木板达到的这个效果?我在淘宝找到1.5mm和1mm的,可以么?还是需要更加薄的?另外我能在自己的博客转载你的文章么?谢谢!

    • 1.5mm和1mm的都可以,如果用1mm的则需要自己改图纸。文中所用的是1.5mm的。
      可以转载的,请保留我们的署名和链接。

  3. Traceback (most recent call last):
    File “cylinder.py”, line 16, in
    from neopixel import *
    ImportError: No module named neopixel

    • 能否把那个使用 Arduino 的软件写入这部分剖析一下~化学实验小白鼠一枚,不太懂硬软件,不过想试一下

  4. rpi-ws281x 库安装了但是没有neopixel.py这个文件,我把cylinder.py 文件引入的neopixel 改成了rpi-ws281x.py但是报 can’t open /dev/mem permission defind 这个错误,我把/dev/mem的权限改成764后,程序报错Operation Not Permitted,请问我把cylinder.py 文件引入的neopixel 改成了rpi-ws281x.py是不是有问题?另外rpi-ws281x库没有neopixel.py怎么办?

  5. 记录下自己遇到的问题,大家有 遇到相同的可以参考:
    1. neopixel找不到,pip install ws_281x库后找不到neopixel文件,可以去https://github.com/jgarff/rpi_ws281x/tree/master/python下载,然后把neopixel文件放到cylinder.py同级目录下就可以了。
    2.can’t open /dev/mem/ permission defind 需要用sudo权限,但是用sudo python cylinder.py会报没有ws_281x模块,执行sudo pip install rpi_ws281x就可以了。
    3.cylinder.py 文件里有错误在文件161 行 strip.setPixelColor(matrix[y*20+x],(Color(display[y][x]>>8)&0xFF, display[y][x]>>16, display[y][x]&0xFF))
    更改成strip.setPixelColor(matrix[y*20+x],(Color(display[y][x]>>8&0xFF, display[y][x]>>16, display[y][x]&0xFF)))

    以上就是目前遇到的所有问题及解决办法,希望能帮到遇到问题的人,目前还在研究led与树莓派的连线问题。

    • 你好,我的CYLINDER.PY报错,报错行99行。

      Use “-c” argument to clear LEDs on exit
      ALSA lib pcm_hw.c:1903:(_snd_pcm_hw_open) card is not defined
      Traceback (most recent call last):
      File “cylinder.py”, line 223, in
      main()
      File “cylinder.py”, line 99, in main
      DISPLAYSURF = pygame.display.set_mode((20*SIZE, 5*SIZE))

发表评论

你的邮件地址不会公开


*