*updated*LED-Tower "Hello", Vu-Meter Advanced Sensing Music Without IC`s Only With Ardurino and Interfacing With PC Windows Software!
7464 Views, 29 Favorites, 0 Comments
*updated*LED-Tower "Hello", Vu-Meter Advanced Sensing Music Without IC`s Only With Ardurino and Interfacing With PC Windows Software!
LED-Tower "Hello", Vu-Meter Advanced Sensing Music without IC`s only with Ardurino
and Interfacing with PC Windows Software!
Hi, Everybody.
What makes this project that cool is the fact, that its sensing music, unlike traditional
VU-Meter`s or Equalizer wich indicates the Level of Incoming Sound by Switching LED`s On,
My LED Tower, looks like it knows when the break or drop or what ever in the song is comnming.
The Bigger Lights i build in, only gets on when the music getting more intensiv.
with Serial Monitor i Managed to Write a Windows App, that Controls Ardurino, Needet to use the
hole Tower as Main Light for my Living room.
Check out here :
Please check out the pictures :
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/01.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/02.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/03.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/04.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/05.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/software.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/06.JPG
How it Works ?
If u ever made music yourself you, know about the lengths of standart music pattern, and
thats the key to this, by counting up variables and compering them.(like 16,32,64,128,256,512 etc...)
Step 1 :
- Drill Holes in your Styropor or plexiglass body.
- Place your LEDS Like You Want.
Step 2 :
- Wire your LEDs with resistors and connect them to any free pin on your ardurino!.
- connect a couple of LEDS with pwm pins
- Test your LEDs with the Basic "Blink-Sketch"
Step 3 :
- connect a analog pin with the audio jack and your Audio source
- Test IT with the Basic "AnalogRead-Sketch"
Step 4 :
open ardurino software to programm it.
upload this code and edit the Arrays with your pins, and the count of pins to the var.
/*
https://dl.dropbox.com/u/3917871/ardurino/LEDTOWER.exe
*/
// pin that the sensor is attached to analog 14 in my case
const int sensorPin = A14;
// the 3 Main Array`s with LED pins
const int ALLLEDS[] = {
6,22,8,26,53,24,48,10,5,42,31,32,33,23,25,9,27,7,44,12,50,34};
const int notPWMLEDS[] = {
22,26,53,24,5,42,31,32,33,23,25,27,50,34};
const int pwmLEDS[] = {
6,8,5,9,44,10,7,12,48};
// These are the number of LED Attaced to the 3 Array`s
const int pwmCOUNT = 9;
const int ALLCOUNT = 22;
const int notPWMCOUNT = 15;
// These are the Special Highlihts connected with a relay
const int relayCh1 = 14; // 2 X 40 Watt Lamps
const int relayCh2 = 15; // 2 X 12 Volt LED-Spot`s LED`s
const int relayCh3 = 17; //licht 3
// variables:
int incomingByte,jaodernein,schleifeEins,schleifeZwei,schleifeDrei,sensorMax,sensorValue,AudioIn,LANGERdelay,DelayValue,counterNull,counterEins,counterZwei,counterDrei,counterVier,counterFunf,counterSechs,counterSieben,nextLED,updown,thisPin = 0; // the sensor value
int sensorMin = 1023; // minimum sensor value
void setup() {
// Configures the reference voltage used for analog input
analogReference(INTERNAL1V1);
Serial.begin(9600);
Serial.println("LED TOWER 'Hello' BY Mhonolog v: 13.5");
pinMode(relayCh1, OUTPUT);
pinMode(relayCh2, OUTPUT);
pinMode(relayCh3, OUTPUT);
pinMode(48, OUTPUT);
for (thisPin = 0; thisPin < ALLCOUNT; thisPin++){
pinMode(ALLLEDS[thisPin], OUTPUT);
}
Serial.println("calibrateing...");
digitalWrite(7, HIGH);
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
Serial.print("set new min to: ");
Serial.print(sensorMin);
Serial.print("\t set new max to: ");
Serial.println(sensorMax);
digitalWrite(7, LOW);
}
void loop(){
startstop();
if (jaodernein == 1){
ReadIt();
MainCounter();
}
}
// This waits for a Serial Command. You Can Type in your Serial Monitor Console or use my Software
// Commands :
// A : for Start
// E : for Stop
// L : Lights On
// K : Lights OFF
//
// if you not want to use this replace "void-loop" with :
/*
void loop(){
ReadIt();
MainCounter();
}
*/
void startstop(){
if (Serial.available() > 0) {
// read the oldest byte in the //Serial buffer:
incomingByte = Serial.read();
if (incomingByte == 'A') { // Anfang
jaodernein = 1;
Serial.println("Starte Visualisierung...");
}
if (incomingByte == 'E') { // Ende
AllLedsOFF();
jaodernein = 0;
Serial.println("Stoppe Visualisierung...");
}
if (incomingByte == 'L') { // Nur Lampe
jaodernein = 0;
digitalWrite(relayCh3, HIGH);
digitalWrite(relayCh2, HIGH);
Serial.println("Licht An...");
}
if (incomingByte == 'K') { // Keine Lampe
jaodernein = 0;
digitalWrite(relayCh3, LOW);
digitalWrite(relayCh2, LOW);
Serial.println("Licht Aus...");
}
}
}
void ReadIt(){
AudioIn = analogRead(sensorPin);
if (AudioIn > sensorMax) {
sensorMax = AudioIn;
}
if (AudioIn < sensorMin) {
sensorMin = AudioIn;
}
AudioIn = map(AudioIn, sensorMin,1023 , 0, sensorMax);
sensorValue = map(AudioIn, sensorMin, sensorMax, 0, 255);
sensorValue = constrain(sensorValue, 0, 255);
DelayValue = map(AudioIn, sensorMin, sensorMax, (AudioIn*3)/100,(AudioIn*10)/100);
}
void MainCounter(){
if (AudioIn == 0 || AudioIn < 50){
AllLedsOFF();
counterNull--;
counterEins--;
}
else
{
if (updown == 0){
nextLED++;
}
if (updown == 1){
nextLED--;
}
if (AudioIn > 50 & AudioIn < 100){
counterEins = counterEins+2;
counterNull--;
counterZwei++;
counterDrei++;
}
if (AudioIn > 100 & AudioIn < 200){
counterVier++;
}
if (AudioIn > 200 & AudioIn < 300){
counterFunf++;
}
if (AudioIn > 400 & AudioIn < 500){
counterSieben--;
}
if (AudioIn > 500 & AudioIn < 700){
counterSieben = counterSieben+3;
}
if (AudioIn > 707){
// digitalWrite(48, LOW);
}
if (AudioIn < 200 & (counterFunf > counterVier) & (counterSechs < counterFunf) & (counterVier < counterDrei) || (schleifeEins < schleifeZwei & schleifeEins < schleifeDrei)){
schleifeEins++;
// digitalWrite(notPWMLEDS[counterFunf], HIGH);
// analogWrite(pwmLEDS[6], sensorValue);
// digitalWrite(pwmLEDS[6], HIGH);
digitalWrite(48, LOW);
digitalWrite(ALLLEDS[nextLED], HIGH);
if ((AudioIn > 333) & (counterNull == -64 || counterNull == -32)){
counterSieben = 0;
digitalWrite(relayCh2,HIGH);
counterSieben = 0;
LANGERdelay = 1;
}
else {
LANGERdelay = 0;
}
if (LANGERdelay == 0) {
// delay(DelayValue*2);
delay(DelayValue);
}
else {
delay(64+DelayValue);
LANGERdelay = 0;
}
}
if ((counterFunf > counterVier || counterFunf < counterVier) || (schleifeZwei < schleifeEins & schleifeZwei < schleifeDrei)){
schleifeZwei++;
// digitalWrite(notPWMLEDS[counterFunf], HIGH);
// digitalWrite(ALLLEDS[1], HIGH);
analogWrite(pwmLEDS[counterSechs], sensorValue);
for (thisPin = sensorValue; thisPin > 0; thisPin--){
sensorValue = sensorValue-5;
}
if ((AudioIn > 333) & (counterNull == -64 || counterNull == -16)){
counterSieben = 0;
digitalWrite(relayCh1,HIGH);
LANGERdelay = 1;
}
else {
LANGERdelay = 0;
}
if (LANGERdelay == 0) {
delay(DelayValue);
}
else {
delay(64+DelayValue);
LANGERdelay = 0;
}
}
if ((AudioIn > 200) &(counterNull < counterEins) & (counterSechs < counterFunf) & (counterVier < counterDrei)|| (schleifeDrei < schleifeEins & schleifeDrei < schleifeZwei)){
digitalWrite(notPWMLEDS[counterFunf], HIGH);
schleifeDrei++;
// digitalWrite(ALLLEDS[2], HIGH);
// digitalWrite(48, HIGH);
// digitalWrite(pwmLEDS[6], LOW);
// for (thisPin = 0;thisPin // digitalWrite(notPWMLEDS[thisPin], HIGH);
// delay(DelayValue);
// digitalWrite(notPWMLEDS[thisPin], LOW);
// }
if ((AudioIn > 333) & (counterNull == -64 || counterNull == -8)){
counterSieben = 0;
digitalWrite(relayCh3,HIGH);
LANGERdelay = 1;
}
else {
LANGERdelay = 0;
}
if (LANGERdelay == 0) {
delay(DelayValue);
}
else {
delay(64+DelayValue);
LANGERdelay = 0;
}
}
if (nextLED >= ALLCOUNT){
updown =1;
}
else if (nextLED <= 0){
updown =0;
}
if (counterZwei > 256){
counterSechs++;
counterZwei = 0;
}
if (counterDrei > 512){
counterDrei = 0;
schleifeEins = 0;
schleifeZwei = 0;
schleifeDrei = 0;
// digitalWrite(pwmLEDS[6], HIGH);
}
if (counterVier > 32){
counterVier = 0;
sensorMax = 0;
// digitalWrite(48, HIGH);
}
if (counterFunf >= notPWMCOUNT){
counterFunf = 0;
}
if (counterSechs >= pwmCOUNT){
counterSechs = 0;
}
if (counterNull >= 64 || counterEins >= 64 || counterNull <= -64 || counterEins <= -64 ){
counterNull = 0;
counterEins = 0;
}
}
}
void AllLedsOFF(){
digitalWrite(relayCh1, LOW);
digitalWrite(relayCh2, LOW);
digitalWrite(relayCh3, LOW);
for (thisPin = 0; thisPin < ALLCOUNT; thisPin++){ // initialize All in one loop
digitalWrite(ALLLEDS[thisPin], LOW);
}
}
and Interfacing with PC Windows Software!
Hi, Everybody.
What makes this project that cool is the fact, that its sensing music, unlike traditional
VU-Meter`s or Equalizer wich indicates the Level of Incoming Sound by Switching LED`s On,
My LED Tower, looks like it knows when the break or drop or what ever in the song is comnming.
The Bigger Lights i build in, only gets on when the music getting more intensiv.
with Serial Monitor i Managed to Write a Windows App, that Controls Ardurino, Needet to use the
hole Tower as Main Light for my Living room.
Check out here :
Please check out the pictures :
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/01.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/02.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/03.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/04.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/05.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/software.JPG
https://dl.dropbox.com/u/3917871/pix/ledtut/Neuer%20Ordner/06.JPG
How it Works ?
If u ever made music yourself you, know about the lengths of standart music pattern, and
thats the key to this, by counting up variables and compering them.(like 16,32,64,128,256,512 etc...)
Step 1 :
- Drill Holes in your Styropor or plexiglass body.
- Place your LEDS Like You Want.
Step 2 :
- Wire your LEDs with resistors and connect them to any free pin on your ardurino!.
- connect a couple of LEDS with pwm pins
- Test your LEDs with the Basic "Blink-Sketch"
Step 3 :
- connect a analog pin with the audio jack and your Audio source
- Test IT with the Basic "AnalogRead-Sketch"
Step 4 :
open ardurino software to programm it.
upload this code and edit the Arrays with your pins, and the count of pins to the var.
/*
https://dl.dropbox.com/u/3917871/ardurino/LEDTOWER.exe
*/
// pin that the sensor is attached to analog 14 in my case
const int sensorPin = A14;
// the 3 Main Array`s with LED pins
const int ALLLEDS[] = {
6,22,8,26,53,24,48,10,5,42,31,32,33,23,25,9,27,7,44,12,50,34};
const int notPWMLEDS[] = {
22,26,53,24,5,42,31,32,33,23,25,27,50,34};
const int pwmLEDS[] = {
6,8,5,9,44,10,7,12,48};
// These are the number of LED Attaced to the 3 Array`s
const int pwmCOUNT = 9;
const int ALLCOUNT = 22;
const int notPWMCOUNT = 15;
// These are the Special Highlihts connected with a relay
const int relayCh1 = 14; // 2 X 40 Watt Lamps
const int relayCh2 = 15; // 2 X 12 Volt LED-Spot`s LED`s
const int relayCh3 = 17; //licht 3
// variables:
int incomingByte,jaodernein,schleifeEins,schleifeZwei,schleifeDrei,sensorMax,sensorValue,AudioIn,LANGERdelay,DelayValue,counterNull,counterEins,counterZwei,counterDrei,counterVier,counterFunf,counterSechs,counterSieben,nextLED,updown,thisPin = 0; // the sensor value
int sensorMin = 1023; // minimum sensor value
void setup() {
// Configures the reference voltage used for analog input
analogReference(INTERNAL1V1);
Serial.begin(9600);
Serial.println("LED TOWER 'Hello' BY Mhonolog v: 13.5");
pinMode(relayCh1, OUTPUT);
pinMode(relayCh2, OUTPUT);
pinMode(relayCh3, OUTPUT);
pinMode(48, OUTPUT);
for (thisPin = 0; thisPin < ALLCOUNT; thisPin++){
pinMode(ALLLEDS[thisPin], OUTPUT);
}
Serial.println("calibrateing...");
digitalWrite(7, HIGH);
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
Serial.print("set new min to: ");
Serial.print(sensorMin);
Serial.print("\t set new max to: ");
Serial.println(sensorMax);
digitalWrite(7, LOW);
}
void loop(){
startstop();
if (jaodernein == 1){
ReadIt();
MainCounter();
}
}
// This waits for a Serial Command. You Can Type in your Serial Monitor Console or use my Software
// Commands :
// A : for Start
// E : for Stop
// L : Lights On
// K : Lights OFF
//
// if you not want to use this replace "void-loop" with :
/*
void loop(){
ReadIt();
MainCounter();
}
*/
void startstop(){
if (Serial.available() > 0) {
// read the oldest byte in the //Serial buffer:
incomingByte = Serial.read();
if (incomingByte == 'A') { // Anfang
jaodernein = 1;
Serial.println("Starte Visualisierung...");
}
if (incomingByte == 'E') { // Ende
AllLedsOFF();
jaodernein = 0;
Serial.println("Stoppe Visualisierung...");
}
if (incomingByte == 'L') { // Nur Lampe
jaodernein = 0;
digitalWrite(relayCh3, HIGH);
digitalWrite(relayCh2, HIGH);
Serial.println("Licht An...");
}
if (incomingByte == 'K') { // Keine Lampe
jaodernein = 0;
digitalWrite(relayCh3, LOW);
digitalWrite(relayCh2, LOW);
Serial.println("Licht Aus...");
}
}
}
void ReadIt(){
AudioIn = analogRead(sensorPin);
if (AudioIn > sensorMax) {
sensorMax = AudioIn;
}
if (AudioIn < sensorMin) {
sensorMin = AudioIn;
}
AudioIn = map(AudioIn, sensorMin,1023 , 0, sensorMax);
sensorValue = map(AudioIn, sensorMin, sensorMax, 0, 255);
sensorValue = constrain(sensorValue, 0, 255);
DelayValue = map(AudioIn, sensorMin, sensorMax, (AudioIn*3)/100,(AudioIn*10)/100);
}
void MainCounter(){
if (AudioIn == 0 || AudioIn < 50){
AllLedsOFF();
counterNull--;
counterEins--;
}
else
{
if (updown == 0){
nextLED++;
}
if (updown == 1){
nextLED--;
}
if (AudioIn > 50 & AudioIn < 100){
counterEins = counterEins+2;
counterNull--;
counterZwei++;
counterDrei++;
}
if (AudioIn > 100 & AudioIn < 200){
counterVier++;
}
if (AudioIn > 200 & AudioIn < 300){
counterFunf++;
}
if (AudioIn > 400 & AudioIn < 500){
counterSieben--;
}
if (AudioIn > 500 & AudioIn < 700){
counterSieben = counterSieben+3;
}
if (AudioIn > 707){
// digitalWrite(48, LOW);
}
if (AudioIn < 200 & (counterFunf > counterVier) & (counterSechs < counterFunf) & (counterVier < counterDrei) || (schleifeEins < schleifeZwei & schleifeEins < schleifeDrei)){
schleifeEins++;
// digitalWrite(notPWMLEDS[counterFunf], HIGH);
// analogWrite(pwmLEDS[6], sensorValue);
// digitalWrite(pwmLEDS[6], HIGH);
digitalWrite(48, LOW);
digitalWrite(ALLLEDS[nextLED], HIGH);
if ((AudioIn > 333) & (counterNull == -64 || counterNull == -32)){
counterSieben = 0;
digitalWrite(relayCh2,HIGH);
counterSieben = 0;
LANGERdelay = 1;
}
else {
LANGERdelay = 0;
}
if (LANGERdelay == 0) {
// delay(DelayValue*2);
delay(DelayValue);
}
else {
delay(64+DelayValue);
LANGERdelay = 0;
}
}
if ((counterFunf > counterVier || counterFunf < counterVier) || (schleifeZwei < schleifeEins & schleifeZwei < schleifeDrei)){
schleifeZwei++;
// digitalWrite(notPWMLEDS[counterFunf], HIGH);
// digitalWrite(ALLLEDS[1], HIGH);
analogWrite(pwmLEDS[counterSechs], sensorValue);
for (thisPin = sensorValue; thisPin > 0; thisPin--){
sensorValue = sensorValue-5;
}
if ((AudioIn > 333) & (counterNull == -64 || counterNull == -16)){
counterSieben = 0;
digitalWrite(relayCh1,HIGH);
LANGERdelay = 1;
}
else {
LANGERdelay = 0;
}
if (LANGERdelay == 0) {
delay(DelayValue);
}
else {
delay(64+DelayValue);
LANGERdelay = 0;
}
}
if ((AudioIn > 200) &(counterNull < counterEins) & (counterSechs < counterFunf) & (counterVier < counterDrei)|| (schleifeDrei < schleifeEins & schleifeDrei < schleifeZwei)){
digitalWrite(notPWMLEDS[counterFunf], HIGH);
schleifeDrei++;
// digitalWrite(ALLLEDS[2], HIGH);
// digitalWrite(48, HIGH);
// digitalWrite(pwmLEDS[6], LOW);
// for (thisPin = 0;thisPin
// delay(DelayValue);
// digitalWrite(notPWMLEDS[thisPin], LOW);
// }
if ((AudioIn > 333) & (counterNull == -64 || counterNull == -8)){
counterSieben = 0;
digitalWrite(relayCh3,HIGH);
LANGERdelay = 1;
}
else {
LANGERdelay = 0;
}
if (LANGERdelay == 0) {
delay(DelayValue);
}
else {
delay(64+DelayValue);
LANGERdelay = 0;
}
}
if (nextLED >= ALLCOUNT){
updown =1;
}
else if (nextLED <= 0){
updown =0;
}
if (counterZwei > 256){
counterSechs++;
counterZwei = 0;
}
if (counterDrei > 512){
counterDrei = 0;
schleifeEins = 0;
schleifeZwei = 0;
schleifeDrei = 0;
// digitalWrite(pwmLEDS[6], HIGH);
}
if (counterVier > 32){
counterVier = 0;
sensorMax = 0;
// digitalWrite(48, HIGH);
}
if (counterFunf >= notPWMCOUNT){
counterFunf = 0;
}
if (counterSechs >= pwmCOUNT){
counterSechs = 0;
}
if (counterNull >= 64 || counterEins >= 64 || counterNull <= -64 || counterEins <= -64 ){
counterNull = 0;
counterEins = 0;
}
}
}
void AllLedsOFF(){
digitalWrite(relayCh1, LOW);
digitalWrite(relayCh2, LOW);
digitalWrite(relayCh3, LOW);
for (thisPin = 0; thisPin < ALLCOUNT; thisPin++){ // initialize All in one loop
digitalWrite(ALLLEDS[thisPin], LOW);
}
}