这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 电源与模拟 » 利用接近传感器制作ArduinoLED节日彩灯

共10条 1/1 1 跳转至

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

工程师
2022-08-14 19:27:49     打赏

这篇文章来源于DevicePlus.com英语网站的翻译稿。


led holiday lighting

在 制作Arduino LED节日彩灯中,我们用Arduino和一条全彩LED灯串做了一种装饰性照明彩灯。这次,我们采用ROHM接近传感器让彩灯更具互动性:一旦有物体接近,LED灯就会发出奇特的色彩!

今天的电子设计技巧

估计完成时间:60分钟

所需部件

  • Arduino UNO R3

  • WS2811 5M LED灯条 240 SMD 5050

  • ROHM传感器评估套件

 

目录

  1. 连接接近传感器

  2. 定制程序

  3. 让我们来点亮LED灯吧!

 

1.连接接近传感器

我们会使用Arduino传感器 – ROHM传感器评估套件概览介绍的ALS/接近传感器(RPR-0521RS)。让我们将传感器开发板和传感器连至Arduino。

当有物体(比如您的手)靠近接近传感器时,呈放射状排列的LED被触发,并形成绚烂的独特光效。

 

led holiday lighting


图1 传感器开发板和Arduino上的RPR-0521RS接近传感器

 

让我们来看一下传感器所需的位置和电压。由于接近传感器是I2C接口,因此应位于蓝色区域,而且其所需电压为3V,因此我们需要将跳线引脚设置为中间的3V。

led holiday lighting


图2 传感器开发板上的传感器位置

 

LED灯串的供电需要另外的5 V电源,不能从Arduino取电。如果我们试图用Arduino的VCC或5 V为LED供电,那么Arduino可能会由于LED灯串的大电流而烧坏。

led holiday lighting


图3 单独的外部电源适配器供电,与Arduino分开

 

上次我们只使用了一个LED灯串,而这次我们并联3个LED灯串。由于是并联连接,因此电源和GND共用公共点。我们可以连接更多的LED,但有具体数量取决于LED灯串上发光的LED数量以及电源适配器的电流容量。

LED灯串上每个LED的工作电流约为20 mA。由于供电电流为1.3A,所以可同时点亮65个LED灯。

led holiday lighting


图4 并联连接的LED灯带

 

led holiday lighting


图5 从Arduino延伸出来的LED灯串

现在,硬件部分已经完成,让我们继续为LED灯串编程吧

2.定制程序

为了控制全彩LED灯串或灯条,我们在上一篇 文章中引入了“NeoPixel”库。这次我们继续使用NeoPixel。

以下是以接近传感器为输入的LED灯串控制程序:

#include <Wire.h> #include <RPR-0521RS.h> #include <Adafruit_NeoPixel.h> #define PIN 6   //pin number of the signal terminal #define LED_NUM 50  //number of LEDs RPR0521RS rpr0521rs; Adafruit_NeoPixel ledtape = Adafruit_NeoPixel(LED_NUM, PIN, NEO_GRB + NEO_KHZ800);  //如果所用LED灯带的控制IC是WS2812,那么第三个参数是NEO_KHZ800,如果控制IC是WS2811则是NEO_KHZ400 int wait = 200; void setup() { ledtape.begin(); ledtape.show();   //reflects once in all OFF state byte 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 < 170) { WheelPos -= 85; return ledtape.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return ledtape.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }

 

我们修改了最后一个程序中的一些东西。首先,我们添加了接近传感器的输入处理。其次,我们改变了LED的点亮方式。

接近传感器的输入应检查传感器评估套件(Sensor Evaluation Kit)的示例程序。其目的是处理来自传感器的数值。如果您只用if语句来响应传感器,那么只能实现LED的开启/关闭。如果将传感器的值传递给点亮LED并改变LED点亮方式的函数,就可以创建更多的交互式照明效果。

//接近时LED灯亮起 if(ps_val > 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。这些灯光会把您的家变成一个假日仙境!





关键词: 利用     接近     传感器     制作     ArduinoLED         

专家
2022-08-14 20:06:57     打赏
2楼

看看


院士
2022-08-14 20:13:58     打赏
3楼
学习

院士
2022-08-14 20:14:06     打赏
4楼
谢谢

院士
2022-08-14 20:14:13     打赏
5楼
学习

院士
2022-08-14 22:15:31     打赏
6楼

学习一下,谢谢分享。


院士
2022-08-14 22:19:50     打赏
7楼

看看


高工
2022-08-14 22:29:29     打赏
8楼

Good


工程师
2022-08-14 22:49:00     打赏
9楼

感谢您的分享


工程师
2022-08-14 23:01:48     打赏
10楼

总结的还是比较不错的


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]