前言

前几期都是炫酷的LED作品,或简或难,而这期老外又把LED玩出了新花样:把相框和灯条组合,用Arduino作为中控制作一款奇幻的“灯光隧道”。这个作品的电路非常简单,初学者即可完成,可能相框和玻璃等材料需要麻烦一点,可以找商家定制。

作品的思路是用安装在相框背后的超声波传感器来感应镜子前方的运动,然后产生相应的LED显示特效。另外固定支架与相框呈一定角度,产生了无限延伸的效果。

视频先睹为快。

材料

1、Arduino ×1

2、LED灯条 ×若干(5V)

3、超声波传感器 ×4

4、排母 ×若干

5、电容 ×1 (大约100uF到220uF)

6、电阻 ×1 (大约200-600欧姆)

7、电池 ×若干(9V电池)

8、玻璃、镜子、UV贴膜和相框(可找商家定制)

相框要选择合适大小,因为要在里面固定LED灯条、在前面装上玻璃和在后面装上镜子。

步骤

在玻璃上贴上UV贴膜

“灯光隧道”原理:灯光会在后面的镜子和前面的“双向”镜子之间连续反射,视觉上不断地远离“双向”镜子,最后产生无限延伸的效果。

因此在前面的玻璃上贴上UV贴膜,形成“双向”镜面。

该作品使用的是银色的窗户UV贴膜,镜面效果非常不错,也可以尝试不同的颜色,可能会有意想不到的效果。

建议先将肥皂水涂在玻璃上,然后将贴膜切成合适的大小,贴到玻璃上后用一块小板刮出多余的水,放置一晚上干燥,这样贴膜效果会更好。

安装LED灯条

测量相框的内部尺寸,并确定四个侧面中每个侧面需要多少个LED灯条。建议每一侧安装奇数的LED灯,这样就可以有一个LED灯作为这一侧的中心,效果更棒。

确定每一侧需要多少个LED灯后,仔细切割LED灯条,要保证切割部位的正确极性,然后将它们安装到相框中,四个角的灯条两两相接。

在LED灯条的起始位置焊接一条连接 Arduino 的引线,所有引线都从后面的镜子穿出来。

切割和焊接LED灯条之后,将LED灯条粘贴到相框内部上,在LED灯条的关键位置用热熔胶固定。

安装超声波传感器

将电线连接到排母的4个引脚上,然后将其头部用热熔胶粘到框架的背面,这样方便随时插拔超声波传感器。

在每个排头上使用4条不同颜色的电线,顺序与相框周围完全相同,再将所有5V和GND连线,每组echo,triger引脚接到Ardiuno。再将电线焊接到接头后,在每个接头上添加一小块收缩管。

安装镜子和背板

将超声波传感器头部粘好后,再将镜子安装到相框背面。该作品定制的相框是使用凹槽来固定背部,然后用两个小金属钩将其固定,使背部略微倾斜,不同的相框设计可能会有所不同,按实际情况来安装。

镜子安装完后,将电线接好,在每个角落用热熔胶固定。

在安装背板之前最好先测试一下LED灯条,确保所有接线都正确无误。另外,确保将LED引线从背面拉出,因为下一步需要用到这些引线。

Arduino 与超声波传感器接线

1、整理所有超声波传感器GND电线,连接到Arduino的GND,同理连接好5V。

2、LED灯条的GND和5V需要一个100-200uF的电容。为确保正确的极性,电容负极应接在GND上。

3、在LED灯条的DATA线上,串联一个200-500欧姆的电阻,避免电流过大使LED烧坏,在所有连接处最好使用热缩管。

完成所有接线后,将每根线连接到Arduino,GND接到GND,5V接到5V,LED数据引脚接到Arduino引脚10,传感器接到引脚2-9。

电路图

这是老外手画的电路图,看起来可能有点乱,其实电路非常简单,核心就是超声波和灯条的接线。

Arduino 代码

在传感器周围设置一个带有脉冲LED的橙色中心点,用于测量最近的物体,当然这只是一个点缀,你也可以按照自己的想法来。

#include

const int NUMPIXELS = 26;Adafruit_NeoPixel pixels =

Adafruit_NeoPixel(NUMPIXELS, 10);const int NUMPIXELS =

26;Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS,

10);const int topTrigPin = 2;const int topEchoPin = 3;const int

