【求翻译~】音频电平器(听音乐时一闪一闪的小灯)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5609|回复: 2

【求翻译~】音频电平器(听音乐时一闪一闪的小灯)

[复制链接]
发表于 2012-9-30 21:44 | 显示全部楼层 |阅读模式
好东西啊......不过代码有问题,求修改~
转自http://www.instructables.com/id/Beat-Sync/?ALLSTEPS
——————————————————————————————————————————————
Beat Sync is a single frequency audio spectrum volume meter.  It can isolate around a certain frequency ( I choose the bass ) and display it on a creative 8 segment LED bar graph.  This is meant to be quite simple, yet allowing room for more difficult upgrades.  It is built around the Arduino Open Source Environment. The circuitry is also quite simple.

So if you want to show off at your next house party or just make something cool to add some visualization to music, lets go!

Step 1Parts List



Basic
- Arduino UNO (or similar)
- 8 Super Bright LEDs
- 8 Resistors
- Wire/Ribbon Cable
- 3.5 mm Female Connector
- Soldiering Equipment
- Poster Board
- X-acto Knife
- Audio Equipment
- Mini Breadboard
- Mini Blank Circuit Board
- Heat Shrink

Additional
- 10 k Potentiometer
- Potentiometer Knob
- Colored PVC/Arcylic Film
- Diffuser

Step 2The Enclosure



The enclose is pretty much a shelf. It can be made out of wood, plastic, or poster/cardboard. Then you can choose to glue the pieces together, make them interlocking or nail/staple gun them.  In the spirit of recycling and reusing, I have found an interlocking cardboard design works well.

The dimensions are kind of up to your likes, whether you like squares or rectangles.  This design gives more rectangular segments but you can draw it out before hand to see what it could look like.

1 - 8" * 24"  (back)
2 - 4" * 24"  (sides)
8 - 4" * 8"    (dividers)

I left the one side uncut and had to ducktape the other(because I accidentally cut it).  It folds into nice 90 degree edges that way.

NOTE - The dividers have edges that extend past the 8" width to meet flush with the sides.  The sides also have notches cut into them. You should be able to figure out a spacing that makes sense.

A laser cutter would work much better than blades or saws.
Step 3The Circuity



The circuit is fairly simple although spread out when all said and done.  The 8 LED's anode legs are connected to the Arduino's digital output pins(5-12) and the grounds are joined together.  -- Based on all rational electrical knowledge you should put in current limiting resistors between each anode and the Arduino, but because the LEDs are powered for such a short time, I believe it is simpler without them. --

The 3.5mm female audio connector's ground should be joined with the LED's common ground and then to the Arduino.  -- The ground on the audio connector should be the furthest from the outside. --

The Right or Left channel of the audio connector will be attached to one of the Arduino's analog input pins.

Now for the code...

The breadboard and schematic view were done in Fritzing!
Step 4The Code


The code relies on a Fast Fourier Transform Library, which can be found here.  The FFT, in short breaks down the audio signal into 14 frequency bands and from that this project continues with the lowest.  The bass...  Then some if-else statements to light up specific LEDs.

Here is the code as in Arduino 1.0.1

//
//  Beat Sync
//  A music visualiztion device.
//  Created by
//  Carl Smith
//  penguinmagic@hotmail.com
//

#include <fix_fft.h>

int led[] = {5,6,7,8,9,10,11,12};

int x = 0;

char im[128], data[128];

char data_avgs[14];

int i=0,val;

#define AUDIOPIN 3

void setup()
{
  for (int i = 0; i <8; i++)
  {
    pinMode(led, OUTPUT);
  }
  Serial.begin(9600);

}

void loop()
{
  for (i=0; i < 128; i++){                                   
    val = analogRead(AUDIOPIN);                                 
    data = val;                                    
    im = 0;                                                   
  };

  fix_fft(data,im,7,0);

  for (i=0; i< 64;i++){                                    
    data = sqrt(data * data + im * im);  // this gets the absolute value of the values in the
    //array, so we're only dealing with positive numbers
  };   

  
  // average bars together
  for (i=0; i<14; i++) {
    data_avgs = data[i*4] + data[i*4 + 1] + data[i*4 + 2] + data[i*4 + 3];   // average together
  
    data_avgs = map(data_avgs, 0, 30, 0, 9);                              // remap values for LoL
  }
  int value = data_avgs[0];//0 for bass
  ledArray(value);
}
void ledArray(int input)
{
  //
  if (input > 8)
  {
     for (int i = 0; i <8; i++)
     {
       digitalWrite(led, HIGH);
     }
  }
  else if (input > 7)
  {
     for (int i = 0; i <7; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 7; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else if (input > 6)
  {
     for (int i = 0; i <6; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 6; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else if (input > 5)
  {
     for (int i = 0; i <5; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 5; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else if (input > 4)
  {
     for (int i = 0; i <4; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 4; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else if (input > 3)
  {
     for (int i = 0; i <3; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 3; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else if (input > 2)
  {
     for (int i = 0; i <2; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 2; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else if (input > 1)
  {
     for (int i = 0; i <1; i++)
     {
       digitalWrite(led, HIGH);
     }
     for (int i = 1; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
  else
  {
    for (int i = 0; i <8; i++)
     {
       digitalWrite(led, LOW);
     }
  }
}
Step 5Putting It All Together



First is to measure out the distance of the height and divide it by 9.  That will be the LED spacing and I use a safety pin to poke holes in the card board for the LEDs to poke through.

Then bend the legs of the LEDs.  MAKE SURE TO HAVE ANODES AND CATHODES ON SAME SIDE


After making this design a few times, I have found a ribbon cable makes it easier to keep track of pins between the different elements (refer to previous step in circuity).  I also used heat shrink to connect the wires and LEDs.  The anodes all used different wires on the ribbon cable and the ground (cathode) used a common wire.

For simplicity I cut a mini circuit board to soldier the wire and headers into because the ribbon cable is too fragile for the bread board.
Step 6Test it!



Load it all up and see if it works!  Then add a base and insert the dividers.  I have a 3.5 mm audio splitter plugged into the female audio connecter of the Beat Sync.  The audio source (computer or iPod) and the speakers are plugged into the female end of the splitter.  Also through a diffuser on the front to make it look better, a few layers of wax paper works quite well.



Step 7Party On



Step 8Extras

After you get the basic version working you can add a few extras to make it even better.

1.  An potentiometer can be added to and the values can be remapped (using map func.)  and the value can be the the high end of volume analyzed in this line of code.  (It would be an integer value in place of the 30)

data_avgs = map(data_avgs, 0, 30, 0, 9);                              // remap values for LoL

2.  You may realize that there is some feed back in which ever channel is being used from the audio sensing and the volume will be lower in the channel too.  You could use an op-amp to create a voltage follower.

3. Upgrade the diffuser to add some color.  I have added some color to simulate the max volume with yellow, orange and red.  A fluorescent light cover (the industrial type found in schools that are 4' long) have a diamond like pattern that looks good too.
 楼主| 发表于 2012-9-30 21:45 | 显示全部楼层
图片挂了......将就一下吧
发表于 2012-12-24 22:30 | 显示全部楼层
看不懂,你能翻译下不。。。我看看有意思没。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 22:41 , Processed in 0.077950 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表