Infinity Mirror-Vu Meter

Il progetto svolto unisce l’effetto generato da un infinity mirror (attraverso il quale è possibile ottenere un’immagine ripetuta continuamente tramite degli specchi) a quello di un vu meter.
Il primo passaggio del progetto è stato la ricerca di informazioni (codici per arduino, materiale necessario, eventuali progetti simili, ecc…) per poi successivamente passare a una lavorazione dell’hardware.
Nel progetto finale sono presenti:

-Shield RGB che permette di gestire i led (red -green – blue)
-Spectrum shield necessaria per poter analizzare e suddividere la frequenza audio dei suoni/canzoni utilizzati come input..
La realizzazione dei filtri passa alto/basso/banda è stata un primo tentativo, ma nonostante le formule applicate e ricontrollate non risultavano performanti a dovere, optando dunque per una shield apposita, i filtri sono stati controllati attraverso PCSU200 un oscilloscopio per pc, con la quale è stato possibile compiere dei test.
Dopo aver dissaldato i cavi per la gestione dei led dal “Led tunnel lamp”, prodotto da cui sono stati utilizzati led e infinity mirror.
Dissaldando i vari fili del prodotto e saldandoli alla nostra scheda è stato possibile accedere alla gestione dei led, facendo in modo che essi funzionassero a ritmo di musica.

Il codice è il seguente:

//Specifica i pin Reset, Strobe
int spectrumReset=7;
int spectrumStrobe=4;

//Specifico il canale di ingresso
//pin A0 per canale destro
//pin A1 per canale sinistro
int spectrumAnalog = 1; //canale sinistro

//creo un vettore per contenere i valori analogici
//delle 7 bande
int Spectrum[7];

void setup()
{
//pin reset e strobe in output
pinMode(spectrumReset, OUTPUT);
pinMode(spectrumStrobe, OUTPUT);

//inizializzo lo spectrum shield
//Strobe
digitalWrite(spectrumStrobe,HIGH);
delay(1);
digitalWrite(spectrumStrobe,LOW);
delay(1);

pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

}

void loop()
{
//esegui la lettura ogni 10mS
readSpectrum();
/*analogWrite(3, Spectrum[1]);
analogWrite(5, Spectrum[2]);
analogWrite(6, Spectrum[0]);*/
//delay(10);

}

void readSpectrum()
{
//Questa funzione legge il valore analogico per ogni banda
//e ne rappresenta il valore tramite dei led

byte Band;
//questo ciclo for viene eseguito 7 volte
for(Band = 0; Band < 7; Band++)
{
//eseguo due letture per poi dividerle per due tramite
//spostamento di bit. Il valore ottenuto viene memorizzato
//nel vettore
Spectrum[Band] = (analogRead(spectrumAnalog) + analogRead(spectrumAnalog) ) >>1;

//invio un impulso al pin strobe per passare al filtro successivo
digitalWrite(spectrumStrobe,HIGH);
digitalWrite(spectrumStrobe,LOW);
}

//una volta effettuata la memorizzazione dei dati
//nel vettore, creo un altro ciclo for
//per rappresentare gli stessi tramite led

for (byte Ciclo = 1; Ciclo < 5; Ciclo++)
{

if(Ciclo==2) //per fare in modo da saltare il pin 4, e passare al pin 5
Ciclo=Ciclo+1;
//recupero il valore memorizzato nel vettore
//traslo il valore intero in un byte
byte x = map(Spectrum[Ciclo], 0, 1023, 0, 255);
int R,G,B;
R=map(Spectrum[6],0,1023,0,254);
G=map(Spectrum[3],0,1023,0,254);
B=map(Spectrum[1],0,1023,0,254);
//se il valore supera una soglia accendi il led
//altrimenti spegnilo
if( x > 120 )
{
if(Ciclo+2==5)
{
analogWrite(Ciclo+2,G);
delay(10); //delay necessario per far funzionare i led a dovere
}
if(Ciclo+2==3)
{
analogWrite(Ciclo+2,R);
delay(10);  //delay necessario per far funzionare i led a dovere
}
if(Ciclo+2==6)
{
analogWrite(Ciclo+2,B);
delay(10); //delay necessario per far funzionare i led a dovere
}

}
else
digitalWrite(Ciclo + 2, LOW);
}
}

 

Infinity mirror - vu meter

Infinity mirror – vu meter

Infinity mirror - vu meter // shield

Infinity mirror – vu meter // shield RGB e spectrum con arduino

Infinity mirror - vu meter

Infinity mirror – vu meter

Infinity mirror - vu meter

Infinity mirror – vu meter // spectrum shield

Infinity mirror - vu meter

Infinity mirror – vu meter // shield RGB

Filtri: -passa alto -passa banda -passa basso

Filtri:
-passa alto
-passa banda
-passa basso

-Stefano Carraro

Lascia un commento