Componenti · 5 min di lettura

Ricevitore IR e telecomando: progetti telecomandati con Arduino

Come funziona un ricevitore a infrarossi (IR)? Collegamento del VS1838B, lettura dei codici dei tasti con IRremote, protocollo NEC, controllo di LED e relè con il telecomando, invio IR con un LED infrarosso, ESP32 e Pico.

I telecomandi di TV, condizionatori e impianti stereo funzionano con la luce infrarossa (IR). Aggiungendo ad Arduino un ricevitore IR da pochi centesimi puoi leggere i tasti di quasi ogni telecomando di casa e usarli per comandare lampade, LED, motori o musica. Niente abbinamenti, app o Internet: basta puntare il telecomando verso la scheda e premere un tasto. È il modo più facile ed economico per realizzare il tuo primo progetto telecomandato.

Ricevitore a infrarossi IR VS1838B
Ricevitore a infrarossi (VS1838B): nella cupola nera ci sono un diodo sensibile alla luce e un piccolo circuito che decodifica il segnale; ha 3 piedini.

Come funziona un telecomando a infrarossi?

Il LED IR sulla punta del telecomando emette luce a circa 940 nm, invisibile all'occhio. La luce non resta sempre accesa: viaggia su un segnale portante che lampeggia 38.000 volte al secondo. Il circuito del ricevitore considera solo la luce che sfarfalla a quella frequenza, quindi sole e lampade non possono disturbare il segnale. Il ricevitore trasforma questo sfarfallio in impulsi digitali puliti e porta la sua uscita a LOW finché il segnale è presente.

Quale tasto è stato premuto è codificato nella durata degli impulsi e delle pause tra di essi. Per questo esistono diversi "linguaggi", chiamati protocolli: il più diffuso è il NEC (un byte di indirizzo e uno di comando), e sono comuni anche i protocolli Sony, RC5 (Philips) e Samsung. Per fortuna la decodifica la fa la libreria: tu leggi solo il codice del tasto.

Per capire se un telecomando funziona, punta la fotocamera del telefono verso il suo LED e premi un tasto. La luce infrarossa che a occhio nudo non vedi compare sullo schermo come un lampeggio bianco-violaceo.

Caratteristiche tecniche (VS1838B)

CaratteristicaValore
Frequenza portante38 kHz
Lunghezza d'ondaCirca 940 nm
Alimentazione2,7–5,5 V
Portata8–10 m (in base alla batteria del telecomando e all'angolo)
Angolo di ricezioneCirca ±35°
UscitaLOW quando c'è segnale (attiva bassa)
PinOUT, GND, VCC

Collegamento del ricevitore IR

Pin del ricevitoreArduino UnoESP32Raspberry Pi Pico
OUT (S)D2GPIO 15GP16
GND (–)GNDGNDGND
VCC (+)5V3V33V3
Sul VS1838B nudo, con la cupola rivolta verso di te, l'ordine dei pin da sinistra a destra è OUT, GND, VCC; nei moduli montati su scheda segui le scritte stampate. Invertire VCC e GND fa scaldare il ricevitore e lo guasta in pochi secondi.

Leggere i codici dei tasti con la libreria IRremote

Nel Gestore librerie cerca IRremote e installa la libreria di Armin Joachimsmeyer. Il codice qui sotto funziona con la versione 4.x; a ogni pressione scrive nel Monitor seriale il protocollo, l'indirizzo e il codice di comando. Se negli esempi più vecchi su Internet trovi comandi come IRrecv e decode(&results), appartengono a una versione vecchia.

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4
5void setup() {
6  Serial.begin(9600);
7  IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);   // sinyal gelince dahili LED yanar / onboard LED blinks on signal
8}
9
10void loop() {
11  if (IrReceiver.decode()) {
12    Serial.print("Komut / command: 0x");
13    Serial.println(IrReceiver.decodedIRData.command, HEX);
14    IrReceiver.printIRResultShort(&Serial);        // protokol ve adres / protocol and address
15    IrReceiver.resume();                           // sonraki tuşa hazırlan / ready for the next key
16  }
17}

