Tutorial: Arduino come trasmettitore IR o come telecomando

In questi giorni ho ripreso un vecchio post del blog: Tutorial Arduino – IR con TSOP31238 e mi sono chiesto se fosse possibile da un altro Arduino inviare dei segnali IR al primo, magari con la stessa libreria IRremote.h, ebbene è possibile.

Arduino telecomando IR

Puoi utilizzare la libreria IRremote sia per decodificare i segnali provenineti da un sensore IR ( TSOP31238 o equivalente) sia per inviare i segnali IR al tuo televisore.

Gli sketch in questo caso sono 2, il primo serve a inviare i segnali, lo andari a caricare sull’Arduino di destra (vedi figura sopra); il secondo li riceve e decodifica, lo andrai a caricare nmell’Arduino di sinistra.

Primo Sketch – invia segnali IR

Premesse: l’esempio utilizza sia per la codifica sia per la decodifica segnali di tipo Sony, ogni telecomando e apparecchio ricevente sono configurati per codificare/decodificare secondo una base comune, la libreria IR prevede alcune codifiche standard: (Sony, Nec, RC5, RC6) e dei metodi di codifica/decodifica di tipo raw, generici con cui puoi codificare e decodificare quello che ti occorre.
inoltre la libreria ad oggi non ti permette di variare il pin di Arduino utilizzabile per pilotare il led IR, devi sempre utilizzare il pin 3 come mostrato in figura.

Ecco lo sketch di codifica o invio:

#include <IRremote.h>

IRsend irsend;

void setup() { }

void loop() {
  for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xa90, 12); // Sony TV power code
    delay(100);
  }
}

Analizziamo lo sketch linea per linea:

linea 01: includi la libreria IRremote.h, la libreria dovrà essere presente nella stessa dir in cui metterai lo sketch, altrimenti l’IDE potrebbe darti errore perchè non la trova;

linea 03: inizializza l’oggetto irsend come istanza della classe IRsend, che ti consentirà di inviare i codici IR;

linea 05: definisci la funzione setup() in questo caso vuota, ricorda che le funzioni setup() e loop() devono sempre esistere in uno sketch e se non devono eseguire compiti puoi dichiararle vuote, come in questo caso;

linea 07: definisci una funzione loop() in questo caso l’unica ad eseguire qualcosa nel nostro sketch;

linea 08: definisci un ciclo di 3 step (0,1 e 2) in cui per ciascuno step invii il codice definito sotto;

linea 09: invia il codice a90 in standard Sony, per farlo utilizza il metodo sendSony( data, nbit ) in cui data è il valore da inviare e nbit la lunghezza della stringa. Esistono altri metodi di codifica, come dicevo sendNEC, sendRC5 e sendRC6 o sendRaw per l’invio di codifiche differenti;

linea 10: imposta un tempo di attesa di 100 millisecondi tra un invio ed il successivo, in questo modo i codici inviati non sono percepiti dal ricevitore  come un unico treno di segnali che potrebbe compromettere la decodifica corretta.

Secondo sketch – ricevi segnali IR

Passiamo ora allo sketch che ricevendo un segnale dal TSOP31238 lo converte nalla stringa decodificata:

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

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

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

linea 01: includi la stessa libreria vista sopra IRremote.h, che in questa situazione utilizzerai per decodificare il segnale proveniente dal trasmettitore IR;

linea 03: contrariamente a quanto avviene per la parte di invio quando utilizzi la libreria IRremote come ricevitore puoi decidere a quale pin connettere il sensore, in questo esempio collegalo al pin 11 e definisci la variabile di tipo intero RECV_PIN con valore 11 (il pin a cui hai collegato il sensore TSOP31238);

linea 05: inizializza un oggetto irrecv come istanza della classe IRrecv, passandogli la variabile RECV_PIN che imposta il pin su cui attendere il segnale di decodifica;

linea 07: definisci una variabile results in cui saranno inseriti i risultati della decondifica eseguiti dalla IRremote;

linea 09: definisci la funzione setup() in questo caso ha delle operazioni ben precise da eseguire inizializzare la comunicazione con il monitor seriale e attivare la ricezione;

line a 11: inizializza una comunicazione di tipo seriale a 9600 baud con il cpmpure a cui Arduino è connesso;

linea 12: con il metodo enableIRIn() abilita la comunicazione seriale, da questo momento tutti i segnali percepiti dal ricevitore IR saranno decodificati da Arduino;

linea 15: definisci la funzione loop();

linea 16: inserisci una condizione di controllo basandola sul metodo decode() dell’oggetto irrecv, tale metodo ritorna un valore true in presenza di un segnale valido di decodifica. La variabile results contiene il valore da decodificare;

linea 17: una volta decodificato il valore inviato puoi utilizzarlo per le tue applicazioni, in questo esempio utilizzando il metodo println() della Serial tale valore sarà scritto sul monitor seriale, siccome quello inviato è un codice esadecimale, utilizzia una opzione del metodo println() che ti consente di convertire il valore da scrivere già nella codifica corretta (HEX = Esadecimale);

linea 18: utilizza il metodo resume() della irrecv per rimettere il ricevitore nella condizione di attesa del segnale successivo;

Procedura di upload

Solitamente questa parte non la descrivo perchè ampiamente documentata sia sul sito ufficiale sia su questo stesso blog, tuttavia in questo caso quello che ti invito a fare è seguire i due semplici passi successivi per non crearti confuzione durante l’upload:

  1. definisci quale Arduino utilizzerai per l’invio e quale per la ricezione;
  2. prendi prima l’arduino che ha deciso di utilizzare per l’invio e collegalo alla USB;
  3. esegui l’upload del primo sketch;
  4. terminata l’operazione 3, scollega l’arduino e collega alla usb quello destinato a fare da ricevitore;
  5. esegui l’upload del secondo sketch;
  6. non scollegare l’arduino, poni led e ricevitore uno difronte all’altro come in figura;
  7. alimenta con una batteria da 9v o simile l’arduino di destra;
  8. apri il monitor seriale e guarda il codice pintato a video.
Arduino telecomando IR

Posizione dei 2 Arduino

Un piccolo trucco:

Siccome stai utilizzando infrarossi non ti sarà possibile vederli, sono invisibili all’ocio umano, per cui se non leggi alcun valore sul monitor seriale potrebbe essere dovuto alla completa mancanza di invio da parte del led, per verificarlo utilizza una comune macchina fotografica digitale, va benissimo anche quella del telefonino o la webcam del computer, inquadra il led e la fotocamera ti mostrerà se è acceso o spento, dovresti vederlo lampeggiare con una sequenza di segnali ogni 100 millisecondi.

Buon divertimento

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/tutorial-arduino-come-trasmettitore-ir-o-come-telecomando.html

119 commenti

