Premessa
Con questa guida saremo in grado di leggere i valori di un qualsiasi telecomando IR che trovate nelle vostre abitazioni. Per tutti i neofiti IR intendiamo telecomandi a infrarossi. Il nostro intento sarà quello di approfondire la conoscenza di questa libreria che potrà essere utile un domani per muovere motori accendere luci o altri progetti molto utili, nel nostro caso imapareremo ad accendere un led collegato ad arduino tramite il telecomando di un televisore.
LISTA DEI MATERIALI:
- Arduino Uno rev.3
- TSOP31236 sensore ir (vedere sezione componenti elettronici del sito)
- Led
Procedimento
Nella foto trovate il sensore ricevitore IR o meglio dire il ricevitore a raggi infrarossi per i neofiti. Questo componente possiede tre pin; il piedino più a sinistra nell’immagine corrisponde alla massa, il pin centrale corrisponde alla Vcc cioè la tensione di alimentazione che va da i 2,5 v ai 5,5 v ed infine il terzo pin quello piu a destra si nota che è più distanziato dagli altri due pin, è il pin in dove leggere i “raggi” inviati con il telecomando.
Collegamento hardware
Prendere il microcontrollore arduino collegare la massa del ricevitore IR alla massa dell arduino, poi collegare il positivo del pin centrale del ricevitore IR ai 5 volt dell’arduino ed infine il pin di destra del ricevitore IR al pin 12 dell arduino. otteremo un qualcosa di simile:
Una volta collegato il ricevitore ir vedere lo schema e montare il led al pin 13 la parte positiva e il negativo alla massa. Premessa solo al pin 13 dell arduino non serve mettere una resistenza in serie al led il motivo è perchè il pin 13 è provvisto già di una resistenza da 1kohm. Quindi qualora decidiate di far accendere il led in qualsiasi altro pin che non sia il pin 13 mettere al negativo del led una resistenza da 330 ohm.
Software
Per fare questo progetto si necessita di una libreria denominata IRremote che potete scaricare dal link sotto riportato.
https://www.critics-corporation.com/Negozio/Progetti/Filedownload/IRremote.rar
Una volta scaricato il file.rar della libreria copiarlo nella cartella di aruino dove si trovano le librerie. Di solito in windows si trova in C:\Programmi\Arduino\libraries e copiare la cartella Irremote qui dentro dove troverete tutte le altre librerie standard di arduino.
NOTA BENE
Passiamo ora allo sketch che ricevendo un segnale dal TSOP31238 lo converte nalla stringa decodificata:
#include <IRremote.h> int RECV_PIN = 12; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } }
linea 01: includi la stessa libreria vista sopra IRremote.h, che in questa situazione utilizzerai per decodificare il segnale proveniente dal trasmettitore IR;
linea 03: IRremote come ricevitore puoi decidere a quale pin connettere il sensore, in questo esempio collegalo al pin 12 e definisci la variabile di tipo intero RECV_PIN con valore 12 (il pin a cui hai collegato il sensore TSOP31236);
linea 05: inizializza un oggetto irrecv come istanza della classe IRrecv, passandogli la variabile RECV_PIN che imposta il pin su cui attendere il segnale di decodifica;
linea 07: definisci una variabile results in cui saranno inseriti i risultati della decondifica eseguiti dalla IRremote;
linea 09: definisci la funzione setup() in questo caso ha delle operazioni ben precise da eseguire inizializzare la comunicazione con il monitor seriale e attivare la ricezione;
linea 11: inizializza una comunicazione di tipo seriale a 9600 baud con il cpmpure a cui Arduino è connesso;
linea 12: con il metodo enableIRIn() abilita la comunicazione seriale, da questo momento tutti i segnali percepiti dal ricevitore IR saranno decodificati da Arduino;
linea 15: definisci la funzione loop();
linea 16: inserisci una condizione di controllo basandola sul metodo decode() dell’oggetto irrecv, tale metodo ritorna un valore true in presenza di un segnale valido di decodifica. La variabile results contiene il valore da decodificare;
linea 17: una volta decodificato il valore inviato puoi utilizzarlo per le tue applicazioni, in questo esempio utilizzando il metodo println() della Serial tale valore sarà scritto sul monitor seriale, siccome quello inviato è un codice esadecimale, utilizzia una opzione del metodo println() che ti consente di convertire il valore da scrivere già nella codifica corretta (HEX = Esadecimale);
linea 18: utilizza il metodo resume() della irrecv per rimettere il ricevitore nella condizione di attesa del segnale successivo;
Passaggio finale
Una volta capito come leggere da porta seriale i valori di un telecomando copiate i valori esadecimali dei tasti premuti che saranno visibili dal monitor seriale e incollarli nello sketch successivo sotto riportato nello switch per accendere e spengere un led tramite il tasto “on” del telecomando. i valori che leggerete sono simili a questo B3E2CB06 copiarli nello sketch di sotto in questa maniera 0xB3E2CB06 devono essere preceduti da 0x.
Il codice per l’accensione del led tramire ricevitore infrarosso
#include "IRremote.h" /*-----( Declare Constants )-----*/ int receiver = 12; // pin 1 of IR receiver to Arduino digital pin 11 int led = 13; /*-----( Declare objects )-----*/ IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' /*-----( Declare Variables )-----*/ void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); // Start the receiver pinMode(led, OUTPUT); }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)) // have we received an IR signal? { Serial.println(results.value, HEX); translateIR(); irrecv.resume(); // receive the next value delay(200); } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ void translateIR() // takes action based on IR code received // describing Car MP3 IR codes { int sensorValue=0; sensorValue = digitalRead(led); Serial.println(sensorValue); switch(results.value) { case 0xB3E2CB06: if (sensorValue==0){ Serial.println(" Accensione "); digitalWrite(led, HIGH); break; } if (sensorValue==1){ Serial.println(" Spegnimento "); digitalWrite(led, LOW); break; } default: Serial.println(" other button "); } } //END translateIR /* ( THE END ) */
Buon Progetto