电子说
步骤1:接线
大多数WS2812板带三线连接器。我卸下了连接器的塑料外壳,然后将电线直接连接到插针上(它们非常合适)。白色是GND,红色是+ 5V,绿色是数据输入。
大多数LED灯带的两端都有额外的电源线。这些导线通常是裸露的,因此请确保将其隔离(否则可能会导致其意外短路)。
请注意,LED需要很多功率。如果有30个LED灯带,则可以直接从任何PC或USB电源以全亮度运行它(它将消耗小于500mA的电流)。大约100个LED在低亮度下也能正常工作,但是如果您想要更多,最好使用单独的电源。对于长条,建议从两端供电,对于长条,建议连接额外的电源线,每个100-200个LED。
WS2812串行接收彩色数据,因此您实际上可以控制任何数量的仅具有一个数据引脚的LED。您可以使用任何数字输出引脚(不要忘记在代码中输入正确的数字)。
一旦连接了插排,就可以进入编码部分。
步骤2:编码
该代码在我的github存储库中可用–您可以将代码下载为单个文件此处:https://goo.gl/abFfxz
要快速入门,请找到 #define PIN 0 ,并将0替换为与NeoPixel的数据输入连接的引脚数
您可能还希望调整其他设置,如代码注释中所述:
#define NUMPIXELS 30 –设置数字像素控制
#define RNDPIN 2 –设置为任何具有模拟输入的引脚(仅用于初始化随机数生成器一次)
#define BRIGHTNESS 64 –最大LED亮度(1到255)。请注意,高亮度需要很多功率,因此从低值开始
#define FOCUS 65 –色斑的形状(增加以获得狭窄的斑点,减少以获得较宽的斑点)
#define DELAY 4000 –设置动画的速度:降低以加快速度,增加以减慢速度(实际上并不是延迟)
#define DEBUG 0 –设置为1以显示FPS速率
使用常规方法上传代码。尽情享受吧!
步骤3:故障排除
如果根本看不到任何东西,请检查连接,极性和数据引脚。
如果某些LED闪烁或卡住–可能是电源问题。尝试降低 #define BRIGHTNESS 设置,并确保您具有足够的功能。
如果您发现代码中有任何错误或想要改进–欢迎您!
第4步:如何工作
对于此项目,我们有三个“色斑”,它们可以向后跑沿着地带以不同的速度前进。当斑点彼此相遇时,红色,绿色和蓝色的叠加会产生各种颜色。我们将每个光斑的位置和速度保持在变量中,我们需要为每个重绘上的每个LED重新计算颜色。虽然我们每秒可以做很多次,但动画看起来会很平滑。
像素的每个颜色分量都与 exp(-d * d)成比例,其中 d 是像素与相应颜色的光点中心之间的距离。换句话说,像素颜色代表正态分布(高斯分布),与在图形编辑器中使用“高斯模糊”滤镜完全相同。
Arduino库中包含的指数函数看起来非常慢,因此我仅使用两个乘法和一个除法进行了近似: 1.0/(1.0-(0.634-1.344 * x)* x)。请注意,此近似值仅适用于 x 《0 。
我们计算循环中每个像素的颜色,并通过调用 strip.setPixelColor将其发送到内存缓冲区。 ()即可。当我们遍历每个像素时,我们调用 strip.show(),NeoPixel库将所有数据同步发送到指定的引脚-所有像素,一个像素一个像素,一个24位彩色数据。 First NeoPixel读取前24位数据,将其本地存储在寄存器中,然后将所有其他数据传递到下一个像素。第二个“像素”获取其数据,并将剩余的数据发送到下一个像素,依此类推,直到每个像素获取其数据。您可以安全地发送少于条带中的LED数量的数据-只有第一个 NUMPIXELS 才可以工作。
该代码已被详细记录(希望!),请询问问题在这里!
第5步:调整
当然,有很多方法可以修改此想法并创建其他项目。
例如,我为我的一个项目制作了一个金属环,并将其中的一条胶粘到其中。现在,这是一个不错的装饰灯,您可以将其放在墙壁或天花板上。在窗玻璃附近放置一个条带可以产生很好的反射效果(如您在照片上看到的那样)。
在技术方面,通过在定点计算中重写数学运算可以大大改善代码。我正在使用float来保持事物的描述性和易于理解,但这非常慢。我可能稍后会发布优化版本,或者,如果有人愿意,欢迎您!
我的另一个想法是使用麦克风调整动画声音。可能需要比ATtiny更强大的功能。
最后,您可以将Digispark插入任何移动电源,并在便携式模式下欣赏您的小工具。将条带粘在手提包,衣服或自行车上,并用作独特的个人配件。)
全部0条评论
快来发表一下你的评论吧 !