Gioco musicale per bambini con Arduino

Questo semplice progetto farà felici i vostri bambini (soprattutto i più piccoli) è di semplice realizzazione e di sicuro impatto.
Io l'ho costruito per regalarlo all'asilo dove lavora la mia ragazza, voi fatelo per far felici altri bambini!







Il funzionamento è semplice, sfruttando un sensore di distanza ad ultrasuoni (HC-SR04 1.5 euro su ebay)
l'altoparlante riprodurrà note diverse a seconda della distanza della vostra mano dal sensore.
Ho anche associato un led che si accende per ogni nota.
Quindi con la mano attaccata al sensore si sentirà un DO e si accenderà il led più a sinistra, fino ad arrivare alla massima distanza quando si udirà un SI e si accenderà il led più a destra.
Per controllare il tutto ho usato l'Arduino standalone (potete trovare tutto qui sul blog) e comunque potete usare ugualmente qualsiasi tipo di Arduno.
Spero che vi piaccia, qui di seguito posto lo schema e lo sketch.




Ecco lo sketch da caricare, per farlo funzionare dovete scaricare la libreria NewTone, scompattarla e metterla nella cartella "libraries" che trovate nella directory di installazione dell'IDE di Arduino.

  1. #include <NewTone.h>
  2. int triggerPort = 7;
  3. int echoPort = 8;
  4. int DO = 13;
  5. int RE = 12;
  6. int MI = 11;
  7. int FA = 10;
  8. int SOL = 9;
  9. int LA = 3;
  10. int SI = 2;
  11. void setup() {
  12.   pinMode( DO, OUTPUT);
  13.   pinMode( RE, OUTPUT);
  14.   pinMode( MI, OUTPUT);
  15.   pinMode( FA, OUTPUT);
  16.   pinMode( SOL, OUTPUT);
  17.   pinMode( LA, OUTPUT);
  18.   pinMode( SI, OUTPUT);
  19.   pinMode( triggerPort, OUTPUT );
  20.   pinMode( echoPort, INPUT );
  21. }
  22. void loop() {
  23.   //porta bassa l'uscita del trigger
  24.   digitalWrite( triggerPort, LOW );
  25.   //invia un impulso di 10microsec su trigger
  26.   digitalWrite( triggerPort, HIGH );
  27.   delayMicroseconds( 10 );
  28.   digitalWrite( triggerPort, LOW );
  29.   long duration = pulseIn( echoPort, HIGH );
  30.   long r = 0.034 * duration / 2;
  31.   digitalWrite (DO, LOW);
  32.   digitalWrite (RE, LOW);
  33.   digitalWrite (MI, LOW);
  34.   digitalWrite (FA, LOW);
  35.   digitalWrite (SOL, LOW);
  36.   digitalWrite (LA, LOW);
  37.   digitalWrite (SI, LOW);
  38.   if ( r < 5) {
  39.     tone(6, 523, 400);
  40.     digitalWrite (DO, HIGH);
  41.   }
  42.   else{
  43.     if ( r < 10 && r > 7) {
  44.       tone(6, 587, 400);
  45.       digitalWrite (RE, HIGH);
  46.     }
  47.     else{
  48.       if ( r < 15 && r > 12) {
  49.         tone(6, 659, 400);
  50.         digitalWrite (MI, HIGH);
  51.       }
  52.       else{
  53.         if ( r < 20 && r > 17) {
  54.           tone(6, 698, 400);
  55.           digitalWrite (FA, HIGH);
  56.         }
  57.         else{
  58.           if ( r < 25 && r > 22) {
  59.             tone(6, 784, 400);
  60.             digitalWrite (SOL, HIGH);
  61.           }
  62.           else{
  63.             if ( r < 30 && r > 27) {
  64.               tone(6, 880, 400);
  65.               digitalWrite (LA, HIGH);
  66.             }
  67.             else{
  68.               if ( r < 35 && r > 32) {
  69.                 tone(6, 988, 400);
  70.                 digitalWrite (SI, HIGH);
  71.               }
  72.               else{
  73.               }
  74.             }
  75.           }
  76.         }
  77.       }
  78.     }
  79.   }
  80.   delay( 15 );
  81. }

Se ci sono problemi scrivete pure! Spero vi sia piaciuto, ciao!

Segui Daniele Alberti su Google+

