[项目]音乐IQ灯 精华

21441浏览
查看: 21441|回复: 16

[项目] 音乐IQ灯

[复制链接]
一、基本介绍

这款音乐IQ灯是基于RGB全彩LED灯带的一个应用,可以变幻成多种不同的产品。无论是安装在床后用来舒缓情绪、或者是贴在墙面上作为家中装饰,来一支浪漫的双人舞,都是不错的选择。在这里,楼主选择了将IQ灯精神发扬光大,尝试了多种不同拼法,将其做成了一串音乐IQ灯(才不是虫虫!)音乐IQ灯图1



音乐IQ灯图2


好啦,废话不多说,先让我们来看看效果如何吧







这款音乐灯最独特的地方就在于其使用的灯带是可以独立控制其中的每一个LED小灯的,这就使赋予不同灯不同的色彩变得可行起来,再加上声音处理模块的参与,就可以使不同的灯对应音乐不同的频率做出相应变换,相较于只对声音强度产生变化的小灯更具趣味性。

二、所需元件
FIT0352 炫彩WS2812 LED灯(长度自定,我使用了34个LED灯)、
Arduino控制器一块(只需具备三个pwm数字口,一个模拟口和正负极接口各两个即可,如:UNOBeetle等)
导线若干

三、焊接与连接
新版灯带选用了beetle板子,更小巧美观,如下图所示将各元件连接好
音乐IQ灯图5

三、安装Arduino IDE

如果你是第一次使用Arduino的话,需要下载Ardunio IDE并装好驱动。

四、安装库文件并烧录代码

我们可以安装并使用前辈们写好的库文件,方便地完成对单个LED灯的控制
下载附件AudioAnalyzer.zip下载附件Adafruit_NeoPixel.zip
安装库文件教程
烧录以下代码到控制器中


  1. /*music responsible led strip sample code
  2. created by Yu on 07/28/2015
  3. */
  4. #include <Adafruit_NeoPixel.h>
  5. #include <AudioAnalyzer.h>
  6. #define PIN 11     //The signal pin connected with Arduino   
  7. #define LED_COUNT 34 //total number of leds in the strip
  8. #define NOISE 120// noise that you want to chrop off
  9. #define SEG 6 // how many parts you want to seperate the led strip into
  10.   
  11. Analyzer Audio = Analyzer(10,9,0);//Strobe pin ->10  RST pin ->9 Analog Pin ->0
  12. Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
  13. int FreqVal[7];//create an array to store the value of different freq
  14. void setup()
  15. {
  16.   Serial.begin(57600);
  17.   Audio.Init();
  18.   leds.begin();  // Call this to start up the LED strip.
  19.   clearLEDs();   // This function, defined below, turns all LEDs off...
  20.   leds.show();   // ...but the LEDs don't actually update until you call this.
  21. }
  22. void loop(){
  23.   Audio.ReadFreq(FreqVal);
  24.   for (int i = 0;i<7;i++){
  25.     FreqVal[i]=constrain(FreqVal[i],NOISE,1023);
  26.      FreqVal[i]=map( FreqVal[i],NOISE,1023,0,255);
  27.      Serial.print(FreqVal[i]);//used for debugging and Freq choosing
  28.     Serial.print(" ");
  29.   }
  30.   int j;
  31.   //assign different values for different parts of the led strip
  32.   for (j=0;j<LED_COUNT;j++){
  33.     if(0<=j && j<=LED_COUNT/7)
  34.     {
  35.       set(j,FreqVal[1]);// set the color of led
  36.       leds.show();
  37.      delay(1.5);// to make the led transit color more naturally
  38.     }
  39.     else if((LED_COUNT/SEG)<=j && j<(LED_COUNT/SEG*2))
  40.     {
  41.       set(j,FreqVal[1]);
  42.       leds.show();
  43.       delay(1.5);
  44.     }
  45.     else if((LED_COUNT/SEG*2)<=j&& j<(LED_COUNT/SEG*3)){
  46.        set(j,FreqVal[3]);
  47.        leds.show();
  48.        delay(1.5);
  49.     }
  50.     else if((LED_COUNT/SEG*3)<=j&& j<(LED_COUNT/SEG*4)){
  51.        set(j,FreqVal[4]);
  52.        leds.show();
  53.        delay(1.5);
  54.     }
  55.     else if((LED_COUNT/SEG*4)<=j&& j<(LED_COUNT/SEG*5)){
  56.       set(j,FreqVal[3]);
  57.       leds.show();
  58.       delay(1.5);
  59.     }
  60.     else{
  61.       set(j,FreqVal[2]);
  62.       leds.show();
  63.       delay(1.5);
  64.     }
  65.    
  66.   }
  67.   
  68.     }
  69. //the following function set the led color based on its position and freq value
  70. void set(byte position, int value){
  71.   
  72.   if(0<=position&& position<LED_COUNT/SEG){
  73.      leds.setPixelColor(position,leds.Color(position*15+value*15,position*5+value*6,0));
  74.     }
  75.   else if(LED_COUNT/SEG<=position && position<LED_COUNT/SEG*2){
  76.      leds.setPixelColor(position,leds.Color(position*5+value*5,value+position*2,0));
  77.    
  78.     }
  79.    else if(LED_COUNT/SEG*2<=position&& position<LED_COUNT/SEG*3){
  80.      leds.setPixelColor(position,leds.Color(value*5+position*3,value*4+position*2,0));
  81.    
  82.     }
  83.      else if(LED_COUNT/SEG*3<=position&& position<LED_COUNT/SEG*4){
  84.      leds.setPixelColor(position,leds.Color(0,value*8+position,position*0.96+value*2));
  85.    
  86.    
  87.     }
  88.      else if(LED_COUNT/SEG*4<=position&& position<LED_COUNT/SEG*5){
  89.     leds.setPixelColor(position,leds.Color(0,(value*2+position*0.2)*3,(value+position*0.5)*3));
  90.    
  91.     }
  92.     else{
  93.     leds.setPixelColor(position,leds.Color(value*0.4+position*0.8,value*0.3,value*0.5+position*0.2));
  94.    
  95.     }
  96.    
  97.    
  98. }
  99. void clearLEDs()
  100. {
  101.   for (int i=0; i<LED_COUNT; i++)
  102.   {
  103.     leds.setPixelColor(i, 0);
  104.   }
  105.    
  106.   
  107. }