Premi i tasti del telecomando uno alla volta e annota i codici. I piccoli telecomandi a 21 tasti dei kit usano di solito il protocollo NEC e i loro codici sono quasi sempre quelli qui sotto; verificali comunque leggendo il tuo telecomando:

TastoComando (NEC)
CH-0x45
CH0x46
CH+0x47
PREV0x44
NEXT0x40
PLAY/PAUSE0x43
VOL-0x07
VOL+0x15
00x16
10x0C
20x18
30x5E

Comandare un LED e un relè con il telecomando

Una volta noti i codici, puoi dare un compito a ogni tasto. Nell'esempio qui sotto il tasto "1" accende e spegne un relè, mentre VOL+ e VOL- regolano la luminosità di un LED con il PWM. Tenendo premuto un tasto, il telecomando invia segnali di ripetizione; nelle funzioni on-off vanno ignorati, altrimenti il relè continua ad accendersi e spegnersi. Per il collegamento del relè vedi Cos'è un modulo relè?

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_PIN = 2;
4const int LED_PIN = 9;       // PWM pini / PWM pin
5const int RELAY_PIN = 7;     // aktif LOW röle / active-LOW relay
6
7bool relayOn = false;
8int brightness = 128;
9
10void setup() {
11  pinMode(LED_PIN, OUTPUT);
12  pinMode(RELAY_PIN, OUTPUT);
13  digitalWrite(RELAY_PIN, HIGH);
14  IrReceiver.begin(IR_PIN);
15}
16
17void loop() {
18  if (!IrReceiver.decode()) return;
19  bool repeat = IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT;   // tuş basılı tutuluyor / key held down
20  switch (IrReceiver.decodedIRData.command) {
21    case 0x0C:                               // "1": röleyi aç-kapa / toggle the relay
22      if (!repeat) {
23        relayOn = !relayOn;
24        digitalWrite(RELAY_PIN, relayOn ? LOW : HIGH);
25      }
26      break;
27    case 0x15:                               // VOL+: daha parlak / brighter
28      brightness = min(brightness + 15, 255);
29      break;
30    case 0x07:                               // VOL-: daha sönük / dimmer
31      brightness = max(brightness - 15, 0);
32      break;
33  }
34  analogWrite(LED_PIN, brightness);
35  IrReceiver.resume();                       // sonraki tuşa hazırlan / ready for the next key
36}
Su Arduino Uno la libreria IRremote usa il Timer2. Per questo il PWM sui pin 3 e 11 e la funzione tone() usata con i buzzer possono entrare in conflitto con la libreria; collega il LED al pin 5, 6, 9 o 10.

Inviare segnali IR con Arduino

Arduino non si limita ad ascoltare i telecomandi: può diventarlo lui stesso. Collega un LED IR (940 nm) al pin 3 dell'Uno con una resistenza da 100 Ω; per aumentare la portata puoi pilotare il LED con un transistor. Prima leggi con il codice precedente il telecomando del dispositivo da comandare per conoscerne indirizzo e comando, poi invia lo stesso codice da Arduino:

Arduino (C++)
1#include <IRremote.hpp>
2
3const int IR_SEND_PIN = 3;    // IR LED, 100 Ω direnç ile / IR LED with a 100 Ω resistor
4
5void setup() {
6  IrSender.begin(IR_SEND_PIN);
7}
8
9void loop() {
10  IrSender.sendNEC(0x00, 0x46, 0);   // adres, komut, tekrar sayısı / address, command, repeats
11  delay(5000);
12}

IR con ESP32 e Raspberry Pi Pico

Il VS1838B funziona senza problemi a 3,3 V, quindi si collega direttamente a ESP32 e Pico. La libreria IRremote supporta l'ESP32; puoi collegare il ricevitore a qualsiasi pin di ingresso, come il GPIO 15. Con un ESP32 puoi inoltrare via Wi-Fi i tasti del telecomando ad altri dispositivi, oppure costruire un "telecomando intelligente" che invia alla TV, tramite un LED IR, i comandi arrivati dal telefono. Sul Pico con MicroPython si usa la libreria micropython_ir di Peter Hinch:

MicroPython
1from machine import Pin
2from ir_rx.nec import NEC_8          # micropython_ir kütüphanesi / library (Peter Hinch)
3import time
4
5def on_key(command, address, ctrl):
6    if command >= 0:                 # negatif değerler tekrar ya da hata / negatives mean repeat or error
7        print("Komut / command: 0x{:02X}".format(command))
8
9ir = NEC_8(Pin(16, Pin.IN), on_key)  # GP16 → OUT
10
11while True:
12    time.sleep(1)

Idee di progetti con ricevitore IR e telecomando

  • Lampada con telecomando: accendi una lampada a 230 V tramite relè con un tasto libero del telecomando della TV.
  • Telecomando dei colori: cambia il colore di un LED RGB con i tasti numerici.
  • Auto robot telecomandata: un'auto con due motori che guidi con le frecce.
  • Carillon: assegna una melodia diversa a ogni tasto numerico; per la parte audio vedi Cos'è un buzzer?
  • Telecomando che impara: registra i codici di altri telecomandi e inviali da un solo Arduino.
  • Serratura a codice: apri una serratura con un servo quando viene inserita la sequenza di tasti corretta.

Errori comuni e come risolverli

  • Non arriva nessun codice: il filo OUT è su un pin diverso da quello del codice, i piedini del ricevitore sono invertiti o la batteria del telecomando è scarica; controlla il telecomando con la fotocamera del telefono.
  • L'esempio non si compila: gli esempi vecchi su Internet sono per IRremote 2.x; la versione 4.x usa IrReceiver.begin() e IrReceiver.decode().
  • Arrivano codici casuali: il ricevitore potrebbe essere rivolto verso il sole diretto o una lampada fluorescente; mettilo all'ombra.
  • Il tasto on-off agisce due volte: le ripetizioni non vengono ignorate; controlla il flag IRDATA_FLAGS_IS_REPEAT.
  • tone() o il PWM sui pin 3 e 11 non funzionano bene: sull'Uno condividono lo stesso timer (Timer2) di IRremote.
  • Portata molto bassa inviando con un LED IR: pilota il LED con un transistor per dargli più corrente e orientalo verso il dispositivo.

Un ricevitore IR è il modo più semplice ed economico per passare al senza fili; anche i vecchi telecomandi dimenticati nel cassetto trovano una seconda vita nei tuoi nuovi progetti. Nell'app BlueGrays trovi progetti per leggere i codici del telecomando, accendere e spegnere LED, suonare melodie, comandare una lampada a 230 V e creare un telecomando universale con ESP32, con schemi e codice.

Domande frequenti

A quanti metri riceve il segnale un ricevitore IR?

Ricevitori come il VS1838B captano il segnale fino a 8–10 metri con un buon telecomando e senza ostacoli. La portata si riduce quando la batteria si indebolisce, l'angolo aumenta e l'ambiente è molto luminoso.

Ogni telecomando funziona con Arduino?

Funzionano quasi tutti i telecomandi a infrarossi a 38 kHz, e IRremote decodifica la maggior parte dei protocolli comuni. Con telecomandi a 36, 40 o 56 kHz la portata può essere minore. I telecomandi via radio (per esempio a 433 MHz) non si leggono con un ricevitore IR.

Un ricevitore IR funziona al sole?

Il filtro interno blocca in gran parte la luce costante, ma il sole diretto può saturare il ricevitore e ridurre molto la portata. All'aperto tieni il ricevitore all'ombra o dentro un piccolo tubo protettivo.

Un telecomando IR funziona attraverso un muro?

No. La luce infrarossa non attraversa i muri; tra telecomando e ricevitore serve una linea di vista o una superficie su cui la luce possa rimbalzare. Per comandare un dispositivo in un'altra stanza si usano moduli radio o il Wi-Fi.

Quale versione di IRremote devo usare?

Usa la versione attuale 4.x, con IrReceiver.begin(), IrReceiver.decode() e decodedIRData.command. I comandi IRrecv irrecv(pin) e decode(&results) degli esempi più vecchi appartengono alla versione 2.x e non sono compatibili con quella nuova.

Posso usare il telefono come telecomando?