leftTrigPin = 4;const int leftEchoPin = 5;const int botTrigPin =

6;const int botEchoPin = 7;const int rightTrigPin = 8;const int

rightEchoPin = 9;void setup()

{Serial.begin(9600);pixels.begin();}int corners[4] = {16, 23, 3,

10};int focusPoint = 20;int focusMoveTo = 20;int rainbow =

0;uint32_t rainbowColor = Wheel(0);unsigned long previousMillis =

0;void loop() {unsigned long currentMillis = millis();if

(currentMillis - previousMillis >= 500) {previousMillis =

currentMillis;long top = readSensor(topTrigPin, topEchoPin);long

left = readSensor(leftTrigPin, leftEchoPin);long bot =

readSensor(botTrigPin, botEchoPin);long right =

readSensor(rightTrigPin,

rightEchoPin);Serial.print("t:");Serial.print(top);Serial.print("l:");Serial.print(left);Serial.print("b:");Serial.print(bot);Serial.print("r:");Serial.println(right);rainbowColor

= (Wheel((rainbow) & 255));rainbow = (rainbow + 1) % 255;if

(top < left && top < bot && top < right )

{// move to topfocusMoveTo = corners[0];} else if (left < top

&& left < bot && left < right) {// move to

leftfocusMoveTo = corners[1];} else if (bot < top && bot

< left && bot < right ) {// move to botfocusMoveTo =

corners[2];} else if ( right < top && right < left

&& right < bot ) {// move to rightfocusMoveTo =

corners[3];}}if (focusPoint != focusMoveTo) {if (focusPoint >

focusMoveTo) {focusPoint--;} else

{focusPoint++;}}bounceAround(focusPoint);delay(30);}int pos =

0;long readSensor(int trigPin, int echoPin) {pos++;if (pos == 5)

{pos = 0;}return pos;pinMode(trigPin, OUTPUT);pinMode(echoPin,

INPUT);long duration, cm;digitalWrite(trigPin,

LOW);delayMicroseconds(2);digitalWrite(trigPin,

HIGH);delayMicroseconds(10);digitalWrite(trigPin, LOW);duration =

pulseIn(echoPin, HIGH);return

microsecondsToCentimeters(duration);}long microsecondsToCentimeters(long microseconds)

{  return microseconds/29/2; }int bounceSize =

5;int bounceSizeMax = 5;int bounceDirection = 1;void

bounceAround(int point) {setAll(rainbowColor);if (bounceSize <=

0) {bounceDirection = 1;} if (bounceSize >= bounceSizeMax)

{bounceDirection = -1;}bounceSize +=

bounceDirection;pixels.setPixelColor(point,

pixels.Color(0,250,0));for(int i = 1; i <= bounceSize; i++

){pixels.setPixelColor(point - i,

pixels.Color(40*i,40*i,40*i));pixels.setPixelColor(point + i,

pixels.Color(40*i,40*i,40*i));}showStrip();}void showStrip()

{pixels.show();}void setAll(uint32_t color) {for(int i = 0; i <

NUMPIXELS; i++ ) {pixels.setPixelColor(i, color);}}void setAll(byte

red, byte green, byte blue) {for(int i = 0; i < NUMPIXELS; i++ )

{pixels.setPixelColor(i, red, green, blue);}}// Input a value 0 to

255 to get a color value.// The colours are a transition r - g - b

- back to r.uint32_t Wheel(byte WheelPos) {WheelPos = 255 -

WheelPos;if(WheelPos < 85) {return pixels.Color(255 - WheelPos *

3, 0, WheelPos * 3);}if(WheelPos < 170) {WheelPos -= 85;return

pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);}WheelPos -=

170;return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);}

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com

arduino灯光装置_创客实战 | 用Arduino制作一款奇幻的“灯光隧道”相关推荐

  1. arduino灯光装置_【pinpong库控制硬件】之Arduino uno-调光台灯

    本帖最后由 _木子_ 于 2020-9-1 15:21 编辑 调光台灯 一.概述-------------------------------------- 在前面的课程中我们学会了如何点亮并控制LE ...

  2. arduino灯光装置_用Arduino实现智能控制-夜间感应灯的制作

    教学基本信息 课名 用 Arduino 实现智能控制 - 夜间感应灯的制作 (一个单元两个课时) 是否属于 地方课程或校本课程 否 学科 信息技术 学段 第三学段 年级 初一 授课日期 2 指导思想与 ...

  3. arduino灯光装置_基于Arduino的灯光秀

    步骤1:准备木制框架 您可以按照您希望的任何方式构建框架或外壳.我选择木材是因为仅需使用基本工具即可轻松完成工作. 我已使用一些已打捞过的木板来搭建框架.我在长度为30厘米的木板上标记了4个干净的零件 ...

  4. arduino 舵机接线图_(四)arduino进阶:舵机的使用方法

    舵机是一种旋转执行器或线性执行器,可以精确控制角度或线性位置,速度和加速度.它由一个电机和一个传感器组成,用于位置反馈.简单来说,它更像是一个可以用户指定的角度旋转的步进电机. 伺服电机有多种尺寸,具 ...

  5. arduino nano原理图_三种常用的Arduino开发板

    什么是Arduino?相信很多读者都会有这个疑问,甚至有人认为手中的开发板就是Arduino.维基百科上说,"Arduino是一块单板的微控制器和一整套开发软件,它的硬件包含一个以ATMEL ...

  6. python和arduino哪个好_基于Python和Arduino的智能花盆系统

    基于 Python 和 Arduino 的智能花盆系统 杨吉云 YANG Ji-yun :徐乾淏 XU Qian-hao :沈莲 SHEN Lian :章晓敏 ZHANG Xiao-min [摘 要] ...

  7. arduino灯光装置_基于Arduino的智能家居灯控系统设计

    &能应用 ------ T X 阵 W S 2 8 1 2 全 彩 灯 带 R X 工 G N D r 0 引言 智能家居的概念虽然已经有了几十年,但进入我国并取 得一定发展还是最近几年的事, ...

  8. arduino灯光装置_使用Arduino和继电器控制灯光

    用于控制继电器的电路如下: 在本教程中,我们将使用等效于Arduino的Yourduino的RoboRed .为了不使RoboRed上的I / O引脚过载,将使用晶体管从Arduino的电源而不是IO ...

  9. arduino点阵声音频谱_创客实战 | 制作一个随音乐跳动的32分频音频频谱显示器

    前言 这期作品是通过 Arduino 和四块LED点阵模块,实现32分频的音频频谱可视化显示,让LED随音乐跳动! 主要特点 1.使用简易安装的库 ArduinoFFT 和 MD_MAX72xx.2. ...

最新文章

  1. 服务器虚拟化软件XenServer 常见问题(一)
  2. 重点解决三大环节数字化,高效适配家装数智转型
  3. linux系统结构与文件管理命令
  4. Cocos2d-x 3.2 EventDispatcher事件分发机制
  5. (3)Node.js APIS
  6. echarts 动态设置标题_echart动态生成标题
  7. OpenAI 发布模型实现自动定理证明,妈妈再也不用担心我的数学?
  8. GET,POST请求
  9. 安装完MySQL后启动报错_MySQL数据库之mysql编译安装完成后,启动时报错The server quit without updating PID file...
  10. 编程语言的动态性(Dart和OC对比)
  11. 灵活多变的keytool和openssl生成证书,应用tomcat和nginx
  12. 非极大值抑制( Non-max suppression)
  13. 图灵专访:郭霖的成长之路
  14. 风景这边独好::王世宏摄影作品选集 读后感
  15. 可爱的树链剖分(染色)
  16. 给div添加漂亮的边框背景图
  17. mac装linux iso不用u盘安装,在任何mac上用u盘安装OSX和Windows10双系统的方法(支持老电脑、不用Bootcamp)...
  18. 汽车ABS系统-第一周作业
  19. 嵌入式linux驱动开发教程
  20. 厘米换算英尺英寸 (15 分)

热门文章

  1. JAVA Json-Schema接口校验利器
  2. [绍棠] iOS开发经验总结
  3. 《Go圣经》章一:入门
  4. android十二时辰源码,云指程序猿十二时辰
  5. UNCTF2019新星赛长安十二时辰write up
  6. STM32实战总结:HAL之GUI
  7. android 机车软件,机车党app
  8. uniapp轻松集成极光推送SDK(本地插件集成和离线打包两种)
  9. K8s二进制部署-flanneld报(Couldn‘t fetch network config)
  10. HTML使用 crypto-js-AES 加密