复制代码

NOTE: 这段代码中很多参数取决于背景的噪音、所使用的LED灯个数、和你所希望的分区情况,可以说是一个DIY程度非常高的项目,所以以上代码仅仅是做一个参考,大家可以根据自己的喜好,来调节最终的灯带效果,期待更多的作品哦 XD


五、裁剪灯带并安装在IQ灯中(不需要剪短灯带的做法可以忽略下面这一步哈)


将LED灯带裁剪成预先设想好的段数,然后再用导线将它们分别焊接起来,注意灯带上所标示的方向,灯带需要保持一个方向连接。
焊接完成后,用胶枪把焊接部位胶住,防止导线被扯断。
接下来把灯带装入IQ灯球中就OK啦~






Phoebe  高级技匠

发表于 2015-7-31 15:37:58

漂亮,第一次看到这么多形态的IQ灯
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2015-7-31 22:37:06

3D打印吧;P;P
回复

使用道具 举报

dbc0301  高级技匠

发表于 2015-7-31 23:14:27

先顶一个吧。
回复

使用道具 举报

dbc0301  高级技匠

发表于 2015-7-31 23:15:04

连代码都附上了,楼主真是辛苦了。
回复

使用道具 举报

大连林海  初级技神

发表于 2015-8-1 09:24:08

太美了 这画面怎么:lol
回复

使用道具 举报

sun20100480  初级技师
 楼主|

发表于 2015-8-1 09:59:14

Phoebe 发表于 2015-7-31 15:37
漂亮,第一次看到这么多形态的IQ灯

我现在是IQ灯拼接小达人,五分钟搞定一个:lol
回复

使用道具 举报

hnyzcj  版主

发表于 2015-8-1 19:15:30

好漂亮
回复

使用道具 举报

Jane  高级技匠

发表于 2015-8-8 09:58:28

酒吧神器~
回复

使用道具 举报

张滋榆  见习技师

发表于 2019-3-23 21:00:47

太赞了!
回复

使用道具 举报

DFBJXU3LQi4  学徒

发表于 2019-6-6 22:40:36

很厉害!值得膜拜
回复

使用道具 举报

gaozi01  学徒

发表于 2019-8-9 15:17:45

棒!
回复

使用道具 举报

DISC96  学徒

发表于 2019-12-10 18:29:09

太棒了!学习一个
回复

使用道具 举报

 初级技匠

发表于 2022-4-21 08:37:14

这个外形很漂亮!
回复

使用道具 举报

派大星ym  初级技匠

发表于 2022-8-16 18:26:25

牛牛牛牛牛
回复

使用道具 举报

派大星ym  初级技匠

发表于 2022-8-16 18:27:58

666666,,,
回复

使用道具 举报

派大星ym  初级技匠

发表于 2022-8-16 18:29:29

,,,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail