Sei sulla pagina 1di 4

// Arduino: generatore infrarossi, come clonare un telecomando

17bis - generatore infrarossi come clonare un telecomando


Un generatore di infrarossi non si differenzia, nellaspetto,
da un normale diodo bianco ma emette una luce non visibile
allocchio umano. In questo esercizio e stato utilizzato un
modulo keyes 005 ma sarebbe possibile usare in sua vece,
un normale emettitore di infrarossi limitato da una resistenza
da 100 ohm (come nello schema piu avanti rappresentato).
Il modulo keyes KY 005 e una basetta sulla quale e stato
saldato un generatore. La basetta non contiene solo il
generatore, ma anche la relativa resistenza di limitazione
per cui e possibile collegarla direttamente ad Arduino. Per
clonare un telecomando e necessario disporre del
telecomando originale al fine di rilevare i codici che si vogliono replicare. In questo esercizio
piloteremo un televisore riproducendo i segnali di: on/off, canale successivo e canale precedente.
Per rilevare i codici originali sara necessario ricostruire il circuito illustrato nel precedente esercizio
16. Non si usera pero il programma dellesercizio16 ma il seguente, piu semplice e piu efficace:
//----------------------------programma per rilevare i codici di comando-------------------------------------#include <IRremote.h>
int RECV_PIN = 3; // Pin di ricezione
IRrecv irrecv(RECV_PIN);
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Inizializzazione del ricevitore
}
void loop()
{
decode_results results;
if (irrecv.decode(&results))
{
// Tipi di codifica:
// results.decode_type == NEC
// results.decode_type == SONY
// results.decode_type == HEX
// results.decode_type == RC5
// results.decode_type == RC6
if (results.decode_type == NEC)
Serial.println(results.value);
irrecv.resume(); // riceve il prossimo comando
}
}
//--------------------------------------------------------------------------------------------Prima di compilare il suddetto programma bisogna scaricare ed installare la libreria IRremote.zip,
reperibile qui: https://www.pjrc.com/teensy/td_libs_IRremote.html Per installarla bisogna aprire
lIDE, andare in sketch-> importa libreria-> add library-> download-> selezionare la cartella zippata
irremote e premere apri. Subito dopo averla aperta bisogna chiudere e riaprire lIDE per renderla
operativa.

// Arduino: generatore infrarossi, come clonare un telecomando


Una volta compilato il programma si puo procedere alla decodifica dei comandi. I segnali emessi
appartengono a differenti famiglie di codifica (nec, sony, rc5, rc6) per cui, per prima cosa bisogna
individuare la famiglia. Si compila quindi il programma utilizzando dapprima la famiglia SONY
(sostituire SONY a NEC nella riga 19: if (result.decode_type==SONY)) e poi si prova a premere
qualche pulsante del telecomando. Se sul monitor
seriale non compare nulla significa che non abbiamo
indovinato la famiglia e quindi si ricompila e si
riprova utilizzando unaltra famiglia di codifica. Se
riprovando compare qualcosa significa che abbiamo
azzeccato la famiglia e che ora possiamo
individuare i codici che ci interessano. Ogni volta
che premiamo un pulsante sul monitor compaiono
molti numeri, (vedi figura a lato). I numeri che ci
interessano sono quelli che compaiono esattamente
nel momento in cui premiamo il pulsante. Nel nostro
esempio il codice che ci interessa e il 551489775.
Una volta individuato il codice lo trascriviamo per
poterlo poi utilizzare nel programma di simulazione
del telecomando.
Unultima dritta prima di procedere alla fase di costruzione del simulatore: i segnali ad infrarossi
sono visibili allocchio elettronico di una macchina fotografica (ad esempio di un telefono). Per
sapere quindi se funziona il circuito emettitore (per sapere se il generatore emette un qualche
segnale) e quindi sufficiente guardarlo attraverso lo schermo di una dispositivo fotografico.
Nota: Questo esercizio e questa nota sono parte di una serie che vede protagonisti arduino ed
alcuni dei componenti ad esso collegabili. Per la maggior parte degli esercizi e anche disponibile
un filmato su youtube.
Esercizi facenti parte della raccolta
Filmati presenti su youtube
Informazioni su arduino e sui componenti collegabili
Breve manuale di programmazione

Materiali

Un modulo keyes 005 oppure un generatore di infrarossi ed una resistenza da 100 ohm
3 pulsanti
3 resistenze da 10k ohm
Un po di cavetteria

// Arduino: generatore infrarossi, come clonare un telecomando

Schema

Programma
/* i codici per accendere / spegnere e cambiare canale devono essere rilevati dal telecomando
normalmente utilizzato per gestire la tv (vedi programma in prima pagina) e quindi inseriti nelle
variabili: accendespegni, canalesu, canalegiu */
#include <IRremote.h>
IRsend irsend; // Inizializza il led ad infrarossi per il quale non deve essere dichiarata alcuna
// porta di output poiche' la libreria IRremote gli assegna automaticamente la porta numero 3
long valore = 0; //variabile nella quale viene inserito il valore (il codice) del comando da generare
long accendispegni = 551489775; // codice del comando "accendi/spegni"
long canalesu
=
551485695; // codice del comando "canale successivo"
long canalegiu =
551518335; // codice del comando "canale precedente"
int pulsante
=
0; // variabile in cui si acquisisce lo stato del pulsante in esame
void invia (void)
//************ routine di invio del segnale *************
{
for (int i = 1; i <= 3; i++) // invia tre volte il segnale, ad intervalli di 40 millisecondi
{
irsend.sendNEC(valore, 32); // inserire, al posto di NEC, la famiglia cui appartiene il comando
delay (40);
}
delay (1000); //attende un secondo prima di tornare all'analisi dello stato dei pulsanti
pulsante = 0; // azzera il valore di stato del pulsante
valore = 0; // azzera l'area di memorizzazione del comando
}

// Arduino: generatore infrarossi, come clonare un telecomando

void setup()
{
pinMode (7, INPUT); // porta collegata al pulsante accendispegni
pinMode (6, INPUT); // porta collegata al pulsante canalesu
pinMode (5, INPUT); // porta collegata al pulsante canalegiu
}
void loop()
{
pulsante = digitalRead (7); //verifica pulsante accendispegni
if (pulsante == HIGH)
{
valore = accendispegni;
invia();
}
pulsante = digitalRead (6); //verifica pulsante canalesu
if (pulsante == HIGH)
{
valore = canalesu;
invia();
}
pulsante = digitalRead (5); //verifica pulsante canalegiu
if (pulsante == HIGH)
{
valore = canalegiu;
invia();
}
}