Led a ritmo di musica con Arduino

Benvenuti nel nuovo tutorial che andremo a trattare. Oggi vi spiegherò come accendere delle strisce di led a ritmo di musica.

Il materiale che verrà utilizzato per questo tutorial sarà:

  • Una scheda Arduino (Io abitualmente uso la Mega 2560 in quanto è una scheda ricca di pin, sia digitali che analogici);
  • Una breadboard;
  • 9 Strisce di led;
  • 9 Transistor;
  • 9 resistenze da 2.2KΩ;
  • Un trasformatore 220V — > 12V
  • Cavo jack 3,5 mm  Maschio — Femmina
led_strip_driver
Circuito per pilotare una striscia di led

Iniziamo subito questo progetto costruendo il nostro dispositivo. L’ elettronica di questo progetto non è eccessivamente complessa, ma è ripetitiva in quanto dovremo creare un piccolo circuito sulla nostra breadboard per ogni singola striscia di led che vorremmo far accendere. Nel nostro caso sono 9 ripetizioni dello stesso circuito che troveremo in immagine. Questo circuito verrà utilizzato come interruttore per la striscia di led, infatti ho usato il transistor S8050 D 331 proprio per questo scopo. In questo modo andremo ad alimentare con 12V  i nostri led in quanto siamo impossibilitati ad accendere i led in modo diretto dalla nostra scheda.

Sempre nella immagine V1 rappresenta il trasformatore. La potenza del trasformatore dipende dalla quantità di Led Strip che si vorranno accendere e se con lo stesso trasformatore si vuole anche alimentare la scheda per pilotare tutto.

Esempio: 50 W di potenza mi sono bastati per alimentare 9 strisce di led composte da 3 led ciascuna, ma non così facendo non ho la possibilità di alimentare la scheda arduino, perché aggiungendo questo collegamento toglierei della potenza ai led che si accenderebbero ma non al massimo della loro luminosità. (ho risolto questo problema alimentando arduino con la presa USB, altrimenti potreste optare per un trasformatore più potente).

Per quanto riguarda la logica del nostro codice, essa segue una semplice linea di principio:

  1. Catturare i volt in ingresso
  2. Assegnare quel valore a una variabile
  3. Controllare in quale range si trova la variabile
  4. Attivare i Pin che rientrano nel range in cui si trova la variabile

Es:

ValoreIngresso=3;

se  1<ValoreIngresso {accendi pin 1} altrimenti {spegni pin 1};//acceso
se  2<ValoreIngresso {accendi pin 2} altrimenti {spegni pin 2};//acceso
se  3<ValoreIngresso {accendi pin 3} altrimenti {spegni pin 3};//acceso
se  4<ValoreIngresso {accendi pin 4} altrimenti {spegni pin 4};//SPENTOO!!!

Così facendo se il valore assegnato a un Pin è più piccolo del valore in ingresso esso farà in modo di accendere quel Pin, di conseguenza più il valore in ingresso è alto più Pin si accenderanno.

Il codice che ho creato e che troverete in seguito mi sembra abbastanza commentato ma se non capite qualcosa non esitate a chiedere nei commenti 😉

int r=A3;
int soundR=0,vm=10;
void setup() {
    pinMode(r,INPUT);
    pinMode(23,  OUTPUT);
    pinMode(27,  OUTPUT);
    pinMode(31,  OUTPUT);
    pinMode(35,  OUTPUT);
    pinMode(39,  OUTPUT);
    pinMode(43,  OUTPUT);
    pinMode(47,  OUTPUT);
    pinMode(51,  OUTPUT); 
    pinMode(53,  OUTPUT);  
    Serial.begin(9600);
}
void loop() {
    soundR = analogRead(r); //uso il canale destro per i led
    Serial.println(soundR);
    //controllo per l' accensione dei led   
    //partenza dal centro apertura a stella 
    
    /*if ( (vm *(valore_di_configurazione))  <soundR) 
     *   digitalWrite (ledStrip_pin ,HIGH); 
     *else 
     *   digitalWrite (ledStrip_pin ,LOW);
    */

    if ( (vm *1.75)  <soundR) {digitalWrite (23 ,HIGH);} else {digitalWrite (23 ,LOW);}//alto destra
    if ( (vm *4)  <soundR) {digitalWrite (53,HIGH);} else {digitalWrite (53,LOW);} //alto centro 
    if ( (vm *3)  <soundR) {digitalWrite (35,HIGH);} else {digitalWrite (35,LOW);}//alto sinistra
    
    if ( (vm *6)  <soundR) {digitalWrite (27,HIGH);} else {digitalWrite (27,LOW);}//centro destra
    if ( (vm *1.15)  <soundR) {digitalWrite (47,HIGH);} else {digitalWrite (47,LOW);} //centro centro  
    if ( (vm *6.5)  <soundR) {digitalWrite (43,HIGH);} else {digitalWrite (43,LOW);} //centro sinistra
    
    if ( (vm *3.75)  <soundR) {digitalWrite (31,HIGH);} else {digitalWrite (31,LOW);}//basso destra
    if ( (vm *5.3)  <soundR) {digitalWrite (39,HIGH);} else {digitalWrite (39,LOW);} //basso centro    
    if ( (vm *2.6)  <soundR) {digitalWrite (51,HIGH);} else {digitalWrite (51,LOW);}  //basso sinistra
    
    delay(10);   
}

