![9b1b1dca8e90ace4f60333b99e12a65e.png](https://i-blog.csdnimg.cn/blog_migrate/d16d2c5ffc172e7bf13250b8c11c19b3.jpeg)
用平均分布在一个三角形上的45只RGB彩色LED创造了五彩缤纷的灯光艺术效果。非常适合初学Arduino编程的童鞋和搞艺术的非专业创客们。
知乎视频www.zhihu.com
项目概述
该项目使用由Arduino UNO控制的45个APA-106可编程LED。 这些LED类似于可单独编程的LED灯带,因此我们使用Adafruit的Neo-pixel库来控制它们。 UNO上的单个引脚可对整个显示器进行编程,因为一条数据线可连接到链中的所有LED。
这个设计的灵感来自于5x5x5 RGB光立方体,它使用APA-106可编程LED,该项目使用45个以三角形图案排列的APA-106 LED来探索三角形艺术。
从硬件和软件的角度来看,这都是一个相当容易的项目,非常适合初学Arduino编程的童鞋和搞艺术的非专业创客们,让我们先看一下硬件,然后看软件。
组件和材料
APA-106可编程RGB LED 45颗
![94c9f7aa61f92c895b7876673904d920.png](https://i-blog.csdnimg.cn/blog_migrate/23e155aa71e683e148f1951ddb0d3732.png)
22号镀锡铜线 1根
![07a5372164709fc47172a4e3285e58ee.png](https://i-blog.csdnimg.cn/blog_migrate/94ba7fa0c8b8b0f52494807070b14ee0.png)
Arduino UNO & Genuino UNO开发板
![80c2a6f872cceda1e31ef9d58c2cff62.png](https://i-blog.csdnimg.cn/blog_migrate/33e11f5c0b46b37509b5e54483de7164.jpeg)
胶合板三角形,边长12英寸,厚度:1/4英寸 1块
必备的工具和机器
烙铁(通用)
![d8cf4e8132c76ad9a5294450809123da.png](https://i-blog.csdnimg.cn/blog_migrate/8e48db8635849bacc5843b76c611fef6.png)
热熔胶枪(通用型)
![e7b6d3b0279ef6687136d7d430e6bb8e.png](https://i-blog.csdnimg.cn/blog_migrate/766dca132901065b8600f64ff533b9e8.png)
散热夹
![3a90e605b3900cd56f4ee160d95c86b4.png](https://i-blog.csdnimg.cn/blog_migrate/8a1e431c0b8a01279f47877ce9db4b34.png)
硬件部分
硬件只需要UNO和45只LED灯。 这些LED在全功率下异常发亮,因此我将所有LED灯的亮度设置为0到255的30。 在此级别上,UNO和所有LED都可以直接由UNO的USB输入供电,因此可选1安培-5V的电源。
![32738764b0232f30846c95ee4b13ff76.png](https://i-blog.csdnimg.cn/blog_migrate/ea858a6a72c665e85adf8478deb061b6.png)
施工的第一步是在一块1/4英寸的胶合板上打孔。 木板本身在每个边缘上都是12英寸。 LED以精心构造的等边三角形隔开1英寸。 LED为8毫米,所以我钻了8毫米的孔,使LED紧密配合-压入时它们根本没有移动。
![1f855136712ff5a2d584f92c9fa1863d.png](https://i-blog.csdnimg.cn/blog_migrate/ae0c3af8e05fe5e893bbf3d5e13fa564.jpeg)
左上方是APA-106 LED。 长引线已接地。 数据输出是位于封装平坦边缘右侧的引线。 左侧的第一个引线是数据输入,而数据输入和地之间的下一个引线是+ 5V。 这4条引线如右图所示弯曲。 接地线的末端有第二个弯曲-它的目的只是识别接地线,因为一旦它们全部弯曲就很难看到。
![a33dbb29e1fcaee0d6813903ad3e23f9.png](https://i-blog.csdnimg.cn/blog_migrate/e7d16d982b871116cdae8440cb49635b.jpeg)
上图显示了电路板的接线方式。 首先请注意,随着LED链接在一起,蓝色的数据线向后移动。 这意味着在奇数行中,数据从左向右流动,而在偶数行中,数据从右向左流动。 这还会导致奇数行与偶数行的电源轨不同。 对于奇数行,接地引线上升,而+ 5v引线下降,偶数行则相反。
![1c7fcc5e61df2c87188a6f117ef5dd16.png](https://i-blog.csdnimg.cn/blog_migrate/821132ef83d6dc14b0e17b6ee7bdbd39.png)
上面的照片显示了接线。 全部使用22号裸锡镀锡铜线完成。 我收集了左侧的接地轨和右侧的+ 5V轨。 您应该做相反的事情。 板上的每个数据线连接都必须通过电源线,但是如果您将地线切换到右侧,将+ 5v切换到左侧,数据线不会跨越任何东西!
![a177c689c6a9a50c0d2434c22af3b24b.png](https://i-blog.csdnimg.cn/blog_migrate/21f5b6fd6c03ded3ef0eab07c8c71dc8.png)
上面是接线的特写视图。 请注意,右侧的数据线如何与5伏电源线的顶部交叉。
![1c5c8e0347fed1b48b6d8cc5219ceee7.png](https://i-blog.csdnimg.cn/blog_migrate/95ef84ed9d624dba45b8fd62a1802882.png)
上面的照片显示了成品板。 我用一些小塑料片作为UNO的支架,然后用少许热胶将UNO固定在板上。
软件部分
多亏了Adafruit的新像素库,软件变得非常简单。它为我们提供了setPixelColor(链中的#,color)来定义任何一个LED的颜色,而show()则根据最新的更改更新整个显示。该库使用一个无符号的32位数字来表示LED的颜色,分别存储8位的红色、绿色和蓝色的强度。我使用这个方案直接用于原色的增亮和调暗,但是对于其他的,我使用我自己的简单的色彩管理方案,从我的LED立方体借鉴。这是一个简单的方案,,其中数字1到42代表彩虹调色板,为黑色(全部关闭)添加0,为白色(全部开启)添加43。
您可能已经注意到,在上面的接线图中,led的编号从顶部的0开始,数字按行从左到右排列。这是我用来标识led的编号系统。它不像数据线那样来回切换,所以我创建了自己版本的setPixelColor()函数,它通过我的数字分配来引用led,并允许我使用我的0到43调色板指定颜色。
您在上面视频中看到的几乎所有动画或效果都是表驱动的。其中一个表告诉您如何从左上角进行扫描。另外两张桌子将这种效果传递到另外两个角上。另一个表告诉您外部三角形的led,然后是中间三角形,然后是最内部的三角形。所有这些不同的表都存储在程序内存而不是RAM中。我最初担心所有这些表将占用很多宝贵的程序空间。但是使用这种表方法被证明是非常有效的,而且程序空间从来都不是问题。
在Arduino IDE中,程序或示例被分成四个文件或标签。第一个是声明、表和设置例程。第二个是主循环,它只是调出各种动画的列表。三是动画。有15个动画组成一个节目,持续3分钟,然后重复。四是支持所有动画的通用函数或子程序。
代码
这是一个zip文件,包含一个测试例程、一个包含15个动画的演示以及使用Neo-pixel库的说明。
链接:https://pan.baidu.com/s/1vkhkhpW5jWOTdRnzxYuoig
提取码:4n0d
原理图
![7a58862de15c0eee428c93b8d85f1eb4.png](https://i-blog.csdnimg.cn/blog_migrate/c968e50ce21dc950492ffb2c559c3a25.jpeg)