29 commenti:

  1. fatto!!!!!!!!!!!!!. riuscto bene!!!!!............grazie Daniele

    RispondiElimina
    Risposte
    1. Che bello, mi mandi una foto? :)

      Elimina
    2. ho fatto il prototipo su breadbord... se vuoi ti mando la foto di quello...
      ciao

      Elimina
    3. Pensavo il progetto finito, beh quando lo completi mandamela! :)

      Elimina
  2. scusa Daniele... ma quella cosa in basso con un potenziometro... almeno mi sembra.. cos'è?...

    RispondiElimina
  3. scusa signor Daniele, e se si volesse mettere un potenziometro per variare la sensibilità del sensore di distanza ad ultrasuoni ? e specialmente cosa dovrei variare nel programma (oltre che aggiungere una variabile intendo)?

    RispondiElimina
    Risposte
    1. Signor Daniele no dai.. :) dammi del tu! :)
      Comunque cosa intendi per "variare la sensibilità"?

      Elimina
  4. Ciao,

    Grazie per il tuo progetto molto bello, ma vi è la possibilità di regolare il volume visto che recupererò una cassa di uno stereo

    Grazie

    RispondiElimina
    Risposte
    1. Ciao, ho aggiornato lo schema perchè c'era un piccolo errore.
      Ora prima dell'altoparlante ho messo una resistenza da 100 Ohm. Se vuoi variare il volume devi variare quella resistenza ( puoi anche sostituirla con un potenziometro)

      Elimina
  5. Grazie essendo alle prime armi ... Non sapevo come fare

    RispondiElimina
  6. Ciao Daniele, purtroppo sono alle prime armi e nonostante ho seguito passo passo il progetto i led non si accendono, da cosa puo dipendere?

    RispondiElimina
    Risposte
    1. Ciao,
      prova prima ad accendere i led con l'esempio "blink" che trovi sotto file, examples, basic, blink.
      In questo modo puoi verificare se i led sono collegati correttamente, ciao!

      Elimina
  7. Fantastico, lo costruisco subito per mio figlio,
    la struttura la realizzerò con la stampante 3d appena costruita :D
    Puoi spiegare come viene alimentato? E' a batterie giusto? Nelle foto intravedo un altro componente sembra un potenziometro o sbaglio?
    Grazie

    RispondiElimina
    Risposte
    1. Ciao sarà contento ;)
      Si sono batterie, quello è un interruttore a pulsante che accende il gioco (scollega/collega il positivo dalle batterie al circuito)
      Comunque se utilizzi un Arduino "intero" puoi alimentarlo anche con un Power Bank tramite la porta USB. Ciao!

      Elimina
    2. Perfetto grazie, poi guardando meglio mi sono accorto, infatti ho già acquistato il sensore hc più un interruttore :)
      Grazie ancora per la bellissima idea!!

      Elimina
  8. buon lavoro può caricare di nuovo la biblioteca
    404 non riesce e la necessità di programmare

    RispondiElimina
    Risposte
    1. Ciao, grazie della segnalazione, ho corretto il link!

      Elimina
  9. Ciao, nonostante abbia scritto codici e fatto collegamenti su bredboard e scheda Arduino mi esce scritto, al caricamento del codice, questa dicitura:
    Error compiling for board Arduino/Genuino Uno.
    Da cosa puo dipendere?
    grazie in anticipo

    RispondiElimina
    Risposte
    1. Ciao, ti da solo quella dicitura o altro?

      Elimina
    2. Ho risolto, chiedo venia! Ci sono stati problemi nel download. Se volessi inserire un potenziometro per variare la luminosità dei 7 led? It is possible? :)
      Scusi per le mille domande

      Elimina
    3. Purtroppo non essendo uscite analogiche non puoi ridurre la luminosità dei led dall'arduino.
      Potresti pensare di mettere un potenziometro per ogni led, ma mi sembra esagerato. Forse sarebbe possibile mettendo un mosfet tra il catodo dei led e GND, e pilotarlo con un'uscita PWM, ma é da provare la cosa.
      Purtroppo non mi viene in mente altro al momento.

      Elimina
    4. ok, sono riuscito ad usare un solo potenziometro per variare la luminosità dei 7 led.
      Vorrei complicare un po il progetto utilizzando un secondo potenziometro che mi controlli il volume dello speaker. Ho provato ma il suono risulta essere abbastanza disturbato; ha suggerimenti?
      grazie ancora per la disponibilità

      Elimina
    5. Risulta distrurbato mebtme ruoti il potenziamento o anche quando e fermo?

      Elimina
    6. Solo quando ruoto il potenziometro. Sto provando a rimapparlo ma resta sempre disturbato il suono.

      Elimina
    7. È normale, devi usare un potenziometro per audio, oppure con una fotoresistenza e un led pilotato in pwm

      Elimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post