Vai al modulo dei commenti

    • fabrizio il 5 Settembre 2012 alle 21:21
    • Rispondi

    Ciao volevo sapere , è possibile inserire questo sketch in altri tipi di sketch?Se si come si può fare?
    Ti spiego se io ho già degli sketch che mi accendono relè via web e volevo creare un telecomando sempre web per poter accendere la tv, ma quando inserisco questo sketch l’ide mi genera errori…
    Sapresti aiutarmi?
    Grazie
    Fabrizio Bianchi

    1. Ciao Fabrizio,
      con gli sketch puoi fare molte cose e puoi integrarli, in linea generale, senza problemi.
      Ci sono alcune librerie che risultano incompatibili con delle altre a causa dell’utilizzo dei medesimi pin o di comandi particolari, ma non puoi saperlo prima di averle provate.

      Per aiutarti dovrei conoscere quali librerie stai usando e i primi due errori che ti escono, ti prego di non incollare tutto lo sketch e tutti gli errori xchè non riuscirei a comprendere nulla.

      Mauro

    • andrea il 12 Settembre 2012 alle 07:34
    • Rispondi

    Ciao Mauro,
    ho la necessità di accendere e spegnere un piccolo media-player che non possiede tasti ma puo essere pilotato solo con il telecomando. La mia intenzione è collegare elettricamente arduino ai fili del sensore di ricezione bypassando il led IR del trasmettitore. Se collego ad arduino un led trasmettitore IR tutto funziona perfettamente ma io volevo evitare l’uso del led e riuscire a comunicare direttamente con i fili del sensore ricevente. Che modifiche occorrono?

    grazie e complimenti!!

    Andrea

    1. Ciao Andrea,
      la tua idea è molto interessante.
      Per realizzarla devi conoscere lo schema del Media Player, il tipo di segnali che il ricevitore IR invia all’apparato quando riceve il segnale di accensione, sarà una sequenza di qualche tipo, e programmare arduino per ripetere quella sequenza quando vuoi che sia accesso il media player.

      Senza gli schemi ed i segnali è impossibile ottenere quello che desideri, considerando anche il fatto che vorrai non rimuovere il ricevitore per poter impartire i comandi anche con il telecomando.

      Mauro

    • Carmelo il 16 Novembre 2012 alle 16:46
    • Rispondi

    Ciao Mauro,
    Volevo creare un emettitore ir che inviasse il segnale per cambiare canale al mio televisore. Il problema è che non viene inviato niente. ti mando lo sketch:

    #include

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);
    IRsend irsend;

    decode_results results;
    unsigned int buffer[68]={46653, 180, 88, 11, 11, 13……};

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

    void loop() {
    if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
    }

    for (int i = 0; i < 3; i++) {
    irsend.sendRaw(uno,4,38);
    delay(200);
    }
    }

    Ho provato anche a mettere nell'array "buffer" a inserire valori appresi usando il comando results.value e anteponendo 0x (0xB33B4597, 0xB33B4594, 0x1004849, 0xDE4306F1…).

    Al posto del led ir ne ho inserito uno normale e lampeggia, con il led ir però non viene inviato nessun segnale. Quale potrebbe essere il problema?

    1. Ciao Carmelo,
      io inizierei con il creare uno sketch che faccia una sola operazione, send o recv, non due nello sesso sketch come hai fatto.
      Non mi è chiara la stringa: irsend.sendRaw(uno,4,38); dove usi buffer?

      Mauro

    • Carmelo il 17 Novembre 2012 alle 10:49
    • Rispondi

    al posto di uno dovrebbe esserci scritto buffer:

    irsend.sendRaw(buffer,68,38); //stringa corretta

    avevo creato vari array con i codici dei vari comandi, ma sarebbe stato inutile postarli tutti, così ne ho lasciato solo uno chiamato buffer a titolo di esempio e ho dimenticato di cambiare il nome in quella stringa.

    Ho creato uno sketch che si occupa solo di inviare il segnale ma persiste il problema. Pensavo che la causa potesse esseere il led ir usato così, dopo aver testato il funzionamento di un telecomando di un vecchio lettore dvd, ne ho staccato il led e ho sostituito quello impiegato in precedenza, senza ottenere alcun risultato.

    I componenti sono stati collegati ad arduino nel modo da te indicato nello schema.

    Lo sketch viene compilato correttamente non riseco a capire quale sia il problema.
    Come ho già scritto ho sostituito il led ir con uno normale e lo si vede lampeggiare (chiaramente non invia nessun segnale), quindi il tutto credo che funzioni, con il led ir però non succcede niente, non viene cambiato canale.

    1. Ciao Carmelo,
      da quanto scrivi sebra tutto corretto, prova a verificare con un altro arduino ed un IRreciver se ciò che invii dal primo è correttamete compreso dal secodo.
      I problemi che riscontri potrebbero essere dovuti ad una non corretta interpretazione del codice inviato.
      Se risolvi rendici partecipi, mi farebbe piacere sapere che sei riuscito nell’intento.

      Mauro

    • stefano il 24 Novembre 2012 alle 21:10
    • Rispondi

    Buona sera

    Vorrei sapere se questo script funziona con arduino mega 2560 e con la stessa porta 3 ho fatto delle prove e non riesco a farlo funzionare non mi invia nessuna segnale

    grazie

    1. Ciao Stefano,
      non l’ho ma provato su un’arduino Mega, tuttavia il linguaggio di programmazione è il medesimo tra Uno e Mega cambiano numero di pin e utilizzo delle porte.
      Probabilmente dovrai adattarlo.

      Mauro

  1. Ciao 😉
    volevo chiederti una cosa che non ho capito :
    tu dici che “la libreria IR prevede alcune codifiche standard: (Sony, Nec, RC5, RC6) e dei metodi di codifica/decodifica di tipo raw” ma io avendo un televisore LG cosa devo usare e sopratutto come devo modificare la script : irsend.sendSony(dati, nbit );
    e in fine non ho capito che significa nbit in base a cosa ha i scelto 12 per inviare a90??
    GRAZIE IN ANTICIPO 😀

    1. Ciao Marino,
      ogni produttore di telecomandi usa una sua codifica, a volte differente anche da modello a modello.
      La libreria IR ha già per impostate una serie di codifiche e ti mette a disposizione dei metodi tipo sendSony per usare le per codifiche inserite.

      Se hai un telecomando LG e non rientra in nessuna codifica già impostata puoi utilizzare i metodi Row ( send() e read() ) per inviare e leggere i codici del tuo telecomando, ma dovrai scrivermi tu la codifica, io l’ho fatto per i tasti 0-9 del mio Samsung.

      Nell’articolo c’é scritto come fare.

      Mauro

    • davide il 3 Marzo 2013 alle 14:38
    • Rispondi

    Ciao! 🙂 intanto complimenti per il blog. hai sempre molti articoli interessanti e ben fatti! vorrei chiederti una cosa. ho visto che in commercio ci sono molti ricevitori ir. sono tutti utilizzabili con questa libreria o solo quello che hai indicato tu funziona? e il trasmettitore? va be un qualsiasi led ir?
    grazie in anticipo!

    1. Ciao Davide,
      io ho provato solo con i due ricevitori IR descritti nell’articolo.
      Dovresti consultare il datasheet del ricevitore che hai, in internet si trovano, e verificare che il tipo di segnale in uscita sia compatibile.

      In alternativa puoi modificare la libreria IR o trovare una libreria IR per il tuo ricevitore.

      Mauro

    • Domenico il 10 Marzo 2013 alle 11:01
    • Rispondi

    Ciao Mauro, ho provato il tuo sketch sotto riportato.
    Ma non capisco qual’è la porta di uscita alla quale collegare il led infrarosso visto che 12 è nbit della stringa inviata………….?

    #include
    IRsend irsend;
    void setup() { }
    void loop()
    {
    for (int i = 0; i < 3; i++)
    {
    irsend.sendSony(0xa90, 12); // Sony TV power code delay(100);
    }
    }

    1. Ciao Domenico,
      trovi il pin a cui collegare il led IR nello schema in alto, iPod pin 3 tramite resistenza apposita.
      Il in non puoi sceglierlo nello sketch é fissato nella libreria.
      Se volessi cambiario devi farlo nella libreria IRremote.

      Mauro

    • Domenico il 15 Marzo 2013 alle 11:34
    • Rispondi

    E’ possibile, o troppo difficile, usando per TX Arduino, farsi una propria codifica personale di nbit e quindi di
    conseguenza una decodifica complementare sull’ Arduino RX?
    Dove si potrebbe trovare del materiale didattico per farer questo?
    In questo modo, acquisendo una temperatura(diciamo a 8 bit) la si potrebbe trasmettere ad un ricevitore
    utilizzando la trasmissione infrarosso.

    1. Ciao Domenico,
      bella idea !!!
      io ti consiglio di studiare i protocolli di comunicazione e le codifiche IR, probabilmente è da li che devi partire per realizzare la tua codifica personale.

      Mauro

    • alessio il 17 Luglio 2013 alle 13:01
    • Rispondi

    ciao mauro, io ho scaricato la libreria iRremote, la libreria che permette di far comunicare due arduino attraverso il tuo progetto qui sopra.
    Volevo farti una domanda: io sto utilizzando IR con TSOP2236, quindi cambia qualcosa nello svolgimento dell’esperimento? inoltre quando apro IRsendDemo dalla libreria e provo a compilarla, eccola qui di seguito:

    #include

    IRsend irsend;

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

    void loop() {
    if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xa90, 12); // Sony TV power code
    delay(300);
    }
    }
    }

    mi dà questo errore e non riesco a capire cosa fare. Per caso potrebbe essere un problema con la libreria che non è stata implementata bene? io l'ho messa nella directory dove metto tutti gli sketch, continuando a darmi questo errore

    IRsendDemo:11: error: 'IRsend' does not name a type
    IRsendDemo.ino: In function 'void loop()':
    IRsendDemo:21: error: 'irsend' was not declared in this scope

    Ti ringrazio per l'aiuto
    Alessio

    1. Ciao Alessio,
      la libreria mi sembra sia stata scritta per l’IDE 0022 di Arduino, potrebbe non funzionare su versioni successive dell’IDE.
      L’errore che mi invii potrebbe essere causato sia dalla versione dell’IDE sia dall’installazione errata della libreria nel tuo IDE.

      Prova a controllare la compatibilità della libreria con il tuo IDE e leggere un tutorial su come installare una libreria in Arduino.

      Mauro

    • alessio il 3 Agosto 2013 alle 15:17
    • Rispondi

    ciao mauro, siccome non sono riuscito a risolvere questo problema, volevo chiederti se conosci un codice che mi permetta di far comunicare due arduini tramite infrarosso e ricevitore come in figura senza sfruttare la libreria IRremote! ti ringrazio!

    1. Ciao Alessio,
      le librerie ti aiutano tanto, se non le usi devi scriverti tutto da 0 e francamente mi sembra molto complesso rispetto al semplice utilizzo di una libreria.

      Se questa non fa l caso tuo puoi ricercare un’altra che controlli Tx ed Rx via IR

      Mauro

    • alessio il 7 Agosto 2013 alle 22:12
    • Rispondi

    ciao mauro, allora intanto grazie per le risposte e ti dico che ho risolto fortunatamente e ne sono felicissimo. allora ho provato il tuo progetto qui sopra e funziona alla grande, una domanda ti vorrei fare:
    Se io volessi utilizzare più di un led infrarosso per inviare segnali infrarossi e quindi più di un ricevitore per poterli leggere e ricevere, come cambierebbero i collegamenti? cioè a quali pin potrei collegarli? il codice come potrei modificarlo??? ti ringrazio anticipatamente
    alessio

    1. Ciao Alessio,
      non ho mai provato a collegare più led con invio codici differenti e il tuo esperimento è interessante.
      Ho il dubbio che la libreria IRRemote non permetta di controllare contemporaneamente più emettitori.

      Se fai un test mi piacerebbe condividerlo e pubblicarne il risultato.

      Mauro

        • alessio il 8 Agosto 2013 alle 14:22
        • Rispondi

        ciao mauro, guarda in serata provo a connettere più led infrarossi ma avendo un solo ricevitore. comunque si la libreria permette di usare un solo pin, ossia il pin 3! ora vediamo quello che riesco a fare. Una domanda.
        Quando collego i due arduini e apro il monitor seriale dell’arduino che riceve, io vedo su schermo dei codici numerici che cambiano in base alla distanza. Mettendo uno di fronte all’altro il led che invia e il ricevitore che riceve ad una distanza di pochi centimetri, ieri mi è capitato che come risultato sul monitor seriale mi usciva il risultato in codice numerico A90 in maniera costante. E’ normale che sia cosi? perché parlando con il mio professore universitario con cui sto facendo il tirocinio(su arduino appunto) mi dice che potrebbe essere un errore di comunicazione e di controllare se nel protocollo utilizzato ci sia un qualche controllo che prevede parità CRC o qualcosa di simile! mmm che ne pensi?

        1. Ciao Alessio,
          io non sono professore e penso che il tuo docente possa aver ragione, un’altra ipotesi che mi viene in mente é che l’influenza della luce ambiente influenzi lo scambio dei codici.

          Prova a effettuare un test con luce naturale o al massimo senza lampade al neon o risparmio energetico.

          Mauro

    • alessio il 8 Agosto 2013 alle 14:29
    • Rispondi

    scusa mauro un’altra cosa, ho notato che oltre i 15 centimetri il mio ricevitore poi non capta più i segnali infrarossi. C’è un modo per aumentare o la potenza del segnale o comuqne la distanza di trasmissione? almeno per arrivare a 2-3 metri?

    1. Ciao Alessio,
      i telecomandi delle Tv per aumentare il raggio utilizzano più led emettitori in parallelo, di solito due.
      Se li metti devi anche pensare ad un circuito di alimentazione adatto, perché più led potrebbero assorbire troppo per i pin arduino.

      Mauro

    • alessio il 10 Agosto 2013 alle 16:25
    • Rispondi

    Ciao mauro, per il problema delle distanze ho risolto mettendo una resistenza più piccola nel progetto dell’arduino che invia segnali, ossia ho comprato una resistenza di 20 ohm e il risultato è stato che ora posso tranquillamente allontanarmi di 5-6 metri e il mio ricevitore capta il segnale senza problema. Ora testerò quel problema sulle distanze, ossia del codice numerico che mi da valori costanti soltanto quando sono attaccati. ti faccio sapere. grazie ancora per l’aiiuto

    1. Ciao Alessio,
      ottima idea ridurre la resistenza, valuta bene il valore in funzione dalla tensione di alimentazione del diodo led e dei volt applicati per non rischiare col tempo di bruciare il led emettitore 🙂

      Mauro

    • Alex il 11 Agosto 2013 alle 18:54
    • Rispondi

    Ciao Mauro,
    Ho realizzato e sperimentato lo sketch e funziona tutto, anche col televisore. Ma.. non sono in grado di farne un uso pratico per queste ragioni.
    L’emissione del segnale avviene appena si alimenta il circuito mentre sarebbe necessario innescarlo con un input (pulsante o altro input analogico). Inoltre l’emettitore ripete il segnale senza soluzione di continuità. Sui televisori Sony il comando A90 ha valore ON ma anche OFF per cui il televisore si accende e si spegne continuamente.
    Da questo avrai già dedotto i miei limiti in fatto di programmazione.
    Se non è troppo ti chiederei cortesemente se puoi darmi suggerimenti per ovviare al problema, magari inserendo la possibilità di usare un paio di ulteriori tasti per avere più comandi.
    Ti ringrazio intanto per tutto quello che ho appreso fin qui dal tuo blog e anche per quello che potrai rispondermi in merito a questi quesiti.
    Con ammirazione
    Alex

    1. Ciao Alex,
      ti consiglio di leggere qualche articolo sull’uso dei pulsanti e vedrai che aggiungere un controllo con dei pulsanti è alquanto semplice.

      Mauro

    • Gianni il 18 Settembre 2013 alle 13:47
    • Rispondi

    Salve ho qualche domanda…
    Ho decodificato il telecomando con i raw code..
    per l’emitter infrarossi,

    1. Ho comprato l’IR emitter (trasmettitore) ma la resistenza da quanti watt? e quanti ohm?
    2. Devo per forza collegare l’IR emitter su un pin specifico?
    GRAZIE!!

    1. Ciao Gianni,
      io ho usato una resistenza da 470ohm, come vedi dai colori nella figura.
      Per il pin arduino, se non ricordo male, la libreria IRremote usa il pin 3 come emettitore e non consente di scegliere il pin.

      Mauro

        • Gianni il 18 Settembre 2013 alle 17:11
        • Rispondi

        Grazie per avermi risposto… ma ho un problemone…
        ho decodificato il telecomando per il condizionatore ariston. Non scrivo tutto, sai se potresti aiutarmi? ecco qua..
        http://forum.arduino.cc/index.php?topic=187145.msg1395966#msg1395966

        1. Ciao Gianni,
          prova ad eseguire più volte la decodifica dal telecomando originale e verificare che i codici siano sempre identici.

          Mauro

        • Gianni il 19 Settembre 2013 alle 01:01
        • Rispondi

        Scusa il doppio commento ma mi viene il dubbio della luminosità del led perche quando io vado a controllare con la fotocamera, il led del telecomando si illumina di piu mentre quello di arduino di meno… (credo… non vorrei dire una cavolata)
        poi quello di arduino quando manda il segnale sta mezzo secondo mentre il telecomando uno.. e il led si spegne…consigli??

        1. Ciao Gianni,
          la luminosità del led identifica solo la distanza coperta dal segnale e la qualità dell’impulso percepita dal condizionatore.

          Puoi variare l’intensitá luminosa abbassando la resistenza di connessione, se il tuo led ha delle specifiche di alimentazione note, non sempre le hai, puoi calcolare la resistenza con la legge di Ohm.

          Mauro

            • Gianni il 19 Settembre 2013 alle 11:19

            Ciao grazie per avermi risposto… il problema seguente è questo… lo sketch dovrebbe essere ok, prendendo una fotocamera riesco a vedere che il led ir trasmette… l’unica cosa è che non succede niente.. il led dal condizionatore dista un metro e mezzo circa.. ho provato a metterlo anche a 50 cm ma niente…

            ho un led con una resistenza da 470 ohm come hai detto tu..

            Non so che fare… l’unico dubbio è il seguente:

            Quando provo ad accendere il condizionatore con il telecomando, il led rimane fisso per un secondo… mentre quando provo con arduino rimane fisso per mezzo secondo… non so se dipende da quello… sapresti dirmi qualche cosa a riguardo?

          1. Ciao Gianni,
            prova ad appoggiare l’emettitore al condizionatore così eviterai anche la possibile corruzione del segnale da parte di luci o lampade esterne al tuo progetto.

            Mauro

    • Gianni il 19 Settembre 2013 alle 17:33
    • Rispondi

    Ciao e grazie.. allora forse ho scoperto il problema…
    se guardi in questa foto: http://imagebin.org/271373

    c’è il codice
    8587774C
    Unknown encoding: 8587774C (32 bits)

    il primo con l’ultimo… ma tutti i numeri in serie sono diversi… ho fatto sempre.. ON – OFF.. ON OFF..
    soluzioni?

    • Gianni il 21 Settembre 2013 alle 11:17
    • Rispondi

    il problema è che mi da ogni volta raw code diversi quando vado a leggerli con recvDump… e non riesco giustamente a farlo andare…

    soluzioni?

    1. Lo so Gianni, é la parte più difficile quella del riconoscimento dei codici.
      L’unica tecnica eh conosco é provare e riprovare fino a individuare i codici più simili e ricorrenti.

      Mauro

    • Gianni il 26 Settembre 2013 alle 17:14
    • Rispondi

    Beh ho provato ad accendere una tv samsung sia in rawcode che sendSamsung() e funziona, ma il condizionatore non ne vuole sapere… non so se sbaglio la frequenza… trasmetto a 38Khz… hai qualche consiglio da darmi?

    1. Ciao Gianni,
      il tuo test con un televisore Samsung e la codifica corretta dimostra che il circuito e lo sketch funziona.
      Il condizionatore potrebbe non funzionare a 38Hz o la codifica non é corretta.

      Mauro

        • Gianni il 28 Settembre 2013 alle 11:47
        • Rispondi

        ciao anch’io presuppongo che la codifica sia sbagliata… a quanto potrebbe essere?
        ho provato 12 poi dai 34 a 40

        1. Ciao Gianni,
          purtroppo non sono numeri che si possono indovinare, sono solo frutto di test e test fino a comprendere la corretta sequenza.

          Mauro

            • Gianni il 1 Ottobre 2013 alle 15:26

            Ciao e per vedere a che frequenza lavora hai una guida?
            Da quanto può oscillare la frequenza? non credo fino a 330mhz :\ cosi evito di provarli tutti

          1. Ciao Gianni,
            purtroppo non ho una guida da suggerirti.

            Mauro

    • alessio il 4 Novembre 2013 alle 10:19
    • Rispondi

    Ciao mauro, Sono alessio, ho già scritto in precedenza in questo blog. vorrei chiederti una cosa: Io devo mandare dei messaggi ( testuali, usando anche un array) dal mio arduino TX ( che trasmette il segnale attravers led infrarossi) al mio secondo arduino RX (ho un ricevitore TSOP che riceve questi segnali infrarossi). Come posso fare? gli arduino che sto utilizzando sono entrambi Arduino Uno. Ho implementato una libreria per il controllo di parità degli errori, La libreria CRC però non so come risolvere il problema di invio messaggio da un arduino all’altro. ossia se io scrivo un ”ciao” sul primo arduino, il secondo lo deve leggere nel suo monitor seriale.
    Ti ringrazio per l’aiuto
    Alessio

    ecco qui il commento come da te richiesto

    1. Ciao Alessio,
      la libreria che hai implementato gestisce l’invio di stringhe di testo attraverso l’IR?

      Mauro

        • alessio il 4 Novembre 2013 alle 22:51
        • Rispondi

        ciao mauro, allora la libreria CRC è stata creata da un utente e credo gestisca l’invio delle stringhe tramite IR. Ma la libreria IRremote di per se non lo permette di farlo? in quanto la libreria CRC mi servirebbe soltanto per gestire gli errori durante la trasmissione. guarda ho trovato questo codice sul blog di arduino, e te lo metto qui in descrizione, l’ho provato ma sembra non funzionare. Riesci a capirne il motivo? ti linko direttamente la pagina senza copiare tutto il codice.

        http://forum.arduino.cc/index.php/topic,10555.0.html

        ecco qui.
        Spero di risolvere questo problema! a presto
        alessio

        1. Ciao Alessio,
          che io sappia la IRRemote non è in grado di inviare stringhe, si limita a codificare segnali IR per i più comuni telecomandi.
          Per lo sketch che hai trovato ti invito a scrivere sul forum che errori incontri.

          Sicuramente l’autore potrà aiutarti ed ha maggiori competenze sul suo programma.

          Mauro

    • Nicola il 14 Gennaio 2014 alle 19:23
    • Rispondi

    Ciao Mauro, mi sono addentrato da poco nel mondo dei segnali IR con Arduino.Ho creato un piccolo sistema con un ricevitore TSOP4838 , il quale riceve segnali da un telecomando Sony . Il sistema è veramente basilare, ovvero riceve il segnale , lo decodifica in Hex e lo mostra sul monitor seriale, in pratica è solo la parte di Ricezione del progetto qui sopra.. Tuttavia ho notato che con la pressione ” usuale” di un tasto, ovvero la stessa che imprimo per cambiare un canale TV, il sistema mostra in uscita più volte il valore corrispondente. Ho pensato di realizzare una specie di Debouncer per il valore letto , in quanto avrei necessità di inserire delle sequenze da 3 cifre, tuttavia non so se è possibile realizzarlo sfruttando solo i metodi della libreria IRremote o se devo spostare il lavoro su un altro piano ( ad esempio inserire un piccolo delay nella lettura del segnale). Puoi darmi qualche consiglio?

    1. Ciao Nicola,
      come avrai letto o sperimentato i segnali IR sono dei “treni d’onda” ossia la sequenza di codici di ciascun tasto viene inviata a ripetizione per tutto il tempo in cui mantieni il pulsante premuto.
      Nel tuo telecomando probabilmente la pressione del pulsante genera più volte l’invio del segnale.

      Dovrai di certo implementare un sistema di controllo lato sketch.

      Mauro

    • marco il 12 Marzo 2014 alle 11:34
    • Rispondi

    complimenti per l’articolo, sono un ragazzo alle prime armi con arduino e non capisco perchè nel primo sketch mi generi questi errori:
    sketch_mar12a:5: error: ‘IRrecv’ does not name a type
    sketch_mar12a:7: error: ‘decode_results’ does not name a type
    sketch_mar12a.ino: In function ‘void setup()’:
    sketch_mar12a:12: error: ‘irrecv’ was not declared in this scope
    sketch_mar12a.ino: In function ‘void loop()’:
    sketch_mar12a:16: error: ‘irrecv’ was not declared in this scope
    sketch_mar12a:16: error: ‘results’ was not declared in this scope
    probabilmente sono errori banali, ma non riesco a trovare la soluzione.
    grazie

    1. Ciao Marco,
      se leggi bene l’articolo troverai descritto che la libreria IRRemote devi scaricarla dal Web e installarla su Arduino.
      Nota che potresti non trovare la versione della IRRemote per l’IDE 1.0 o superiore e dovrai modificarla per adattarla alla tua versione dell’IDE.

  2. Ciao Mauro,
    volevo chiederti una cosa,
    con questo processo( intento schema e sketch ) sia possibile creare un apparecchio evidentemente con arduino che potesse inviare codici ricevuti nel comando via infrarossi per comandare tv e altro?

    1. Ciao Guy, non ho capito la richiesta.

    • Yaxit il 2 Maggio 2014 alle 19:35
    • Rispondi

    Ciao, trovo utilissima la tua guida, ma ho un problema: il ricevitore mi segnala codici HEX diversi ogni volta, anche se premo lo stesso pulsante del telecomando… Ora, siccome avrei esigenza di avere segnali uguali per creare un telecomando per macchinina telecomandata, hai qualche idea di come si possa risolvere?
    PS: ho messo una resistenza da 2000 ohm tra il 5v e il sensore, che sia questa? Non vorrei bruciarlo che è l’ultimo che mi rimane.
    Ciao e grazie 1000!

    1. Ciao Yaxit,
      sei certo di utilizzare un telecomando compatibile con la libreria IRemote?
      A volte problemi simili sono dovuti ad un errata interpretazione dei codici emessi dal telecomando.

      Considera anche che il segnale IR è costituito da un treno di impulsi e questi possono causare delle letture anomale.

        • Yaxit il 21 Maggio 2014 alle 19:07
        • Rispondi

        Effettivamente il problema era causato dalla resistenza. Confermo che non va messa e funziona benisismo sul 5V!
        Arrivederci!

        1. Grazie Yaxit per la conferma.

    • Matteo il 3 Luglio 2014 alle 16:07
    • Rispondi

    Ciao! Volevo farti una domanda.. ho realizzato questo circuito ma la portata del LED è davvero irrisoria (1 m circa) a questo punto mi è venuto in mente che avrei potuto pilotarlo tramite transistor così da far attraversa una corrente di 80mA circa sul LED ma una volta arrivato alla messa in opera del progetto mi sono accordo che la libreria pilota l’ir tramite PWM e il transistor invece viene collegato a un pin digitale qualsiasi di Arduino!
    Come posso risolvere questo? Grazie in anticipo!

    1. Ciao Matteo,
      potresti sostituire il transistor con un mosfet o altro tipo di driver per led in modo che usi il PWM per modulare il segnale e fornisca 80mA necessari al tuo led.

    • AntonioG il 10 Luglio 2014 alle 18:41
    • Rispondi

    Buonasera Mauro, ottima guida, ma ho qualche domanda da fare, per modificare leggermente lo scopo della trasmissione ir.
    In pratica ho la necessità di utlizzare dei sensori e trasmettitori ir (led e fototransistor, esattamente il TCRT5000L), come pulsanti, ma ansichè analizzare lo stato alto o basso (che potrebbe creare ambiguità in un progetto reale, per non escludere il guasto di un sensore) vorrei trasmettere un treno di bit in seriale (basterebbero anche 2 byte) da far leggere ad un altro arduino che possiede il ricevitore (ma se riuscissi a far leggere il dato allo stesso arduino sarebbe anche meglio) in pratica una sorta di trasmissione irda telecomando-ricevitore ma senza modulazioni.
    E’ possibilile tuttociò senza grosse difficoltà?
    Grazie, attendo tue risposte.

    1. Ciao Antonio, non ho mai sperimentato questa tecnica, dovresti provare. Se lo fi mi piacerebbe condividere il tuo esperimento con altri appassionati del blog.

    • marco il 4 Febbraio 2015 alle 09:41
    • Rispondi

    Buongiorno,
    ho preso arduino perchè sono affascinato dall’elettronica nonostante la mia ignoranza in materia.
    Grazie a internet e al suo blog sono riuscito a comandare una scheda relè con un telecomando a IR, ora, venendo al punto, la mia domanda è la seguente: la mia intenzione è accendere e spegnere il relè “X” con lo stesso pulsante del telecomando e tutti assieme con un’altro pulsante, ma se nello sketch utilizzando lo stesso codice sia per HIGH che per LOW la scheda si blocca, perciò volevo sapere se esiste la possibilità di fare questa operazione oppure devo “sprecare” due pulsanti per accendere o spegnere il relè.
    Grazie per l’attenzione
    Furlan Marco

    1. Ciao Marco,
      è fattibile con un unico pulsante.
      Se si blocca è perché hai commesso qualche errore nel codice.
      Tuttavia io ti consiglio di usare 2 pulsanti in quanto potresti ottenere che con il medesimo pulsante, essendo l’IR un treno d’onda, la luce si accenda e si spenga continuamente non riuscendo a funzionare in modo corretto.

    • MatteoC il 10 Febbraio 2015 alle 18:31
    • Rispondi

    Ciao Marco,
    ho un amplificatore a valvole con la regolazione di volume manuale e vorrei poterla telecomandare, in modo da evitarmi di alzarmi ogni volta dalla poltrona per regolare il volume :-).
    Per fare questo ho pensato di controllare, tramite un telecomando ad infrarossi, un motore passo-passo che, tramite un ingranaggio/puleggia, mi farebbe ruotare meccanicamente la manopola del volume.
    Sul telecomando vorrei mettere un potenziometro che, quando viene ruotato, m’invii il comando di rotazione al motore.
    Il potenziometro però mi esce con i valori di resistenza da 0 a 1023.
    Come mi suggerisci di codificarli per poterli poi trasmettere via infrarossi al ricevitore e quindi al motore passo-passo?
    Ho cercato un po’ in giro ma non ho trovato progetti simili già esistenti, hai delle indicazioni da darmi?
    Grazie in anticipo,
    Matteo

    1. Ciao Matteo,
      innanzitutto se dovessi realizzare io un sistema di controllo come il tuo penserei di usare soli due tasti del telecomando + e – del volume per controllare il volume dell’amplificatore anche in funzione del tipo movimento della manopola presente sull’amplificatore che probabilmente é un encoder ( a rotazione continua ) mentre il potenziometro è limitato su un arco definito dal produttore.

        • MatteoC il 13 Febbraio 2015 alle 12:00
        • Rispondi

        Ciao Mauro,
        sì avevo già pensato di fare come suggerisci, è più semplice e lineare.
        Mi piacerebbe però simulare sul telecomando proprio la manopola del potenziometro del volume dell’amplificatore, che comunque ha un fine corsa di minimo e di massimo.
        Quello che non riesco a capire è come far corrispondere a ciascun valore del potenziometro del telecomando un codice di trasmissione infrarosso.
        Sai suggerirmi qualcosa?
        Grazie mille,
        Matteo

        1. Ciao Matteo,
          puoi rimappare il valore 0-1023 a tipo di spostamento che vuoi ottenere sul motore passo-passo, il problema in questo caso è che il motore passo-passo non è il più adatto per un lavoro di questo tipo per 2 motivi:

          1. non puoi sapere dove si trova solo contando i passi perchè se ti si resetta arduino ( ricevitore ) hai perso il conteggio
          2. il motore passo-passo fa di solito 200 passi giro ossia 1,8° al passo per cui se vuoi minor spostamento devi calcolarti le riduzioni di passo per fare quello che ti serve

          Io propenderei per un servo che almeno ha un feedback per cui se lo imposti a 30° va a 30° e puoi mapparlo 1 ad 1 con il potenziometro, trovi molti esempi sul blog.

    • giorgio il 6 Luglio 2015 alle 10:18
    • Rispondi

    ciao Mauro,
    volevo chiederti, è possibile associare ad un segnale infrarossi un’azione? .
    Mi spiego meglio se io nel primo arduino metto un pulsante, nel secondo(il ricevente), quando riceve l’imformazione che io ho premuto il pulsante, si accende un led.
    si può fare ?, se si come?

    1. Ciao Giorgio,
      ciò che descrivi è fattibile e molto simile al funzionamento di un telecomando IR.
      Leggi i miei articoli sugli IR dovrebbe esserti facile realizzare quello che desideri.

    • Antonio il 31 Agosto 2015 alle 14:11
    • Rispondi

    Ciao io ho un vecchio amplificatore della sony collegato al pc, quando guardo dei film ho bisogno di abbassare o alzare il volume di continuo e tutto questo risulta scomodo senza un telecomando. ho smontato l’amplificatore e ho visto che per per alzare il volume non ce nessun potenziometro lineare o logaritmico ma ci sono solo due piccoli pulsanti, quindi ho dedotto che si tratta di un potenziometro digitale. Se collego dei fili ai pulsanti per alzare il volume e ad arduino e poi collego anche un sensore ir come quello della guida posso alzare il volume con un telecomando?

    1. Ciao Antonio,
      questo articolo spiega come realizzare un telecomando con Arduino, non un ricevitore.
      Ne ho scritti altri che ti invito a leggere in cui ho scritto come realizzare un ricevitore con arduino e che potrebbe essere più adatto al tuo progetto.
      Per l’interfaccia all’amplificatore di consiglio un circuito con optoisolatore in modo da non danneggiare l’amplificatore se colleghi in modo errato i comandi e non conoscendo tensioni e correnti sui pulsanti rischi di danneggiare sia arduino sia l’amplificatore.

        • Antonio il 1 Settembre 2015 alle 12:25
        • Rispondi

        Io stavo pensando di usare un modulo con 2 relè (uno per alzare il volume e uno per abbassarlo). Potresti fare un tutorial riguardo l’optoisolatore perché non ne ho mai sentito parlare

        1. Ciao Antonio,
          ne trovi alcuni già fatti nel blog in merito ai dolly ed al controllo di scatto su macchina fotografica.

            • Antonio il 2 Settembre 2015 alle 20:06

            Ciao Mauro,
            ho risolto il problema, funziona tutto come avevo in mente. Siccome mi hai detto che collegando direttamente i cavi dai pulsanti ad arduino rischio di danneggiare sia l’amply che arduino ho utilizzato una shield con 2 relè, va bene se uso questi al posto dei optoisolatori? perchè al momento ho solo questi, cmq anche se va bene rimanere con i relè ti chiedo di dirmi il nome di un integrato che fa da optoisolatore xkè ogni volta che regolo il volume il rumore che emettono i relè da fastidio.

          1. Ciao Antonio,
            mi hai anticipato .. i relay vanno bene ma il rumore è fastidioso.
            L’optoisolatore se lo cerchi nel blog troverai che è trattato in diversi articoli, non ricordo a memoria la sigla.

    • 21Udx il 20 Ottobre 2015 alle 14:27
    • Rispondi

    Ciao Mauro,
    io ho dei problemi nel riconoscimento della libreria
    ho eseguito alla lettera il punto 1 :

    ____________________________________________________________________
    “”linea 01: includi la libreria IRremote.h, la libreria dovrà essere presente nella stessa dir in cui metterai lo sketch, altrimenti l’IDE potrebbe darti errore perchè non la trova;””
    ____________________________________________________________________

    quello che mi dice in fase di compilazione è:

    ___________________________________________________________________
    cancellare_si.ino:3:1: error: ‘IRsend’ does not name a type
    cancellare_si.ino: In function ‘void loop()’:
    cancellare_si.ino:9:5: error: ‘iirsend’ was not declared in this scope
    ‘IRsend’ does not name a type
    ____________________________________________________________________

    Il file si chiama “cancellare_si.ino”

    ciao e grazie in anticipo!

    Rodolfo (21Udx)

    1. Ciao Rodolfo,
      l’errore che ricevi è relativo ad un metodo che nella libreria che hai incluso non è presente, non vedo l’uso di quel metodo nel mio esempio.
      Il modo più semplice è trovare una libreria che implementi quel metodo o modificare la chiamata usando il metodo previsto dalla tua libreria per il send.

    • 21Udx il 20 Ottobre 2015 alle 14:35
    • Rispondi

    (Proseguo il POST Precedente) Ho letto anche altre domande che più o meno hanno lo stesso problema , ma scusami NON sono comunuque riuscito a capire il rimedio.

    Per esempio dove trovare la versione dell’IDE.

    Ancora Ciao

    1. Ciao Rodolfo,
      leggi risposta precedente.

    • 21Udx il 22 Ottobre 2015 alle 14:56
    • Rispondi

    Scusami Mauro ma io scrivo lo sketch che tu hai postato :
    ________________________________________________________

    [[ codice rimosso in automatico ]]

    ________________________________________________________

    e mi da questo errore :
    ______________________________________________________
    da_cancellar_2:3: error: 'IRsend' does not name a type
    da_cancellar_2.ino: In function 'void loop()':
    da_cancellar_2:9: error: 'irsend' was not declared in this scope
    'IRsend' does not name a type
    ________________________________________________________

    la versione è ARDUINO 1.6.4

    (Capisco che NON è facile, purtroppo ho fatto molti altri tentativi e chiarimenti , ma ancora NON ci sono riuscito)
    Nella mia ignoranza mi sembra di capire che nella libreria l’istanza IRSend NON è correttamente definita, giusto?

    Ciao

    1. Ciao 21Udx,
      come avrai letto, in fondo ad ogni articolo, non è consentito incollare codice nei commenti.
      Tuttavia rileggendo l’articolo ho trovato la parte a cui ti riferisci, e penso che la libreria che stai utilizzando non possieda la definizione IRsend, cerca una libreria che la possieda.

        • 21Udx il 22 Ottobre 2015 alle 19:51
        • Rispondi

        Ciao Mauro ,
        (intanto a prescindere da tutto, grazie per avermi risposto fino ad ora)
        __________________________________________________________________________________
        il codice che avevo postato non era altro che quello che tu hai messo all’inizio della discussione , (era solo per richiamare quel determinato post) , comunque secondo te la libreria che sto utilizzando NON ha la definizione IRSend , beh! tutto può essere , ma mi sembra strano dato che è quella che è stata scaricata dal sito ufficiale di ARDUINO!

        Inoltre , e non so se può aiutarci a capire il problema, ma la stessa libreria stranamente funziona con lrRecv!

        Ma allora se così fosse sai per caso dove posso ottenere la libreria che possieda anche la definizione IRsend?
        __________________________________________________________

        Ciao

        Rodolfo (21Udx)

        1. Ciao 21Udx,
          tanto più se il codice è già pubblicato nell’articolo, basta citarlo.
          Il sistema in automatico rimuove i codici dai commenti.

          Io non ho usato quella ufficiale dal sito arduino, quando ho scritto questi articoli non esisteva una libreria ufficiale.
          Sul sito arduino.cc, solitamente, trovi anche la documentazione della libreria e puoi verificare come utilizzarla e con cosa sostituire il metodo che non ti funziona.

            • 21Udx il 26 Ottobre 2015 alle 19:09

            Risolto!
            Ho scaricato dal sito ufficiale le librerie , e con quelle è andato bene.
            Ora proverò a fare delle prove sia di ricezione che di trasmissione.
            Grazie Mauro per la tua disponibilità.
            Se posso esserti utile in qualche cosa ne sarei molto felice.

            Grazie per ora
            Rodolfo (21Udx)

          1. Ciao Rodolfo ( 21Udx ),
            bene sono contento, se vorrai poi condividere il tuo progetto, una volta concluso, penso che a molti possa interessare la tua esperienza.

    • 21Udx il 6 Novembre 2015 alle 22:29
    • Rispondi

    scusa Mauro , ma come posso condividere il mio progetto se non posso neanche pubblicare il codice , più che dire che ci sono riuscito non saprei come fare. Inoltre ho anche fatto altri piccoli progettini dove per esempio accendo e spengo delle strisce di LED con dei comandi da Cellulare su ANDROID , con una mia APP creata appositamente da me che lavora e invia i dati in Bluetooth poi attraverso un ricevitore appunto bluetooth li faccio “DIGERIRE” ad ARDUINO, ecco ma più di descriverlo in questa maniera , sinceramente non saprei come fare, magari se qualcuno è interessato sarebbe un piacere spiegare meglio ……………(ovviamente come si dice “NO PERDITEMPO”) 😉

    1. Ciao Rodolfo,
      quando vuoi condividere un progetto io sono sempre felice di farlo.
      Nella pagina https://www.mauroalfieri.it/collabora.html trovi il primo paragrafo “Hai un articolo da scrivere su una delle categorie presenti in questo sito?” che spiega come fare.
      Se necessito di maggiori dettagli scrivimi sulla casella info del blog.

    • Tino il 16 Novembre 2015 alle 00:25
    • Rispondi

    Buonasera,
    lo so che forse non è molto pertinente ma, tempo fa lessi che è possibile con un led IR a 38khz ed un TSOP38838 rilevare segnali anche a distanze di qualche decina di metri. Di che tipo di led si tratta? E come pilotarlo?
    Grazie

    1. Ciao Tino,
      avevo sentito e letto qualcosa del genere, ma non ho mai sperimentato questa tecnica che si basa sul principio del sonar ma a livello ottico.
      Prova a d approfondire e magari scrivi un articolo che ti pubblico molto volentieri.

    • fausto il 17 Novembre 2015 alle 15:06
    • Rispondi

    salve Mauro,
    avrei una domanda da porti,
    sto cercando di creare uno sketch dove premendo un tasto accendo un led e poi questo si dovrebbe spegnere. mi accade che la condizione si verifica, accendo il led, faccio un delay di 3 secondi e poi spengo il led ma ciò non avviene… come mai?

    [[ codice rimosso in automatico ]]

    1. Ciao Fausto,
      come hai letto in fondo ad ogni articolo è vietato inserire sketch nei commenti, essi vengono rimossi in automatico.
      Controlla bene, riga per riga, dove hai inserito il delay e verifica che la condizione di attesa si verifichi solo dopo l’accensione del led.

        • fausto il 18 Novembre 2015 alle 12:29
        • Rispondi

        INNANZI TUTTO SCUSAMI PER AVER INSERITO LO SKETCH..LO STESSO PREVEDE CHE AL VERIFICARSI DELLA CONDIZIONE ACCENDO IL LED POI METTO UN DELAY DI TRE SECONDI E SPENGO IL TUTTO.. QUESTO PERò SULL’ATTO PRATICO NON ACCADE IN QUANTO IL LED SI ACCENDE AL VERIFICARSI DELLLA CONDIZIONE MA POI NON SI SPEGNE. MI CHIEDO SE è POSSIBILE CHE CI SIA UNA SORTA DI CONFLITTO CON LA LIBRERIA IR.REMOTE?? POI MI CHIEDEVO SE QUANDO TU PREMI UN TASTO DEL TELECOMANDO E QUESTO VIENE DECODIFICATO, LOSTESSO RIMANE IN MEMORIA ANCHE NEI LOOP SUCCESSIVI FINO A QUANDO TU NON PREMI UN ALTRO TASTO??? QUESTO POTREBBE ESSERE IL MOTIVO PER CUI SEMBRA CHE NON SI SPENGA VISTO CHE DOPO IL DELAY IL LED VIENE SPENTO MA SUBITO LA CONDIZIONE SI VERIFICA E SI ACCENDE NUOVAMENTE. A QUESTO PUNTO POTREI USARE UN COMANDO BREAK PER ESEMPIO???
        GRAZIE MILLE PER L’ATTENZIONE.

        1. Ciao Fausto,
          mi spiace doverti riprendere nuovamente ma l’USO DEL MAIUSCOLO SUL WEB E’ CONSIDERATO URLARE e non è carino 🙁
          Per verificare la seconda ipotesi usa pure lo sketch di ricezione di questo articolo, se rimane in memoria il segnale letto sul seriale lo vedi continuamente scritto.
          Da come lo descrivi, però, sembra un errore di programmazione, prova a fare tutto prima con un semplice pulsante e quando lo sketch funziona sostituisci la libreria.

    • francesco il 9 Giugno 2016 alle 13:03
    • Rispondi

    Ciao Mauro,
    mi trovo in difficoltà a dover comandare con telecomando Car MP3 (kit Arduico), due motor step 28BYJ-48 5V con scheda Arduino uno in modo che quando tengo premuto un tasto 4 o 6 o 2 o 8, il motore gira fino a quando non lo libero. Inoltre la rotazione dovrebbe avere un angolo di 180° circa.
    Nel file sottostante il motore gira fino a fine corsa anche se il pulsante non viene più pigiato e se ripremuto continua ancora a girare. Quindi non riesco ad ottenere quanto vorrei all’interno dei “case :” sinistra destra, sù e giù. premetto che con il joystick ci riesco egregiamnete, codice giaà incluso nello sketch che ti propongo. Puoi Aiutarmi? Grazie

    [[ codice rimosso in automatico ]]

    1. Ciao Francesco,
      premetto che, come hai letto in tutti gli articoli del blog, non è consentito incollare codice per quello esiste il forum arduino.
      Non sono certo di aver capito quello che ti occorre tuttavia penso che se lo sketch funziona con il joystick e non funziona con il telecomando IR potresti utilizzare il monitor seriale per comprendere cosa cambia tra i due input e nel comportamento del tuo sketch.

    • Mattia il 13 Aprile 2017 alle 20:13
    • Rispondi

    Ciao mauro complimenti per il blog, molto interessante!
    Volevo chiederti se era possibile inserire i due sketch in un solo arduino.
    Grazie in aticipo,
    Mattia

    1. Ciao Mattia,
      la risposta è una domanda: se fosse possibile come vorresti selezionare quale eseguire?

    • Caterina il 1 Giugno 2017 alle 13:57
    • Rispondi

    ciao volevo sapere se fosse possibile applicare la tua idea per misurare la distanza da un ostacolo usando il ricevitore da una parte e un led dall’altra, per poi attivare un buzzer.
    Questo è il codice che ho realizzato.
    Posso dividerlo su due arduino e in che modo? Il buzzer lo colloco nell’arduino di sinistra?
    Inoltre il led di cui parli deve essere trasparente o posso utilizzare un red di qualunque colore presente nel kit di arduino?
    Grazie.

    [[ codice rimosso in automatico ]]

    1. Ciao Caterina,
      in primo luogo ti invito a leggere, comprendere e rispettare le due semplici regole presenti in fondo ad ogni articolo.
      Se dovessi misurare una distanza userei un sensore della sharp come quello presente sul robot beginner kit.

        • Caterina il 3 Giugno 2017 alle 18:18
        • Rispondi

        Mi scusi, perdoni la mia sbadataggine. La ringrazio per il consiglio.

        1. Nessun problema.

    • Andrea il 3 Marzo 2019 alle 17:07
    • Rispondi

    Ciao Mauro,

    avrei bisogno, se possibile, di un tuo aiuto per fare un’applicazione col telecomando ir della tv e un amplificatore hi-fi.
    Vorrei usare un solo telecomando per accensione/spegnimento, volume+, volume- e magari altri tasti, per comandare contemporaneamente tv e amplificatore, siccome l’amplificatore non essendo audio video è possibile accenderlo solo con telecomando o tasto sul frontale.
    Vorrei usare arduino uno come “convertitore di raggi ir” ovvero ricevendo un segnale che può per esempio essere quello di accensione/spegnimento dal telecomando tv, me lo riconosca attraverso un TSOP1738 o TSOP31238 sul pin 11 e mi dia in uscita su un led ir collegato sul pin 3 il segnale di accensione/spegnimento per l’amplificatore; in questo modo il segnale ir mandato dal telecomando tv accenderà la tv, nello stesso momento verrà convertito da arduino e mandato all’amplificatore che si accenderà contemporaneamente.
    Ho trovato vari esempi per decodificare il segnale di un telecomando ir anche in raw, ed anche esempi di come comandare un led ir con codici raw e non, ma non sono riuscito ancora ad unire le due cose, cioè ad un segnale ir in ingresso abbinare un segnale ir in uscita diverso, precedentemente decodificato, che mantenga anche le stesse caratteristiche cicliche come può essere il tasto del volume+ volume-; dovrà dare una serie di codici solo finchè tengo premuto il tasto.
    Credo sia un problema comune che gli appassionati di audio e audiovideo hanno come me, io personalmente non ho trovato nulla di commerciale da poter utilizzare, a parte acquistare un telecomando programmabile; credo questa possa essere una soluzione.

    Ti ringrazio per aver letto la mia richiesta e spero col tuo aiuto di riuscire nel mio esperimento.

    Ciao e grazie

    Andrea

    1. Ciao Andrea,
      da anni non sperimento più con IR e tutto quello che ho sperimentato lo trovi nel blog, questo è certamente il miglior aiuto che io possa darti oggi.
      In generale come idea è bella e come esperimento potrebbe essere interessante per accrescere le tue conoscenze se lo imposti come esperimento di studio, altrimenti protenderei a suggerirti una soluzione con telecomando programmabile che trovi certamente in formato commerciale.

    • Andrea il 5 Marzo 2019 alle 22:58
    • Rispondi

    Grazie mille Mauro per la tua attenzione, proverò a studiarmi meglio il linguaggio di programmazione di arduino nell’intento di riuscire;
    Che tu sappia esistono programmatori o aziende che fanno software che potrebbero aiutarmi?

    1. Ciao Andrea,
      solitamente anche io li eseguo su commissione, in questo periodo ho poco tempo per accettarne di altri, tuttavia, lo dico anche a mio discapito, la parte interessante di Arduino è stimolare la voglia di conoscenza e di auto-apprendimento che ognuno di noi ha.
      Ci sono poche soddisfazioni, a mio avviso, che superano quella di aver realizzato un progetto tutto da solo e ti lasciano il mondo di conoscenze che hai acquisito per raggiungere il tuo fine.

    • Andrea il 16 Marzo 2019 alle 12:16
    • Rispondi

    Hai ragione, quando si riesce a realizzare e a raggiungere il fine voluto è una soddisfazione oltre a cosa si è imparato, ad oggi sono riuscito a fare il progettino ma con due arduino, ho trovato un progetto che ho usato come base ma che non funziona bene, non ho ancora capito per quale motivo non invia proprio gli ir, è questo:

    [[ codice rimosso da regolamento ]]

    In pratica non esegue irsend.sendRaw(S_pwr,68,38); ma esegue Serial.println(“ON”); allora ho poi sostituito irsend.sendRaw(S_pwr,68,38); con digitalWrite(4, HIGH); ad esempio, poi con il secondo arduino ho configurato 5 ingressi e per ogni ingresso abbinato un segnale di uscita; cosi funziona ma sto continuando a cercare il perchè il programma qui sopra non funziona nell’intento di usare un solo arduino, ho visto che se inserisco un delay sotto a Serial.println(“ON”); manda un segnale solo nel momento che tolgo il dito dal tasto telecomando; tu hai qualche idea?

    Andrea

    1. Ciao Andrea,
      in primo luogo ti chiedo di rispettare il regolamento del blog, trovi il link prima della sezione commenti.
      In merito a quello che scrivi sulla soddisfazione, mi fa piacere leggerlo.
      Se hai preso un esempio già scritto da un autore e presenta delle anomalie puoi provare a chiedere all’autore stesso di chiarirtele.

    • Andrea il 19 Marzo 2019 alle 21:42
    • Rispondi

    Ciao Mauro,
    chiedo scusa, ammetto di aver letto solo ora il regolamento, grazie comunque, magari provo a contattare l’autore.

    1. Ottimo Andrea.

    • Argie il 8 Gennaio 2021 alle 19:57
    • Rispondi

    Ciao Mauro! E’ possibile mettere sulla stessa scheda Arduino un trasmettitore e un ricevitore?
    Avrei bisogno che Arduino elabori sia i ricevuti che quelli trasmessi nello stesso momento per poter fare una cosa specifica.

    1. Ciao Argie,
      si è possibile, abbi solo l’accortezza di isolarli in modo che non si influenzino a vicenda 😀

    • SImone il 5 Marzo 2023 alle 18:47
    • Rispondi

    Ciao Mauro.
    sto provando il tuo sketch su arduino 33 iot.
    Ho messo il segnale di + del sensore ir sul D3 e quello di – sul gnd. Carico lo sketch e guardo il led ir con la fotocamera per vedere se emette luce ma niente.

    ho provato anche ad usare anche il 2n2222 ma nulla.. cosa può essere ?

    1. Ciao Simone,
      hai provato ad alimentare il led con i 5v per vedere se con la fotocamera vedi la luce ?
      In seconda battuta potresti verificare con un ricevitore, come descritto nell’articolo, in quanto la velocità di accensione/spegnimento ( frequenza di accensione ) del led potrebbe essere così rapido da non essere catturato dalla fotocamera.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.