Tutorial: Arduino come trasmettitore IR o come telecomando

In questi giorni ho ripreso un vecchio post del blog: Tutorial Arduino – IR con TSOP31238 e mi sono chiesto se fosse possibile da un altro Arduino inviare dei segnali IR al primo, magari con la stessa libreria IRremote.h, ebbene è possibile.

Arduino telecomando IR

Puoi utilizzare la libreria IRremote sia per decodificare i segnali provenineti da un sensore IR ( TSOP31238 o equivalente) sia per inviare i segnali IR al tuo televisore.

Gli sketch in questo caso sono 2, il primo serve a inviare i segnali, lo andari a caricare sull’Arduino di destra (vedi figura sopra); il secondo li riceve e decodifica, lo andrai a caricare nmell’Arduino di sinistra.

Primo Sketch – invia segnali IR

Premesse: l’esempio utilizza sia per la codifica sia per la decodifica segnali di tipo Sony, ogni telecomando e apparecchio ricevente sono configurati per codificare/decodificare secondo una base comune, la libreria IR prevede alcune codifiche standard: (Sony, Nec, RC5, RC6) e dei metodi di codifica/decodifica di tipo raw, generici con cui puoi codificare e decodificare quello che ti occorre.
inoltre la libreria ad oggi non ti permette di variare il pin di Arduino utilizzabile per pilotare il led IR, devi sempre utilizzare il pin 3 come mostrato in figura.

Ecco lo sketch di codifica o invio:

#include <IRremote.h>

IRsend irsend;

void setup() { }

void loop() {
  for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xa90, 12); // Sony TV power code
    delay(100);
  }
}

Analizziamo lo sketch linea per linea:

linea 01: includi la libreria IRremote.h, la libreria dovrà essere presente nella stessa dir in cui metterai lo sketch, altrimenti l’IDE potrebbe darti errore perchè non la trova;

linea 03: inizializza l’oggetto irsend come istanza della classe IRsend, che ti consentirà di inviare i codici IR;

linea 05: definisci la funzione setup() in questo caso vuota, ricorda che le funzioni setup() e loop() devono sempre esistere in uno sketch e se non devono eseguire compiti puoi dichiararle vuote, come in questo caso;

linea 07: definisci una funzione loop() in questo caso l’unica ad eseguire qualcosa nel nostro sketch;

linea 08: definisci un ciclo di 3 step (0,1 e 2) in cui per ciascuno step invii il codice definito sotto;

linea 09: invia il codice a90 in standard Sony, per farlo utilizza il metodo sendSony( data, nbit ) in cui data è il valore da inviare e nbit la lunghezza della stringa. Esistono altri metodi di codifica, come dicevo sendNEC, sendRC5 e sendRC6 o sendRaw per l’invio di codifiche differenti;

linea 10: imposta un tempo di attesa di 100 millisecondi tra un invio ed il successivo, in questo modo i codici inviati non sono percepiti dal ricevitore  come un unico treno di segnali che potrebbe compromettere la decodifica corretta.

Secondo sketch – ricevi segnali IR

Passiamo ora allo sketch che ricevendo un segnale dal TSOP31238 lo converte nalla stringa decodificata:

#include <IRremote.h>

int RECV_PIN = 11;

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: contrariamente a quanto avviene per la parte di invio quando utilizzi la libreria IRremote come ricevitore puoi decidere a quale pin connettere il sensore, in questo esempio collegalo al pin 11 e definisci la variabile di tipo intero RECV_PIN con valore 11 (il pin a cui hai collegato il sensore TSOP31238);

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;

line a 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;

Procedura di upload

Solitamente questa parte non la descrivo perchè ampiamente documentata sia sul sito ufficiale sia su questo stesso blog, tuttavia in questo caso quello che ti invito a fare è seguire i due semplici passi successivi per non crearti confuzione durante l’upload:

  1. definisci quale Arduino utilizzerai per l’invio e quale per la ricezione;
  2. prendi prima l’arduino che ha deciso di utilizzare per l’invio e collegalo alla USB;
  3. esegui l’upload del primo sketch;
  4. terminata l’operazione 3, scollega l’arduino e collega alla usb quello destinato a fare da ricevitore;
  5. esegui l’upload del secondo sketch;
  6. non scollegare l’arduino, poni led e ricevitore uno difronte all’altro come in figura;
  7. alimenta con una batteria da 9v o simile l’arduino di destra;
  8. apri il monitor seriale e guarda il codice pintato a video.
Arduino telecomando IR

Posizione dei 2 Arduino

Un piccolo trucco:

Siccome stai utilizzando infrarossi non ti sarà possibile vederli, sono invisibili all’ocio umano, per cui se non leggi alcun valore sul monitor seriale potrebbe essere dovuto alla completa mancanza di invio da parte del led, per verificarlo utilizza una comune macchina fotografica digitale, va benissimo anche quella del telefonino o la webcam del computer, inquadra il led e la fotocamera ti mostrerà se è acceso o spento, dovresti vederlo lampeggiare con una sequenza di segnali ogni 100 millisecondi.

Buon divertimento

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-arduino-come-trasmettitore-ir-o-come-telecomando.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.