sabato 19 ottobre 2013

Pianola con buzzer, telecomando infrarossi e arduino

Grazie all'aiuto del forum di Arduino sono riuscito a risolvere un problema durante la compilazione del mio sketch della pianola ad infrarossi.
Con il telecomado della mia tv con codifica RC5 posso riprodurre le 7 note su Arduino (si può usare qualsiasi telecomando, basta sostituire i codici!).
Ho collegato il sensore ad infrarossi TSOP4838 al pin 11 e il buzzer al pin 8.
I suono vengono riprodotti con la funzione tone().
La libreria IrRemote e tone() usano lo stesso timer e quindi ho spostato il timer 2 della IrRemote sul timer 1.
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  #define IR_USE_TIMER1   // tx = pin 9
  //#define IR_USE_TIMER2     // tx = pin 3
#endif

Prima di tutto dovete aggiungere questa libreria, modificata da me.
Con la mia libreria modificata il led IR per trasmettere va connesso al pin 9.
Vediamo subito lo schema del circuito:
Lo sketch è il seguente:

venerdì 18 ottobre 2013

Trasmettere comando infrarossi con funzione sendRaw libreria IrRemote

Dopo numerosi tentativi, sono riuscito a ri-trasmettere il codice del mio telecomando samsung con Arduino e la libreria IrRemote (da copiare - incollare dentro la cartella programmi --> arduino--> libraries.
Sono riuscito grazie all'aiuto del forum di Arduino, potete leggere qui e qui.
Per ottenere i valori RAW basta caricare lo sketch "IRrecvDump" inclusso negli esempi della libreria e vedere i codici dal monitor seriale.
Io ho utilizzato un sensore IR TSOP4838 collegato al PIN 11 di Arduino UNO.
Pin - out sensore TSOP4838


Il codice RAW del mio telecomando (non samsung) è il seguente:
Unknown encoding: E0984BB6 (32 bits)
Raw (24): -8386 1300 -400 1300 -350 450 -1200 1300 -400 1300 -350 450 -1200 450 -1250 450 -1200 1300 -350 450 -1200 500 -1200 450 

Per poter trasmetterlo bisogna seguire questi passaggi:
  1. Eliminare tutti i "-" meno (usate la funzione sostituisci del notepad)
  2. Sostituite tutti gli spazi con delle virgole ","
  3. Eliminate il primo valore
  4. E poi create un array.
Dovrete ottenere qualcosa del genere:
unsigned int Signal[] = {1300,400,1300,350,450,1200,1300,400,1300,350,450,1200,450,1250,450,1200,1300,350,450,1200,500,1200,450,1000};

Lo sketch per trasmettere è il seguente: