Lezione 10: scopriamo gli infrarossi con Arduino

Lezione 10: scopriamo gli infrarossi con Arduino

In questa lezione, vedremo come vengono usati in Arduino i segnali infrarossi. Chi di noi non ha un telecomando in casa, come ad esempio quello per accendere e spegnere la TV ? Bene oggi capiremo come il nostro TV è in grado di stabilire il tasto premuto dal nostro telecomando.

I supporti hardare richiesti per questi programmi sono davvero pochi. Infatti oltre allo stesso Arduino, dovremo procurarci su Ebay un ricevente IR, con il relativo telecomando e un LED ad infrarossi, in grado di inviare i segnali. Ecco una lista di possibili prodotti, acquistabili su ebay:

IRRDSC_0019S

 

$_12

 

Il costo di questi dispositivi è davvero poco e si aggira intorno ai 5 Euro.

Dal punto di vista software è necessario scaricare la libreria ufficiale per Arduino, da questo link:

github-logo

 

Come funziona una trasmissione ad infrarossi ? 

Il meccanismo di funzionamento di una trasmissione ad infrarossi è abbastanza “semplice”; un fascio luminoso, ad elevata frequenza 38 KHz (per i telecomandi tipici per la TV) viene proiettato contro un ricevente. Questo fascio luminoso non è altro che una sequenza di bit (0 e 1) che vengono codificati dal ricevente, attraverso la polarizzazione di photo-transistor. Facciamo questo semplice caso; nel nostro telecomando, vengono codificati i vari pulsati con varie sequenze bit e per esempio il tasto on/off vale:

010101001110

02tipi01

Il ricevente avrà un segnale in ricezione molto simile, se non uguale a quello inviato e in base alla corrispondenza che ha il memoria, sarà in grado di svolgere la richiesta effettiva, come ad esempio accendere la TV ! Il fascio luminoso che viene inviato dal telecomando, non è possibile vederlo ad occhio nudo perché ha una frequenza troppo veloce per noi !

Tuttavia, ci sono diversi codifiche; tipicamente ogni produttore di dispositivi tecnologici, ha una propria codifica, come ad esempio Sony, NEC, Samsung etc..

Tuttavia, è possibile stabilire la sequenza di bit di qualsiasi segnale ad infrarosso, calcolando il tempo in cui il segnale è alto e il tempo in cui il segnale è basso. Questo tipo di codifica si chiama RAW.

Passiamo ai codici per Arduino

Come per ogni libreria nuova in Arduino, dobbiamo installarla, copiandola semplicemente nella cartella Libraries, che tipicamente si trova nei propri documenti.

Qualora utilizzassimo il dispositivo TSOP1738, il collegamento è davvero semplice; basterà alimentare il segnale con i 5 V di Arduino, collegarlo a massa e collegare il pin di output al pin 11.

images

ir_receiver_sender_bb

TSOP1738 Datasheet

Per quanto riguardo altri dispositivi presenti su Ebay, basterà collegare il pin di output sempre al pin 11 di Arduino.

1° Programma decodifichiamo un generico segnale

Nome programma Decode_generic_IR

/*

 * Modified by Chris Targett
 * Now includes more protocols
 * Novemeber 2011

 * IRremote: IRrecvDump - dump details of IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 * 
 * Modified by Chris Targett to speed up the process of collecting
 * IR (HEX and DEC) codes from a remote (to put into and .h file)
 *
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.print("Unknown encoding: ");
  }
    else if (results->decode_type == NEC) {
    Serial.print("Decoded NEC: ");
  }
  else if (results->decode_type == SONY) {
    Serial.print("Decoded SONY: ");
  }
  else if (results->decode_type == RC5) {
    Serial.print("Decoded RC5: ");
  }
  else if (results->decode_type == RC6) {
    Serial.print("Decoded RC6: ");
  }
  else if (results->decode_type == SAMSUNG) {
    Serial.print("Decoded SAMSUNG: ");
  }
  else if (results->decode_type == JVC) {
    Serial.print("Decoded JVC: ");
  }
  else if (results->decode_type == PANASONIC) {
    Serial.print("Decoded Panasonic: ");
  }
  Serial.print(results->value, HEX);
  Serial.print("(");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
  Serial.print("#define Something_DEC ");
  Serial.println(results->value, DEC);
  Serial.print("#define Something_HEX ");
  Serial.println(results->value, HEX);
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");
  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    } 
    else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}

void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}

 

Il programma qui presente mostra sul seriale la codifica del segnale ad infrarosso che viene ricevuto dal ricevitore, collegato al pin 11 di Arduino. Il meccanismo è davvero abbastanza chiara, grazie ai commenti presenti nel codice, tratto dalla libreria ufficiale.

2° Programma per Arduino: Accendiamo una lampada con qualsiasi segnale ad Infrarosso 

/**
Questo programme permette di accendere una lampada, attraverso un relay, con un 
telecomando ad infrarossi. Questa versione non permette di modificare il codice
a run time
Autore Giacomo Bellazzi
*/

