«

»

Diciembre 02

Imprimir esta Mensaje

Tutorial: Arduino como un transmisor o el control remoto IR

In questi giorni ho ripreso un vecchio post del blog: Tutorial Arduino - IR estafa 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 Sketchinvia 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:

#incluir <IRremote.h>

IRsend irsend;

void setup() { }

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

Analizamos la línea de boceto de línea:

línea 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;

línea 03: inicializa el objeto irsend come istanza della classe IRsend, che ti consentirà di inviare i codici IR;

línea 05: Definir la función configuración() 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;

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

línea 08: definisci un ciclo di 3 paso (0,1 y 2) in cui per ciascuno step invii il codice definito sotto;

línea 09: invia il codice a90 in standard Sony, per farlo utilizza il metodo sendSony( datos, 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;

línea 10: establece un tiempo de espera de 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 sketchricevi segnali IR

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

#incluir <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

resultados decode_results;

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

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

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

línea 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);

línea 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;

línea 07: definir una variable resultados in cui saranno inseriti i risultati della decondifica eseguiti dalla IRremote;

línea 09: Definir la función configuración() 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;

línea 12: con el método enableIRIn() abilita la comunicazione seriale, da questo momento tutti i segnali percepiti dal ricevitore IR saranno decodificati da Arduino;

línea 15: Definir la función bucle();

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

línea 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);

línea 18: utilizando el método 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 milisegundos.

Divertirse

Importante!


Por favor NO pegue boceto en los comentarios, Utilice el cuadro de información del blog que usted puede encontrar en la página de contacto.

Advertencia!


El boceto se distribuye de forma gratuita y sin ninguna responsabilidad.
La lectura de este artículo y decidió utilizar el boceto trajo usted asume toda la responsabilidad.

Importante!


Usted ha sido útil este artículo??
Apoyo a mí haciendo clic en patrocinadores, Voy a ser capaz de seguir adquiriendo material para escribir artículos y ayudarle en sus proyectos.

Con un solo clic de un día.

Be Sociable, Compartir!

Enlace permanente a este artículo: http://www.mauroalfieri.it/elettronica/tutorial-arduino-come-trasmettitore-ir-o-come-telecomando.html

67 comentarios