Una volta concluso il progetto e fatto partire oltre alla immensa soddisfazione avrete anche una stanza che sembra essere una discoteca, manca solo il laser (arriverà in seguito :D). Nel video si vedrà l’ effetto finale che si ottiene con questo progetto.

[ATTENZIONE] Non tutti i PC in uscita hanno le stesse caratteristiche in termini di segnale. Quindi ci potrebbe essere la possibilità che, collegando il nostro dispositivo a un PC o altro riproduttore musicale, dovremmo riconfigurare i valori agendo sul codice.


15 commenti su “Led a ritmo di musica con Arduino”

  1. Grazie mille per l’informazione.
    Quindi per realizzare il circuito su breadboard devo tenere conto dello schema elettrico riportato nella spiegazione?

    Rispondi
  2. Grazie mille per l’informazione.
    Quindi per realizzare il circuito su breadboard devo tenere conto dello schema elettrico riportato nella spiegazione?

    Rispondi
    • Il jack é composto da 3 pin dove uno é il GND e gli altri 2 sono il canale sinistro e il canale destro (ho usato un normalissimo jack stereo senza il canale ausiliario) il GND lo lasciato così come é e così ho fatto anche con uno dei 2 canali. Invece con il terzo pin gli ho fatto un giunto in modo da averlo splittato in 2. Un lato va direttamente al jack femmina mentre il lato rimanente l’ho collegato a un pin Analogico di Arduino

      Rispondi
    • Il jack é composto da 3 pin dove uno é il GND e gli altri 2 sono il canale sinistro e il canale destro (ho usato un normalissimo jack stereo senza il canale ausiliario) il GND lo lasciato così come é e così ho fatto anche con uno dei 2 canali. Invece con il terzo pin gli ho fatto un giunto in modo da averlo splittato in 2. Un lato va direttamente al jack femmina mentre il lato rimanente l’ho collegato a un pin Analogico di Arduino

      Rispondi
  3. Io ho collegato il jack delle cuffiette al pc… Ma primo la musica non si sente e secondo i led non si accendono. Deduco che dovrei avere uno sdoppiatore per collegarci una cassa? Su youtube però sembra che la musica parta proprio dal pc senza utilizzare casse esterne

    Rispondi
    • Salve Gabriele, semplicemente ho fatto in modo che il dispositivo stesse tra il Pc che manda la musica e le casse che la riproducono. Infatti nel mio dispositivo ci sono 2 jack, uno maschio e uno femmina. Il maschio l’ho collegato al pc e alla femmina gli ho collegato il jack delle casse. Internamente al dispositivo deve essere creato uno stoppiamento che porta il segnale sia elle casse (ovvero il jack femmina) sia ad Arduino che ne legge il valore e attiva il relativo led.

      Rispondi
  4. Io ho collegato il jack delle cuffiette al pc… Ma primo la musica non si sente e secondo i led non si accendono. Deduco che dovrei avere uno sdoppiatore per collegarci una cassa? Su youtube però sembra che la musica parta proprio dal pc senza utilizzare casse esterne

    Rispondi
    • Salve Gabriele, semplicemente ho fatto in modo che il dispositivo stesse tra il Pc che manda la musica e le casse che la riproducono. Infatti nel mio dispositivo ci sono 2 jack, uno maschio e uno femmina. Il maschio l’ho collegato al pc e alla femmina gli ho collegato il jack delle casse. Internamente al dispositivo deve essere creato uno stoppiamento che porta il segnale sia elle casse (ovvero il jack femmina) sia ad Arduino che ne legge il valore e attiva il relativo led.

      Rispondi
  5. Io sto realizzando questo progetto! Il circuito disegnato sopra e quello in uscita vero? E quello in entrata? Cioè da dove entra il segnale musicale per poi far accendere i led a ritmo?

    Rispondi
    • Si il circuito sopra disegnato è quello di uscita, quello di entrata non l’ho riportato perché è semplicemente il cavo del segnale della musica collegato a un pin analogico di arduino.

      Rispondi

Lascia un commento