Alcuni telefoni Android hanno un trasmettitore IR integrato e, con l'app giusta, funzionano da telecomando. Se il tuo telefono non ha l'IR, puoi creare una pagina web su un ESP32 e inviare i comandi dal telefono al dispositivo tramite un LED IR.

Vedi tutti i progetti
Leggere i codici di un telecomando IR
#16Principiante
Premium

Leggere i codici di un telecomando IR

Il progetto che legge i valori HEX dei segnali a infrarossi provenienti dal telecomando con il modulo ricevitore IR sul Serial Monitor. Insegna l'uso della libreria IRremote.

4.5(39)
55
Accendere e spegnere LED con ricevitore IR e telecomando
#17Intermedio
Premium

Accendere e spegnere LED con ricevitore IR e telecomando

Progetto di controllo IR in grado di accendere e spegnere 3 LED in modo indipendente con diversi tasti del telecomando. Insegna l'abbinamento dei codici del telecomando e il controllo di più uscite.

4.7(45)
66
Suonare melodie con telecomando IR e cicalino
#18Principiante
Premium

Suonare melodie con telecomando IR e cicalino

Progetto che riproduce le melodie di Mario, della festa della mamma e di Capodanno con cicalino premendo diversi tasti del telecomando IR. Combina l'attivazione di funzioni e la programmazione di melo

4.8(57)
74
Accendere una lampadina 220V con il telecomando
#21Avanzato
Premium

Accendere una lampadina 220V con il telecomando

Progetto che accende e spegne una lampadina a 220 V tramite relè con i tasti di accensione e disattivazione del telecomando IR. Combina il controllo a infrarossi con la commutazione ad alta tensione.

4.4(22)
30
Sistema di sicurezza laser
#23Avanzato
Premium

Sistema di sicurezza laser

Sistema di sicurezza avanzato che attiva l'allarme quando il raggio laser viene interrotto e può essere ripristinato tramite pulsante o controllo IR. Insegna la gestione di più sorgenti di ingresso e

4.8(60)
77
Telecomando con ricevitore IR ESP32 (con schermo LCD)
#124Intermedio
Premium

Telecomando con ricevitore IR ESP32 (con schermo LCD)

In questo progetto, utilizzando il modulo ricevitore IR TSOP4838, acquisiamo con l'ESP32 i segnali provenienti da un telecomando per la TV, il climatizzatore o qualsiasi altro dispositivo a infrarossi. Grazie alla libreria IRremote v4, visualizziamo e registriamo il codice univoco di ogni tasto sullo schermo LCD I2C. Successivamente, utilizzando questi codici, accendiamo e spegniamo un LED tramite il telecomando e ne regoliamo la luminosità. Un ottimo punto di partenza per la domotica.

4.7(19)
30
Telecomando universale ESP32 IR (ricevitore IR + telecomando + 3 LED + cicalino + OLED)
#143Avanzato
Premium

Telecomando universale ESP32 IR (ricevitore IR + telecomando + 3 LED + cicalino + OLED)

Con l'ESP32 puoi leggere un telecomando IR già pronto e controllare il tuo dispositivo! In questo progetto acquisiamo i segnali di un telecomando IR a 20 tasti tramite un ricevitore a infrarossi (protocollo NEC a 38 kHz). Abbiamo definito un'azione diversa per ogni tasto: i tasti 1/2/3 attivano/disattivano tre LED distinti, il tasto PWR li spegne tutti, mentre i numeri da 4 a 9 visualizzano un messaggio specifico sul display OLED. Sul display OLED SSD1306 vengono visualizzati in tempo reale, in

4.6(8)
14
Sistema di allarme laser
#22Intermedio
Premium

Sistema di allarme laser

Progetto di sicurezza che rileva l'interruzione del raggio laser tramite LDR e avvisa con un cicalino e un LED. Insegna la logica del rilevamento dell'interruzione della luce con la coppia laser-LDR.

4.8(64)
82

Impara come funziona il telecomando della TV, a collegare un ricevitore IR ad Arduino, leggere i codici dei tasti, comandare lampade e LED con il telecomando e inviare segnali IR da Arduino.

Ricevitore IR e telecomando: progetti telecomandati con Arduino | BlueGrays