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+

16 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
    Risposte
    1. È l'interruttore x accendere il gioco. :)

      Elimina
  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

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

Related Posts Plugin for WordPress, Blogger...