Arduino e l’audio è una combinazione molto interessante e ti permette di realizzare progetti come il vumeter arduino di Elia e Davide.
Elia e Davide sono studenti dell’ITIS di Vobarno che hanno realizzato e voluto condividere il progetto: vumeter arduino
Presentazione di Elia ( quella di Davide spero arrivi presto )
Classe 1998. Da sempre con la passione per i motori, l’informatica ed i circuiti elettrici.
Studente a tempo pieno, nell’ anno scolastico 2014-2015 mi è stato presentato arduino dal Prof. Fabio Caruccio.
Questo dispositivo mi ha destato fin da subito un certo interesse ed oggi vi presenterò il progetto che segue.
Cos’é un vumeter
Il vu-meter è uno strumento in grado di leggere l’intensità di un segnale audio.
Solitamente vengono montati nei mixer o nei preamplificatori.
Esso può essere digitale: realizzato con diodi led, o analogico: con un indicatore ad ago magnetico.
Il progetto consiste nel riprodurre un vumeter arduino digitale utilizzando il segnale di un dispositivo di riproduzione audio (cellulare,mp3, ecc) che, basandosi sull’intensità del suono emessa, accenderà più led.
Realizzazione del vumeter arduino
Per la realizzazione ti serve:
- un cavo jack
- una breadboard
- 10 led con relative resistenze
- alcuni cavi per breadboard
- una “Y” jack da 3,5mm
- un paio di casse.
Ecco lo schema che Elia ha utilizzato:
per iniziare collega la massa dei led alla massa o pin Gnd di arduino;
il positivo di ogni led va collegato in serie ad una resistenza di valore 220ohm e tramite un cavetto ad un piedino digitale (da 3 a 12);
collega i segnali audio left e right alle entrate analogiche A0 ed A1;
il segnale sleeve (ground) lo colleghi al GND di arduino.
La “Y” jack, da 1 jack maschio a 2 jack femmina da 3,5mm, serve perché un’uscita la colleghi ad arduino e l’altra la colleghi alle casse od ad un qualsiasi altro dispositivo per la riproduzione.
Lo sketch
Ecco lo sketch preparato e commentato da Elia:
//si definiscono i pin ed i rispettivi led int led[10] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int leftChannel = 0; //impostiamo l’ input dell’ audio int left, i; void setup() { for (i = 0; i < 10; i++) //impostiamo i pin come uscite digitali pinMode(led[i], OUTPUT); Serial.begin(9600); //impostazione velocità della porta dati a 9600 b/s } void loop() { left = analogRead(leftChannel); //Lettura dell’input analogica Serial.println(left); left = map(left,200,900,0,10); if (left == 0) { for(i = 0; i < 10; i++) { //lascia spenti i led con volume nullo digitalWrite(led[i], LOW); } } else { for (i = 0; i < left; i++) { //accende i led quando si alza il volume digitalWrite(led[i], HIGH); } for(i = i; i < 10; i++) { //spegne i led quando diminuisce il volume digitalWrite(led[i], LOW); } } }
inizia dalla linea 02: definisci i pin a cui hai collegato i led;
linea 04: definisci il pin a cui hai collegato il canale LEFT dell’audio; sarebbe corretto scrivere A0 ma anche “0” possiamo accettarlo;
linea 05: definisci due variabili di tipo integer che userai in seguito;
linee 08-10: con un ciclo for sull’array led imposta tutti i pin a cui sono connessi i led in modalità OUTPUT;
linea 14: leggi il valore di input sul pin A0. Elia e Davide mi hanno riferito di leggere valori tra 200 e 600 con un volume normale con picchi di 900 con volumi alti e musica da discoteca;
linea 17: mappa il valore letto su un range da 0 a 10 il numero dei led.
linee 18-22: se il valore letto su left è 0, il vumeter arduino non sta rilevando segnale, poni a LOW tutti i led in modo che si spengano;
linee 23-25: in funzione del valore letto e rimappato da left accendi i led corrispondenti;
linee 26-28: partendo dall’indice “i”, ultimo led acceso, e spegni i led accesi precedentemente. Senza queste linee ottieni un vumeter arduino in grado di mostrarti il picco raggiunto dalla tua musica.
Il video del vumeter arduino di Elia e Davide
Grazie Elia e Davide !!!
4 commenti
Vai al modulo dei commenti
Bravissimi! Semplice ed efficace, un “hello world” che deve avervi dato soddisfazioni.
Curiosamente il corpo del programma può ridursi a una sola linea di codice:
digitalWrite(3+i%10, (analogRead(0)-200)/90>i++%10);
…a condizione di dichiarare le variabili byte.
Arduino non ama molto l’operatore ++ usato così, ma a senso dovrebbe funzionare.
Autore
Grazie Roberto,
la tua “compressione del codice” è entusiasmante.
Tuttavia questo è un blog rivolto anche a chi legge per la prima volta di arduino e vuole capire come realizzare il proprio Vumeter per questo di solito preferisco le formule in più passaggi perché risultano più chiare anche per chi non è esperto come te 🙂
Buongiorno mi chiamo Marco, trovo questo progettino molto ma molto interessante tanto da volerlo costruire con un circuito stand alone (senza l’arduino) per un ampli autocostruito e perciò volevo chiedervi gentilmente se l’oscillatore al quarzo va inserito come di solito ai pin “9-10” con relativi condensatori,grazie della vostra risposta,buongiorno Sig. Mauro.
Autore
Ciao Marco,
lascio la tua risposta on-line perché gli autori del progetto possano risponderti.
Se dovessi azzardare io la risposta direi che va esattamente dove lo inseriresti per l’arduino stand-alone, la posizione del quarzo è relativa ad arduino ed è del tutto indipendente dal progetto.