音乐IQ灯

2015-07-313.4万
精华项目
AI 快速预览详细 收起
音乐IQ灯是基于DFRobot的RGB全彩LED灯带的应用,可以变幻成多种产品。它使用了DFR0126音频分析模块和炫彩WS2812 LED灯带,结合Arduino控制器,使每个LED小灯可以独立控制,并根据音乐的不同频率做出相应变换。项目所需元件包括音频分析模块、模拟声音传感器、炫彩WS2812 LED灯带和Arduino控制器。通过焊接与连接各元件,安装库文件并烧录代码,即可实现音乐与灯光的互动效果。
一、基本介绍

这款音乐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啦~






创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(15)
派大星ym
派大星ym
,,,
派大星ym
派大星ym
666666,,,
派大星ym
派大星ym
牛牛牛牛牛
诩
这个外形很漂亮!
DISC96
DISC96
太棒了!学习一个
gaozi01
gaozi01
棒!
DFBJXU3LQi4
DFBJXU3LQi4
很厉害!值得膜拜
张滋榆
张滋榆
太赞了!
Jane
Jane
酒吧神器~
hnyzcj
hnyzcj
好漂亮
qq815076543322
qq815076543322
太美了 这画面怎么:lol
dbc0301
dbc0301
连代码都附上了,楼主真是辛苦了。
dbc0301
dbc0301
先顶一个吧。
丄帝De咗臂
丄帝De咗臂
3D打印吧;P;P
phoebe.wang40
phoebe.wang40
漂亮,第一次看到这么多形态的IQ灯
sun20100480
sun20100480
作者
回复phoebe.wang40
我现在是IQ灯拼接小达人,五分钟搞定一个:lol
- 没有更多了 -