#include <IRremote.h>

int RECV_PIN = 11;
int RELAY_PIN = 13;
int codice = 16738455; // codice dec del telecomando

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);

   Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

int on = 0;
unsigned long last = millis();

void loop() {

   if (irrecv.decode(&results)){
    // If it's been at least 1/4 second since the last
    // IR received, toggle the relay
    if (millis() - last > 250 && results.value==codice ) {
     on = !on;
      digitalWrite(RELAY_PIN, on ? HIGH : LOW);
     //dump(&results);
    }
    last = millis();      
    irrecv.resume(); // Receive the next value
  }
}

Questo codice permette di accendere una lampada connessa ad un relè, premendo un telecomando ad infrarossi. La codifica del telecomando che si vuole usare, può essere ottenuta con il codice del primo programma e inserita all’inizio di questo codice. Tuttavia, il codice non è modificabile a run time.

3° Programma: Accendiamo una lampada con un qualsiasi telecomando

arduino12

/* Questo progetto permette di utilizzare Arduno e un telecomando IR, per accendere un carico collegato al Relay sul PIN 13.
Inoltre è possibile modificare il code del telecomando, attraverso il pushbutton di RESET
AUTHOR: Giacomo Bellazzi
VERSION: 1.0
*/

#include <IRremote.h>

int RECV_PIN = 11;
int RELAY_PIN = 13;
int pushButton = 3;
unsigned long code;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(pushButton,INPUT);
  irrecv.enableIRIn(); 
  Serial.begin(9600);
}

int on = 0;
unsigned long last = millis();

void loop() {
   int buttonState = digitalRead(pushButton);
   delay(100);        
   if ( buttonState == HIGH) {
     Serial.println("Settings...");
     if (irrecv.decode(&results) && millis() - last > 250){
         code = results.value;
         Serial.println("New code setting...");
         Serial.println(code); 
         Serial.println(results.value); 
         last = millis();      
         irrecv.resume(); 
     }
   }
   if (irrecv.decode(&results)){
     if (millis() - last > 250 && results.value==code ) {
      on = !on;
      digitalWrite(RELAY_PIN, on ? HIGH : LOW);
     }
     last = millis();      
     irrecv.resume(); 
  }
}

Questo programma, a differenza di quello precedente, permette di modificare il codice IR che permette di azionare un relè, anche in fase di run time, impostandolo attraverso un push button collegato ad Arduino. L’operazione è davvero semplice ed è mostrata nel video:

4° Programma: accendiamo la TV Samsung di casa con Arduino

Questo programma permette di accendere una TV Samsung con il nostro piccolo Arduino. Il primo passaggio è quello di usare di ricavarsi il codice RAW del segnale emesso dal nostro telecomando, attraverso il programma che è stato precedentemente discusso precedentemente,

Samsung IR

Ora dobbiamo prendere il codice RAW, cancellare il primo valore, convertire i segni – con degli spazi e mettere le virgole tra i vari valori.

30498,4450,4400,600,1650,600,1600,600,1650,600,500,600,550,550,550,600,500,600,550,550,1600,650,1600,600,1650,600,550,550,550,550,550,600,550,550,550,600,500,600,1600,600,550,600,550,550,550,550,550,600,500,600,550,600,1600,600,550,550,1650,600,1600,600,1650,600,1600,600,1650,600,1600,600,

Il codice per Arduino che serve per inviare il segnale alla TV è il seguente:

#include "IRremote.h"

IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

unsigned int ON[68]={4450,4400,600,1650,600,1600,600,1650,600,500,600,550,550,550,
600,500,600,550,550,1600,650,1600,600,1650,600,550,550,550,550,550,
600,550,550,550,600,500,600,1600,600,550,600,550,550,550,550,550,600,
500,600,550,600,1600,600,550,550,1650,600,1600,600,1650,600,1600,600,1650,600,1600,600,};

