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

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

led holiday lighting

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

今天的电子设计技巧

估计完成时间:60分钟

所需部件

 

目录

  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。这些灯光会把您的家变成一个假日仙境!

DevicePlus 编辑团队
DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

Related post

  1. 如何利用Arduino实现激光绊线

  2. arduino hexapod

    Arduino六足机器人第一部分—机制与接线

  3. arduino communication

    Arduino通信协议教程

  4. arduino robot

    利用Parallax激光传感器制作Arduino激光机器人—第1部分

  5. 如何用调光器控制灯光

  6. how to use boolean variables with Arduino

    Arduino和布尔运算:条件为真时永远大于零!

  7. camera sensor

    CMUcam5 Pixy视觉相机传感器简介第二部分——创建球平衡梁

  8. DIY electric skateboard

    基于Arduino的DIY电动滑板

  9. Arduino探索漫游车2—电子设备与布线

TECH INFO

  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • SiC功率元器件
  • Si功率元器件
  • 热设计
  • 仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


PICK UP!

  1. 以纳米级输出电容实现稳定控制的Nano Cap™技术:无需输出电容器的线性稳压器
  2. “第三代 行驶中无线供电轮毂电机”开发成功:超小型SiC模块 助力实现无需担心充电的EV
  3. ROHM开发出业界先进的第4代低导通电阻SiC MOSFET:支持xEV/EV主机逆变器和电池提高电压
  4. 模块配置
  5. 刘铭
  6. 作为车载用二次电源而开发的同步整流降压型DC/DC转换器 : 车载设备中二次电源的优点
  7. arduino explorer rover
PAGE TOP