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.

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.
Caratteristiche tecniche (VS1838B)
| Caratteristica | Valore |
|---|---|
| Frequenza portante | 38 kHz |
| Lunghezza d'onda | Circa 940 nm |
| Alimentazione | 2,7–5,5 V |
| Portata | 8–10 m (in base alla batteria del telecomando e all'angolo) |
| Angolo di ricezione | Circa ±35° |
| Uscita | LOW quando c'è segnale (attiva bassa) |
| Pin | OUT, GND, VCC |
Collegamento del ricevitore IR
| Pin del ricevitore | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| OUT (S) | D2 | GPIO 15 | GP16 |
| GND (–) | GND | GND | GND |
| VCC (+) | 5V | 3V3 | 3V3 |
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.
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:
| Tasto | Comando (NEC) |
|---|---|
| CH- | 0x45 |
| CH | 0x46 |
| CH+ | 0x47 |
| PREV | 0x44 |
| NEXT | 0x40 |
| PLAY/PAUSE | 0x43 |
| VOL- | 0x07 |
| VOL+ | 0x15 |
| 0 | 0x16 |
| 1 | 0x0C |
| 2 | 0x18 |
| 3 | 0x5E |
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è?
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}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:
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:
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.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
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.

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.

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

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.

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

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.

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

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.
Altri articoli
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.

