📡 Arduino • Infrarossi • Telecomando IR

Telecomando IR con Arduino e ricevitore TSOP1738

Decodifichiamo i tasti di un normale telecomando a infrarossi e usiamo i codici ricevuti per comandare LED, relè e altri dispositivi collegati ad Arduino.

DifficoltàBase / Intermedia
RicevitoreTSOP1738
ProtocolloInfrarossi 38 kHz
In poche parole: il TSOP1738 riceve il segnale infrarosso modulato del telecomando e lo trasforma in un segnale digitale leggibile da Arduino. Prima individuiamo il codice associato a ogni pulsante, poi lo utilizziamo nel programma per eseguire un’azione.

Cosa realizzeremo

Il progetto originale nasce come lettore e sistema di controllo IR: con il primo sketch leggiamo sul Monitor Seriale il valore trasmesso dal telecomando; con il secondo associamo alcuni valori a un’uscita di Arduino, nell’esempio il pin 9.

Materiale necessario

🔌 Arduino Uno
📡 Ricevitore IR TSOP1738
🎛️ Telecomando TV IR
〰️ Resistenza da 220 Ω
🔗 Cavetti di collegamento
🧩 Breadboard

🧰 Kit Arduino consigliato

Molti progetti del sito utilizzano LED, resistenze, sensori e breadboard. Per iniziare può essere comodo avere un kit completo.

👉 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Nei miei libri trovi spiegazioni progressive, schemi e progetti pratici pensati anche per chi parte da zero.

👉 Scopri i miei libri su Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Come funziona un telecomando IR

Un telecomando non invia semplicemente una luce infrarossa continua: il LED IR trasmette una sequenza modulata che rappresenta il comando premuto. Un ricevitore come il TSOP1738 è progettato per rilevare segnali con portante intorno a 38 kHz e fornire ad Arduino un’uscita digitale già demodulata.

Concetto chiave: il ricevitore non deve “vedere” la luce infrarossa come farebbe un sensore analogico. Il TSOP1738 filtra e demodula il segnale del telecomando, rendendo molto più semplice la decodifica via software.

Schema di collegamento

Schema Arduino con ricevitore infrarossi TSOP1738

Schema originale del progetto. Porta 5 V e GND sulla breadboard e verifica sempre la piedinatura del ricevitore che possiedi.

Attenzione alla piedinatura: ricevitori IR esteticamente simili possono avere una disposizione dei pin differente. Prima di alimentare il componente controlla il datasheet del modello esatto.

Simulazione del circuito

La pagina originale include anche una simulazione Tinkercad del progetto.

▶️ Apri la simulazione Tinkercad

1. Leggere il codice del telecomando

La prima fase consiste nel caricare lo sketch di ricezione, aprire il Monitor Seriale a 9600 baud e premere un pulsante del telecomando. Il programma stampa il valore ricevuto in formato esadecimale.

Sketch storico – lettura dei codici IR
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
  pinMode(9, OUTPUT); // Pin 9 output
}
void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume();// receive the next value
  }

}
Arduino IDE e Monitor Seriale per ricevitore IR

2. Premere un tasto e annotare il valore

  1. Apri il Monitor Seriale.
  2. Punta il telecomando verso il TSOP1738.
  3. Premi il pulsante che vuoi utilizzare.
  4. Annota il valore visualizzato.
  5. Ripeti l’operazione per tutti i tasti che vuoi associare a funzioni Arduino.
Codice telecomando IR visualizzato sul Monitor Seriale Arduino

Nell’esempio storico, premendo il tasto 6 venivano letti i valori 406 oppure 10406.

3. Usare il codice ricevuto per comandare Arduino

Nello sketch originale il valore letto viene confrontato in esadecimale. I codici 0x406 e 0x10406, associati al tasto 6 del telecomando usato nel test, portano HIGH il pin 9; i valori 0x404 e 0x10404, associati al tasto 4, lo riportano LOW.

Sketch storico – comando di un’uscita tramite telecomando
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
  Serial.begin(9600); // for serial monitor output
  irrecv.enableIRIn(); // Start the receiver
  pinMode(9, OUTPUT); // Pin 9 output
}
void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
    irrecv.resume();// receive the next value
  }

  if ( results.value == 0x406 ||  results.value == 0x10406 ){ //tasto 6 sul telecomando
    digitalWrite(9, HIGH);   // set the LED on
  }
 if ( results.value == 0x404 ||  results.value == 0x10404 ){ //tasto 4 sul telecomando
    digitalWrite(9, LOW);   // set the LED 0ff
  }
}
Esempio controllo LED Arduino tramite telecomando IR
Nota importante sulla libreria: questi sketch appartengono alla versione storica del progetto e utilizzano la vecchia API di IRremote, con IRrecv, decode_results, enableIRIn() e decode(&results). Le versioni moderne della libreria IRremote hanno modificato l’API; se compili oggi con una release recente potrebbe quindi essere necessario aggiornare il codice.

Download originali

Conserviamo anche i file scaricabili presenti nella vecchia pagina.

⬇️ Sketch ricevitore IR

⬇️ Sketch trasmettitore IR

⬇️ Libreria IRremote storica del progetto

⬇️ Immagine/schema originale

Nota storica sull’errore TKD2

La pagina originale riportava nel 2016 un problema legato al messaggio TKD2 was not declared in this scope e suggeriva di eliminare la vecchia cartella RobotIRremote dalla directory delle librerie Arduino.

Oggi non applicare automaticamente quella soluzione: era riferita alle installazioni e alle librerie dell’epoca. Con un Arduino IDE moderno conviene prima verificare quali versioni di IRremote sono installate ed eliminare eventuali librerie duplicate o incompatibili soltanto dopo averle identificate.

Ricevitore e trasmettitore: qual è la differenza?

ComponenteFunzione
TSOP1738Riceve e demodula i comandi provenienti da un telecomando IR.
LED infrarossoPuò trasmettere comandi IR se pilotato con il circuito e il software appropriati.
ArduinoDecodifica i comandi ricevuti oppure genera i dati da trasmettere.

Idee per ampliare il progetto

  • accendere e spegnere più LED;
  • pilotare un modulo relè;
  • comandare un servo;
  • realizzare un menu controllato da telecomando;
  • memorizzare i codici di più pulsanti;
  • realizzare un piccolo telecomando universale IR con ricevitore e LED trasmettitore.

Debug rapido

  • controlla VCC, GND e pin di uscita del ricevitore;
  • verifica la piedinatura specifica del tuo TSOP1738;
  • apri il Monitor Seriale alla velocità impostata nello sketch;
  • prova il telecomando a distanza ravvicinata;
  • se il codice non compila, controlla soprattutto la versione della libreria IRremote;
  • se i valori sono diversi da quelli dell’esempio, è normale: usa quelli generati dal tuo telecomando.

Cosa devi ricordare

  • Ogni pulsante del telecomando genera un comando IR che Arduino può identificare.
  • Il TSOP1738 è un ricevitore IR demodulato per segnali intorno a 38 kHz.
  • I codici dell’esempio non sono universali: vanno letti dal proprio telecomando.
  • Una volta conosciuto il codice, puoi associarlo a qualsiasi funzione del programma.
  • Il codice storico può richiedere adattamenti con le versioni moderne di IRremote.

Domande frequenti

Posso usare qualsiasi telecomando?

Puoi provare molti comuni telecomandi a infrarossi. I codici ricevuti dipendono dal telecomando e dal protocollo utilizzato.

Devo usare per forza i codici 406 e 404?

No. Sono soltanto i valori ottenuti nel progetto originale. Devi leggere i codici prodotti dal tuo telecomando e inserirli nello sketch.

Perché lo sketch vecchio non compila con IRremote?

La libreria è cambiata nel tempo e l’API moderna non coincide con quella utilizzata dal progetto storico. Puoi conservare il codice originale come riferimento oppure convertirlo alla versione attuale della libreria.

Posso comandare un relè invece del LED?

Sì, usando un modulo relè adatto ad Arduino e rispettando le necessarie precauzioni elettriche, soprattutto se il relè controlla tensioni pericolose.