Ir al formulario de comentarios

  1. fabrizio

    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?
    Gracias
    Fabrizio Bianchi

    1. Mauro Alfieri

      Hola 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

  2. andrea

    Hola 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. Mauro Alfieri

      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

  3. Carmelo

    Hola 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:

    #incluir

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);
    IRsend irsend;

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

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

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

    para (int i = 0; i < 3; i ) {
    irsend.sendRaw(uno,4,38);
    retraso(200);
    }
    }

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

    Al posto del led ir ne ho inserito uno normale e lampeggia, con il led ir però non viene inviato nessun segnale. ¿Cuál podría ser el problema?

    1. Mauro Alfieri

      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

  4. Carmelo

    al posto di uno dovrebbe esserci scritto buffer:

    irsend.sendRaw(búfer,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. Mauro Alfieri

      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

  5. stefano

    Buena noches

    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

    Gracias

    1. Mauro Alfieri

      Hola 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

  6. Marino

    Hola ;)
    volevo chiederti una cosa che non ho capito :
    tu dici chela libreria IR prevede alcune codifiche standard: (Sony, Nec, RC5, RC6) e dei metodi di codifica/decodifica di tipo rawma 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 :D

    1. Mauro Alfieri

      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

  7. david

    Hola! :) Mientras tanto, felicidades por el 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?
    Gracias de antemano!

    1. Mauro Alfieri

      Hola David,
      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

  8. Domenico

    Hola 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………….?

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

    1. Mauro Alfieri

      Hola 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

  9. Domenico

    E’ possibile, o troppo difficile, usando per TX Arduino, farsi una propria codifica personale di nbit e quindi di
    conseguenza una decodifica complementare sullArduino 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. Mauro Alfieri

      Hola 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

  10. alessio

    hola 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:

    #incluir

    IRsend irsend;

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

    void loop() {
    si (Serial.read() != -1) {
    para (int i = 0; i < 3; i ) {
    irsend.sendSony(0xa90, 12); // Sony TV power code
    retraso(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' no se designase un tipo
    IRsendDemo.ino: In function 'void loop()':
    IRsendDemo:21: error: 'irsend' no se declaró en este ámbito

    Ti ringrazio per l'aiuto
    Alessio

    1. Mauro Alfieri

      Hola Alessio,
      la libreria mi sembra sia stata scritta per l’IDE 0022 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

  11. alessio

    hola 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! Gracias!

    1. Mauro Alfieri

      Hola 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

  12. alessio

    hola 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??? Le doy las gracias de antemano
    alessio

    1. Mauro Alfieri

      Hola 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

      1. alessio

        hola 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 pregunta.
        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. Mauro Alfieri

          Hola 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

  13. alessio

    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 metros?

    1. Mauro Alfieri

      Hola 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

  14. alessio

    Hola 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. Mauro Alfieri

      Hola 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

  15. Alex

    Hola 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. Mauro Alfieri

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

      Mauro

  16. Gianni

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

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

    1. Mauro Alfieri

      Hola 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

      1. Gianni

        ¡Gracias por haber respondido… 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. Mauro Alfieri

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

          Mauro

      2. Gianni

        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… (Yo creo… non vorrei dire una cavolata)
        poi quello di arduino quando manda il segnale sta mezzo secondo mentre il telecomando uno.. e il led si spegneconsigli??

        1. Mauro Alfieri

          Hola 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

          1. Gianni

            Ciao grazie per avermi rispostoil problema seguente è questolo sketch dovrebbe essere ok, prendendo una fotocamera riesco a vedere che il led ir trasmettel’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 farel’unico dubbio è il seguente:

            Quando provo ad accendere il condizionatore con il telecomando, il led rimane fisso per un secondomentre quando provo con arduino rimane fisso per mezzo secondonon so se dipende da quellosapresti dirmi qualche cosa a riguardo?

          2. Mauro Alfieri

            Hola 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

  17. Gianni

    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’ultimoma tutti i numeri in serie sono diversiho fatto sempre.. ONOFF.. ON OFF..
    soluciones?

  18. Gianni

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

    soluciones?

    1. Mauro Alfieri

      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

  19. Gianni

    Beh ho provato ad accendere una tv samsung sia in rawcode che sendSamsung() y funciona, ma il condizionatore non ne vuole saperenon so se sbaglio la frequenzatrasmetto a 38Khzhai qualche consiglio da darmi?

    1. Mauro Alfieri

      Hola 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

      1. Gianni

        ciao anch’io presuppongo che la codifica sia sbagliataa quanto potrebbe essere?
        Lo intenté 12 poi dai 34 un 40

        1. Mauro Alfieri

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

          Mauro

          1. Gianni

            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

          2. Mauro Alfieri

            Hola Gianni,
            purtroppo non ho una guida da suggerirti.

            Mauro

  20. alessio

    Hola 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). ¿Cómo puedo hacer? 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 ”hola” 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. Mauro Alfieri

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

      Mauro

      1. alessio

        hola 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! y presto
        alessio

        1. Mauro Alfieri

          Hola 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

  21. Nicola

    Hola 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 pressioneusualedi 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). ¿Me puede dar un consejo?

    1. Mauro Alfieri

      Hola Nicola,
      come avrai letto o sperimentato i segnali IR sono deitreni d’ondaossia 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

  22. marco

    felicitaciones por el artículo, sono un ragazzo alle prime armi con arduino e non capisco perchè nel primo sketch mi generi questi errori:
    sketch_mar12a:5: error: 'IRrecv’ no se designase un tipo
    sketch_mar12a:7: error: ‘decode_results’ no se designase un tipo
    sketch_mar12a.ino: En la función 'setup vacío()':
    sketch_mar12a:12: error: ‘irrecv’ no se declaró en este ámbito
    sketch_mar12a.ino: En la función 'bucle vacío()':
    sketch_mar12a:16: error: ‘irrecv’ no se declaró en este ámbito
    sketch_mar12a:16: error: ‘results’ no se declaró en este ámbito
    probabilmente sono errori banali, ma non riesco a trovare la soluzione.
    Gracias

    1. Mauro Alfieri

      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.

  23. guy

    Hola Mauro,
    Quería preguntarte algo,
    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. Mauro Alfieri

      Ciao Guy, non ho capito la richiesta.

  24. Yaxit

    Hola, 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… Ahora, 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.
    Hola y gracias 1000!

    1. Mauro Alfieri

      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.

      1. Yaxit

        Effettivamente il problema era causato dalla resistenza. Confermo che non va messa e funziona benisismo sul 5V!
        Nos vemos más tarde!

        1. Mauro Alfieri

          Grazie Yaxit per la conferma.

  25. Mateo

    Hola! 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? Gracias de antemano!

    1. Mauro Alfieri

      Hola 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.

  26. AntonioG

    Buenas noches Mauro, gran guía, 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à?
    Gracias, attendo tue risposte.

    1. Mauro Alfieri

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

Deja un comentario

Su dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes utilizar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>