void loop() {
 irsend.sendRaw(ON,68,38);
 Serial.println("Accendo la TV Samsung");
 delay(10000);
 }

Il LED ad infrarossi va collegato al pin 3, con una resistenza di almeno 100 Ohm in serie. Il valore della resistenza è proporzionale al raggio d’azione del telecomando di Arduino.

Come per le lezioni precedenti, i codici di questi programmi sono presenti nella mia repo di Github.

ismanettoneblog

50 pensieri su “Lezione 10: scopriamo gli infrarossi con Arduino

  1. Ciao, una domanda: come mai non,è possibile usare il raspberry sia come webserver che per inviare i comandi tramite IR led?

    Ti ringrazio in anticipo!

  2. Ciao vedo che non hai usato nessuna resistenza nè per il ricevitore nè per il trasmettitore…

    Il primo l’hai spiegato [bisogna usare un TSOP1738] il secondo non capisco… c’è un led preciso da prendere?
    La resistenza limita il raggio di azione se non erro.

    Grazie!

    1. Per l’invio dei segnale è necessario un LED ad infrarossi. Su Ebay è possibile acquistarli a pochi euro (cerchi LED IR). La resistenza limita il raggio di Azione del dispositivo. Per sicurezza, con viene mettere una resistenza da 100 ohm.

  3. Ciao, quando inserisco il codice per riconoscere il segnale generico il programma mi dice:
    C:\Program Files (x86)\Arduino\libraries\RobotIRremote\IRremoteTools.cpp:5: error: ‘TKD2’ was not declared in this scope.

    Che devo fare?

    1. Salve,
      il problema è dovuto al fatto che non hai installato le librerie per decodificare il segnale IR. Il file .zip lo trovi allegato all’articolo.

      1. Ciao, ho anc’io lo stesso problema ma sono sicuro di già installato la libreria…
        Che posso fare?
        Grazie in anticipo

        1. Salve,
          il problema è dovuto al fatto che non è stata installata correttamente la libreria. Per farlo è necessario rinominare correttamente la cartella, escludendo caratteri speciali, come ad esempio -_.

  4. Ciao, ottima guida!
    Sono un neofita, quindi vorrei chiederti gentilmente una informazione.
    Ho un sensore IR TEFT4300 e un emettitore IR TSUS4300.
    Sparo col telecomando della TV sul sensore per beccare il codice raw, lo prendo cerco quindi di mandare tale codice dal mio emettitore alla tv ma sfortunatamente quando lo faccio non accade niente.
    A parte vedere se poi il codice è giusto penso che sia un problema di raggio d’azione.
    Gia quando invio il segnale dal telecomando al sensore per rilevarlo devo stare non più lontano di un centimetro, quindi penso che allo stesso modo l’emettitore non riesce ad inviare il segnale alla tv perché troppo distante.
    Ho provato sia con una resistenza a 100 ohm che a 220 ohm e se vedo con una fotocamera il trasmettitore trasmette ma penso sia troppo debole.
    Adesso hai detto che il raggio d’azione è proporzionale alla resistenza ma immagino che più questa aumenti e più il raggio diminuisca o è il contrario?

    Grazie in anticipo.

    1. Salve,
      più la resistenza è alta, minore è il raggio d’azione, per tanto sarebbe più corretto effettivamente scrivere inversamente proporzionale. Ad ogni modo, il raggio d’azione di un telecomando è di 10 metri, quindi si dovrebbe leggere tranquillamente il codice con il sensore che ho indicato. Controlla di non aver invito il GND con il VCC, prima di aver danneggiato il dispositivo. Per quanto riguardo l’invio, è necessario utilizzare un LED IR e bisognare seguire le istruzioni riportati nell’articolo (occorre eliminare il primo valore dal vettore, che viene restituito nella fase di decodifica). Spero di essere stato utile.

  5. Ciao, pensavo di utilizzare gli IR-code di I-Droid ma credo che abbiano un formato diverso.
    Dopo averne convertito uno da esadecimale a decimale l’ho inserito nel listato 4 ma il TV non ha “reagito”.
    Qualcuno l’ha già fatto?
    Questo è il codice del tasto 5 di un vecchio Mivar di I-Droid:

    0000 006d 0000 000c 0008 00ee 000a 00ee 000a 00ff 000a 0100 000a 0100 0008 00a8 0008 00a8 0008 00a8 0008 0100 000a 0100 0008 00a8 0008 06e2
    0000 006d 0000 000c 0008 00ee 000a 009c 000a 0100 000a 00ff 0008 0100 000a 00a8 000a 00a6 000a 00a5 000a 0100 000a 00ff 000a 00a8 0008 0741

    io l’ho convertito così:

    unsigned int ON1[29]={0,109,0,12,8,238,10,238,10,255,10,256,10,256,8,168,8,168,8,168,8,256,10,256,8,168,8,1762,};
    unsigned int ON2[29]={0,109,0,12,8,238,10,156,10,256,10,255,8,256,10,168,10,166,10,165,10,256,10,255,10,168,8,1857,};

    1. Scusa sostituisco i simboli minore – maggiore con parentesi []

      [Item Name=”005 Canale 5″]
      [Code]0000 006d 0000 000c 0008 00ee 000a 00ee 000a 00ff 000a 0100 000a 0100 0008 00a8 0008 00a8 0008 00a8 0008 0100 000a 0100 0008 00a8 0008 06e2[/Code]
      [Toggle]0000 006d 0000 000c 0008 00ee 000a 009c 000a 0100 000a 00ff 0008 0100 000a 00a8 000a 00a6 000a 00a5 000a 0100 000a 00ff 000a 00a8 0008 0741[/Toggle]
      [/Item]

    2. Non è necessario effettuare codifiche particolari, dal momento che la libreria è già in grado di convertire il valore HEX in tempi di impulso ad IR. Puoi usare tranquillamente la guida che trovi nel post e il programma in Java per ottenere il segnale da inviare al TV.

      1. Dopo varie prove non sono riuscito ad adattare i vecchi codici del robot.
        Per evitare complicazioni vedrò di procurarmi un TSOP1738 e ricodifico tutto.
        Ho solo dei fotodiodi BPW 41n ma vedo che li collegano agli ingressi analogici.
        Grazie dei consigli e dell’ottima guida!

  6. Salve, ho uno strano problema, ho codificato arduino con un telecomando per stereo sony, il punto é che :accensione/spegnimento,volume+/volume- funzionano correttamente ,ma la codifica del cambio stazione appare piu lunga come codici e non funziona affatto, di piu ho notato che la codifica funzionante é 12 bit mentre quella non funzionante varia da 20 a 36 bit…. Qualcuno sa spiegarmi il perché ?? Vi ringrazio in anticipo

    1. Può capire che la codifica sia variabile, ma è comunque possibile utilizzare il programma presente nell’articolo, per poter codificare e re-inviare il comando con Arduino.

      1. Salve, come le dicevo uso questo codice per trasmettere i dati di cui :on-off;vol+/vol-, riesco a comandare(12bit), mentre il cambio stazione a 20/36 bit no, penso che sia l’array che va modificato:

        #include  unsigned int Signal[] = {1300,400,1300,350,450,1200,1300,400,1300,350,450,1200,450,1250,450,1200,1300,350,450,1200,500,1200,450,1000}; IRsend irsend; void setup() {   Serial.begin(9600); } void loop() {     for (int i = 0; i < 3; i++) {   irsend.sendRaw(Signal, sizeof(Signal)/sizeof(int), 38);       delay(400);     }    }

      2. Salve , come le dicevo, con questo codice riesco a inviare solo alcuni comandi(on/off;vol+/vol-) a 12 bit, mentre il cambio stazione no a 20/36 bit , penso sia da modificare l’array:

        #include  unsigned int Signal[] = {1300,400,1300,350,450,1200,1300,400,1300,350,450,1200,450,1250,450,1200,1300,350,450,1200,500,1200,450,1000}; IRsend irsend; void setup() {   Serial.begin(9600); } void loop() {     for (int i = 0; i < 3; i++) {   irsend.sendRaw(Signal, sizeof(Signal)/sizeof(int), 38);       delay(400);     }    }

  7. Ho un problema in fase di compilazione, legato alla libreria (credo). L’ho scaricata, installata in Libraries e rinominata senza simboli ma quando cerco di caricare lo sketch ottengo sempre un fatal error:
    fatal error: WProgram.h: File o directory non esistente
    #include
    Ho cercato in tutti i files della libreria, e questa chiamata a WProgram non esiste da nessuna parte.
    Dov’é l’errore?
    Grazie.

  8. Ho caricato lo sketch per decodificare un segnale generico e funziona. Però se premo più volte lo stesso tasto del telecomando, ottengo righe di raw con valori differenti. Come mai?

    1. Può capitare non è un fatto strano ! Per evitare di poter codificare correttamente il segnale, le aziende sviluppano algoritmi di codifica che variano nel tempo e client e server sanno questa modifica. Ad ogni modo dovrebbe sempre funzionare, anche se il codice cambia.

  9. Ho utilizzato un TSOP32238 al posto del 1738.
    Ha la stessa frequenza di 38 KHz con i piedini OUT – GND invertiti.
    Con il 1° listato ogni volta che premo lo stesso tasto del telecomando ottengo una stringa di numeri leggermente differente dalla precedente.
    È normale?

    Sistemo i valori con la virgola come hai spiegato e li inserisco nel 4° listato ma il TV non reagisce!
    Il led IR lampeggia (posso vederlo con la fotocamera del cellulare).
    Quale può essere la causa?

    1. Sul fatto che cambi il codice è normale. Hai utilizzato il programma in Java per ottenere il codice ? Il LED che utilizzi è di tipo IR ? I Led normali non funzionano bene per questo tipo di operazioni.

      1. Grazie. Vedo che anche nxt123 decodifica valori sempre differenti…

        Ho utilizzato il primo programma all’inizio di questa guida:
        “1° Programma decodifichiamo un generico segnale” “Decode_generic_IR”.

        Ho poi preso il codice RAW dal “monitor seriale”, cancellato il primo valore e tutti i segni “–” e infine messo le virgole tra i vari valori come hai scritto tu.
        Ne ho provati più di uno (generati tutti dallo stesso tasto) ma senza risultato.

        Nel 4° listato (quello per la trasmissione del segnale) nel comando irsend.sendRaw(ON,68,38); il numero 68 è la lunghezza della stringa e 38 la frequenza vero?

        Il LED è infrarosso, proprio per questo non posso vederlo ma le fotocamere riescono a percepire debolmente anche quella lunghezza d’onda !

  10. Ciao,
    ho comprato su ebay un telecomando uguale al tuo (era quello che costava meno…): ho notato che con il telecomando della tv il codice è sempre lo stesso ovunque io lo punti, mentre invece con il telecomandino il codice cambia a seconda di dove lo punto, se diretto è sempre uguale, ma basta sposarlo leggermente di lato e cambia codice.
    Può essere che semplicemente è una cinesata di telecomando?Il tuo funziona sempre bene?

    Grazie
    Lorenzo

    1. Salve,
      non dipende dal tipo di prodotto secondo me. È più probabile questo: alcuni telecomandi, generano un codice diverso ogni volta, sebbene la funziona associata al pulsante sia la medesima. Serve per evitare che il protocollo sia recuperabile. Ad ogni modo non ho mai avuto problemi di funzionamento.

      1. Grazie della risposta,
        ma allora è impossibile sapere sempre quale tasto viene premuto, a meno che non si crei una tabella con tutte le possibilità per ogni tasto.
        Non c’è qualche barbatrucco per questi casi?
        Grazie
        Lorenzo

        1. In realtà la soluzione più semplice è questa:
          premi il tasto numero 8 sul telecomando, copia la codifica in Arduino e la re-invii sempre da Arduino. Il vero dispositivo che vuoi comandare, tipicamente, è in grado di rilevare il corretto valore del comando, sebbene vari ogni volta.

          1. Anche a me succede che genera diversi codici in base alla posizione in cui si trova il telecomando. Ho copiato il codice di quando il telecomando è esattamente di fronte al sensore ir vs1838b e così accende il led! ma appena sposto il telecomando non lo accende più. cosa posso fare ?

          2. Ciao,
            è collegata qualche resistenza al LED d’invio del segnale? Se si quale valore ha? Di per se la distanza non causa variazioni del comando inviato, penso sia più legato al discorso che facevo per evitare copiature.

  11. salve. Ho costruito un prototipo che utilizza la libreria sia in ricezione che in invio di IR all’ interno dello stesso loop. Mi si presenta un problema però. Il receiver funziona perfettamente fino al momento in cui io faccio il primo invio del segnale ir. Da quel momento in poi non riesco piu a ricevere nulla. E’ come se la libreria non prevedesse l uso di sender e receiver all interno dello stesso main. Sapete nulla per risolvere tale problema? Senza usare due arduino ovviamente.

    1. Salve,
      non penso proprio si riesca all’interno del medesimo programma, inviare e ricevere un segnale per via del fatto che il micro-controllore può effettuare una singola operazione alla volta. In pratica quando hai inviato il segnale, quando l’Arduino passa all’istruzione che verifica l’arrivo di un nuovo segnale, il segnale non esiste già più!

  12. Ciao, io sto cercando di comandare l’accensione di una stufa tramite i comandi IR. Secondo te con questo kit riesco a risolvere la questione? http://www.ebay.it/itm/IR-Emitter-and-Receiver-Universal-Remote-36KHZ-Arduino-PI-plus-Diagram-/191929520274?hash=item2cafe41092:g:fecAAOSw1XdUWpcr
    Vedo che in tutti gli altri kit c’è un telecomando ma visto che ho intenzione di remotizzare l’accessione mi serve solo un emettitore e un ricevitore.

    Fammi sapere

    1. Tipicamente i telecomandi funzionano sulla frequenza 38 KHz. Prova a verificare quale sia quella della stufa.

  13. Salve, ho usato il suo codice per la ricezione degli infrarossi e premendo a lungo il pulsante di accensione del mio telecomando ottengo questi risultati multipli:
    Unknown encoding: FDAC0150(32 bits)
    #define Something_DEC 4255908176
    #define Something_HEX FDAC0150
    Raw (6): 21836 7300 -1650 20250 -1650 31050
    Unknown encoding: FDAC0150(32 bits)
    #define Something_DEC 4255908176
    #define Something_HEX FDAC0150
    Raw (6): 8336 7300 -1650 20250 -1650 31150

    Ora vorrei che il mio arduino ogni tot secondi accendesse e spegnesse la televisione.

    Utilizzo questo codice ma non succede nulla (ho provato a mettere powerOn[5] e powerOn[6]):

    #include

    IRsend irsend;

    // just added my own array for the raw signal
    unsigned int powerOn[5] = {7300, 1600, 20250, 1650, 31200 };

    void setup()
    {
    Serial.begin(9600);
    }

    void loop() {

    // altered the code just to send/test my raw code
    irsend.sendRaw(powerOn,5,38);
    delay(2000);
    }

    1. Mi sembra troppo piccolo la dimensione dell’array raw; che dispositivo devi accedere? A che distanza si trova l’Arduino dal dispositivo quando invii il segnale?

  14. Ciao,
    avrei alcuni dubbi:

    – nell’usare il 4° programma, tutti quei numeri ad eccezione del primo, sono la durata in microsecondi di ogni bit ?

    – cosa rappresenta quel numero in esadecimale che segue la scritta “Decoded Samsung ” ?

    Grazia,
    Claudio

  15. Se dovessi utilizzare il sensore IR con solo due stati (ricevo e non ricevo) Come dovrei fare?
    Grazie in anticipo

        1. Può sfruttare la lettura analogica di un LED RX posto all’estremità rispetto ad un LED TX.


          if (analogRead(rx) >511)
          {
          //È passato qualcuno
          }

          Schema

  16. Salve,

    come mai premendo lo stesso tasto ho valori diversi

    Unknown encoding: 7E1CB4FF(32 bits)
    #define Something_DEC 2115810559
    #define Something_HEX 7E1CB4FF
    Raw (22): 6086 300 -2750 500 -450 350 -700 300 -700 350 -650 350 -700 450 -550 500 -500 350 -700 300 -700 500

    Unknown encoding: 86E3C1BF(32 bits)
    #define Something_DEC 2263073215
    #define Something_HEX 86E3C1BF
    Raw (22): -27972 450 -2600 450 -550 450 -600 400 -600 450 -550 400 -600 450 -600 400 -600 400 -600 450 -550 500

    Qual’è quello che devo scegliere?

    1. Riceve due codifiche diverse del medesimo comando in momenti diversi? Questo può essere dovuto al fatto che la codificato è protetta tra TX e RX, ma tipicamente non ci sono problemi inviando uno dei due comandi.

        1. Può essere che non sia stata letta correttamente la codifica da Arduino, oppure il protocollo di comunicazione usato è complesso.

I commenti sono chiusi.