利用接近传感器制作Arduino LED节日彩灯

这篇文章来源于deviceplus.com英语网站的翻译稿。
在 制作arduino led节日彩灯中,我们用arduino和一条全彩led灯串做了一种装饰性照明彩灯。这次,我们采用rohm接近传感器让彩灯更具互动性:一旦有物体接近,led灯就会发出奇特的色彩!
今天的电子设计技巧
估计完成时间:60分钟
所需部件
arduino uno r3
ws2811 5m led灯条 240 smd 5050
rohm传感器评估套件
目录
连接接近传感器
定制程序
让我们来点亮led灯吧!
1.连接接近传感器
我们会使用arduino传感器 – rohm传感器评估套件概览介绍的als/接近传感器(rpr-0521rs)。让我们将传感器开发板和传感器连至arduino。
当有物体(比如您的手)靠近接近传感器时,呈放射状排列的led被触发,并形成绚烂的独特光效。
图1 传感器开发板和arduino上的rpr-0521rs接近传感器
让我们来看一下传感器所需的位置和电压。由于接近传感器是i2c接口,因此应位于蓝色区域,而且其所需电压为3v,因此我们需要将跳线引脚设置为中间的3v。
图2 传感器开发板上的传感器位置
led灯串的供电需要另外的5 v电源,不能从arduino取电。如果我们试图用arduino的vcc或5 v为led供电,那么arduino可能会由于led灯串的大电流而烧坏。
图3 单独的外部电源适配器供电,与arduino分开
上次我们只使用了一个led灯串,而这次我们并联3个led灯串。由于是并联连接,因此电源和gnd共用公共点。我们可以连接更多的led,但有具体数量取决于led灯串上发光的led数量以及电源适配器的电流容量。
led灯串上每个led的工作电流约为20 ma。由于供电电流为1.3a,所以可同时点亮65个led灯。
图4 并联连接的led灯带
图5 从arduino延伸出来的led灯串
现在,硬件部分已经完成,让我们继续为led灯串编程吧
2.定制程序
为了控制全彩led灯串或灯条,我们在上一篇 文章中引入了“neopixel”库。这次我们继续使用neopixel。
以下是以接近传感器为输入的led灯串控制程序:
#include #include #include #define pin 6 //pin number of the signal terminal#define led_num 50 //number of ledsrpr0521rs rpr0521rs;adafruit_neopixel ledtape = adafruit_neopixel(led_num, pin, neo_grb + neo_khz800); //如果所用led灯带的控制ic是ws2812,那么第三个参数是neo_khz800,如果控制ic是ws2811则是neo_khz400int wait = 200;void setup() {ledtape.begin();ledtape.show(); //reflects once in all off statebyte rc;serial.begin(9600);while (!serial);wire.begin();rc = rpr0521rs.init();}void loop() {byte rc;unsigned short ps_val;float als_val;byte near_far;serial.println(=============================);rc = rpr0521rs.get_psalsval(&ps_val, &als_val);//当获取传感器值时if (rc == 0) {serial.print(ps:);serial.print(ps_val);serial.println();//接近时led灯亮起if(ps_val > 5){ps_val = 500 - ps_val;if(ps_val < 0){ps_val = 0;}simpleled(ps_val/10);}if (als_val != rpr0521rs_error) {serial.print(als:);serial.print(als_val);serial.println();}}delay(5);}int ledtale[10]; //arrangement for the trajectory of led////逐个点亮//void simpleled(int delaytime){uint16_t i, j;j=0;for(i=0; i < ledtape.numpixels(); i++) {ledtape.setpixelcolor(i, rotatecolor(((i) * 256 / ledtape.numpixels()) & 255));ledtale[0] = rotatecolor(((i) * 256 * 9/10 / ledtape.numpixels()) & 255);for(j=1; j < 10; j++){ledtale[j] = rotatecolor(((i) * 256 * (10-j)/10 / ledtape.numpixels()) & 255);uint16_t m = i-j;if(m < 0){m += 50;}ledtape.setpixelcolor(m, ledtale[j]);}ledtape.show();for(j=1; j < 10; j++){uint16_t m = i-j;if(m < 0){m += 50;}delay(0);ledtape.setpixelcolor(m, ledtape.color(0,0,0));ledtape.show();}ledtape.setpixelcolor(i, ledtape.color(0,0,0));ledtape.show();}ledtape.show();delay(delaytime);}//rgb 颜色转变函数uint32_t rotatecolor(byte wheelpos) {if(wheelpos < 85) {return ledtape.color(wheelpos * 3, 255 - wheelpos * 3, 0);} else if(wheelpos 5){ps_val = 500 - ps_val;simpleled(ps_val/10); //use the sensor value to light the leds}  
simpleled是点亮led灯串的函数,但是我们现在对它进行处理,以便从led串的开始到结束逐一点亮led灯。这可能是不够的,所以这次我们使用一个阵列让led灯带在一定程度上线性发光。
在阵列中,我们运行点亮方法10次,然后从当前发光led的位置开始计数。
int ledtale[10]; //安排led的轨迹  
修改程序的这个部分非常有趣。您可以根据自己的喜好定制程序。
3.让我们来点亮led灯吧!
让我们看看运转起来的炫彩光芒吧!
随着接近距离的改变,led灯串的光速也发生变化。
您可以在黑暗的房间尝试一下,互动照明效果会更棒!
今天,通过与传感器评估套件的接近传感器相结合,我们制作了交互式led灯串。您可以制作更大规模的led灯串或灯带,添加更多的led。这些灯光会把您的家变成一个假日仙境!


如何将BMP180连接到arduino并在串行监视器中显示数据
5nm SoC 即将抢滩登陆 高通要怎么赢下这场硬仗?
Arm实现从设备到数据全面保护物联网安全
iPhone13系列或于9月14日发布
解析用于超稳定Zn电池的高产率碳点中间层
利用接近传感器制作Arduino LED节日彩灯
数字硬件建模SystemVerilog篇OpenFPGA介绍
华捷艾米荣获2018中关村“双星汇--创业之星”
多家锂电隔膜企业业绩惨淡,7um湿法隔膜逐渐成为市场主流
Reno2与iQOO Pro哪个更值得入?颜值性能党这次如何站队
科达利蜂巢能源竞争动力电池市场同比增长188.4%
关于音箱常见的五个问题解答
预测:2010年十大潜力新兴技术
农业氮磷钾肥力检测仪介绍
物联网土壤湿度远程监控+自动花浇水
小米芯片最新消息 3月29日小米将推出新款自研芯片
四大变革 海信智能电视VIDAA全面解析
如何对众多的工业机器人种类进行区分
AMD公布全新FreeSync认证分级,分为了三个等级
基于嵌入式Linux操作系统实现VPN安全网关的设计方案