Strumenti Utente

Strumenti Sito


riservata:ir

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
riservata:ir [2018/09/14 17:21] – [Trasmettitore] adminriservata:ir [2020/07/03 15:58] (versione attuale) – modifica esterna 127.0.0.1
Linea 1: Linea 1:
 ====== Comunicazione a infrarosso ====== ====== Comunicazione a infrarosso ======
 +
 +Esperimenti di comunicazione a infrarosso con Arduino usando  un ricevitore IR integrato e un IRED:
 +  * decodifica dei segnali di un telecomando
 +  * telecomando per scatto remoto di una macchina fotografica digitale
 +  * telecomando di una TV
  
 ===== Hardware ===== ===== Hardware =====
Linea 16: Linea 21:
  
 Un LED a infrarosso della lunghezza d'onda giusta (compatibile col ricevitore) da pilotare a 38kHz con un microcontrollore. Un LED a infrarosso della lunghezza d'onda giusta (compatibile col ricevitore) da pilotare a 38kHz con un microcontrollore.
-===== Esempio con decodifica segnale IR =====+ 
 +===== Idee per progetti ===== 
 + 
 +  * video/foto di un telecomando mentre va (si vede col sensore di una camera digitale) 
 +  * reverse engineering di un protocollo IR 
 +  * copiare i dati di un telecomando (usare la libreria) per fare un telecomando con arduino e IRED 
 + 
 +===== Osservazioni ===== 
 + 
 +  * perché 38kHz? non confonde il segnale con altro  
 +  * non si riesce a vedere il segnale modulato, il ricevitore dà in uscita un segnale già demodulato 
 + 
 +===== Decodifica segnale IR con Arduino =====
  
 Esiste una libreria molto facile da utilizzare fatta da Ken Shirrif. Il programma seguente invece non usa librerie ed è sufficientemente facile da capire. Prerequisiti: Esiste una libreria molto facile da utilizzare fatta da Ken Shirrif. Il programma seguente invece non usa librerie ed è sufficientemente facile da capire. Prerequisiti:
Linea 153: Linea 170:
  
 </code> </code>
 +
 +===== Telecomando IR con Arduino =====
 +
 +Programma adattato da adafruit per pilotare lo scatto remoto della mia Nikon D50 (funziona). Il codice IR è stato ottenuto con un telecomando Nikon e qualcosa tipo il programma sopra. Non usa i registri quindi è sicuramente migliorabile lato prestazioni.
 +
 +<code C>
 +
 +// Intervallometro IR per la Nikon D50 (da adafruit)
 +
 +// IRED sul pin 13 con resistore da 1k
 +byte IRED = 13;
 +// intervallo in secondi tra gli scatti
 +byte intervallo = 5;
 +
 +void setup() {                
 +  pinMode(IRED, OUTPUT);      
 +  Serial.begin(9600);
 +}
 +
 +void loop() {
 +  Serial.println("Invio sequenza IR");
 +  // invia comando scatto
 +  SendNikonCode();
 +  // intervallo
 +  delay(intervallo * 1000);
 +}
 +
 +// genera un segnale a 38kHz per tot microsecondi
 +void pulseIR(long usecs) {
 +
 +  // disattiva gli interrupt
 +  noInterrupts();
 +
 +  while (usecs > 0) {
 +    // 38 kHz corrisponde circa a 26 us (3+10+3+10)
 +    // digitalWrite impiega 3 us (usare i registri?
 +    digitalWrite(IRED, HIGH);
 +    delayMicroseconds(10);
 +    digitalWrite(IRED, LOW);
 +    delayMicroseconds(10);
 +    usecs -= 26;
 +  }
 +
 +  // riattiva gli interrupt
 +  interrupts();
 +}
 +
 +// sequenza IR per scatto remoto Nikon D50
 +void SendNikonCode() {
 +  // comando scatto
 +  pulseIR(2000);  // 2080 codice adafruit non va!
 +  delay(27);
 +  pulseIR(440);
 +  delayMicroseconds(1500);
 +  pulseIR(460);
 +  delayMicroseconds(3440);
 +  pulseIR(480);
 +
 +  // pausa
 +  delay(65);
 +
 +  // ripetizione comando scatto
 +  pulseIR(2000);
 +  delay(27);
 +  pulseIR(440);
 +  delayMicroseconds(1500);
 +  pulseIR(460);
 +  delayMicroseconds(3440);
 +  pulseIR(480);
 +}
 +
 +
 +</code>
 +
 +===== Telecomando ON/OFF TV LG =====
 +
 +La sequenza corretta è stata ottenuta confrontando il protocollo utilizzato dalla TV LG (il protocollo NEC) con la sequenza ottenuta col programma che decodifica i segnali IR (vedi sopra). E' possibile accendere e spegnere la TV con Arduino, un IRED (di lunghezza d'onda compatibile) e resistore. Testato su smart TV LG 43LF590V.
 +
 +<code C>
 +
 +// TODO riscriverlo con array (o byte per la sequenza)
 +
 +// on/off smart tv LG
 +// invia il comando e lo ripete dopo 2 minuti
 +// reset per rilanciarlo
 +
 +// IRED sul pin 13 con resistore da 1k
 +byte IRED = 13;
 +
 +void setup() {                
 +  pinMode(IRED, OUTPUT);      
 +  Serial.begin(9600);
 +}
 +
 +void loop() {
 +  Serial.println("Invio sequenza IR tra un secondo");
 +  delay(1000);
 +  // invia comando on/off
 +  SendCode();
 +  // intervallo
 +  delay(120000);
 +}
 +
 +// genera un segnale a 38kHz per tot microsecondi
 +void pulseIR(long usecs) {
 +  // disattiva gli interrupt
 +  noInterrupts();
 +  while (usecs > 0) {
 +    // 38 kHz corrisponde circa a 26 us (3+10+3+10)
 +    // digitalWrite impiega 3 us (usare i registri?
 +    digitalWrite(IRED, HIGH);
 +    delayMicroseconds(10);
 +    digitalWrite(IRED, LOW);
 +    delayMicroseconds(10);
 +    usecs -= 26;
 +  }
 +  // riattiva gli interrupt
 +  interrupts();
 +}
 +
 +// sequenza IR per pulsante on/off LG
 +// il protocollo e il NEC
 +// 562 + 562 codifica il valore logico 0
 +// 562 + 1687 codifica il valore logico 1
 +// ottenuto con arduino e un ricevitore IR è questo
 +//mark (L) space (H)
 +//IR ON IR OFF
 +//8880 4420      9ms + 4ms per inizio trasmissione
 +//560 540       8 bit per l'indirizzo 
 +//560 540       
 +//560 1660      indirizzo 00100000
 +//540 540
 +//560 540
 +//540 540
 +//560 540
 +//560 540
 +//560 1660      ancora l'indirizzo ma complementato
 +//540 1660
 +//540 540       complementato 11011111
 +//560 1680
 +//520 1680
 +//520 1680
 +//520 1680
 +//520 1680
 +//520 540       8 bit del comando
 +//560 540
 +//560 540       comando 00010000
 +//560 1680
 +//520 540
 +//560 540
 +//560 540
 +//560 540
 +//560 1660      ancora il comando ma complementato
 +//540 1660
 +//540 1660      11101111
 +//540 540
 +//540 1680
 +//540 1660
 +//540 1660
 +//540 1660
 +//540                     fine trasmissione
 +
 +void SendCode() {
 +  // inizio trasmissione
 +  pulseIR(9000);
 +  delayMicroseconds(4000);
 +  // indirizzo 00100000
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(1687);  
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560); 
 +  // indirizzo complementato 11011111
 +  pulseIR(560);
 +  delayMicroseconds(1687); 
 +  pulseIR(560);
 +  delayMicroseconds(1687);
 +  pulseIR(560);
 +  delayMicroseconds(560); 
 +  pulseIR(560);
 +  delayMicroseconds(1687); 
 +  pulseIR(560);
 +  delayMicroseconds(1687); 
 +  pulseIR(560);
 +  delayMicroseconds(1687);
 +  pulseIR(560);
 +  delayMicroseconds(1687);   
 +  pulseIR(560);
 +  delayMicroseconds(1687);   
 +  // comando 00010000
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(1687);  
 +  pulseIR(560);
 +  delayMicroseconds(560);
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);  
 +  pulseIR(560);
 +  delayMicroseconds(560);
 +  // comando complementato 11101111 
 +  pulseIR(560);
 +  delayMicroseconds(1687); 
 +  pulseIR(560);
 +  delayMicroseconds(1687);
 +  pulseIR(560);
 +  delayMicroseconds(1687); 
 +  pulseIR(560);
 +  delayMicroseconds(560); 
 +  pulseIR(560);
 +  delayMicroseconds(1687); 
 +  pulseIR(560);
 +  delayMicroseconds(1687);
 +  pulseIR(560);
 +  delayMicroseconds(1687);   
 +  pulseIR(560);
 +  delayMicroseconds(1687);    
 +  // fine trasmissione
 +  pulseIR(560);
 +  delayMicroseconds(4000); 
 +}
 +
 +</code>
 +
 +
  
 ===== Riferimenti ===== ===== Riferimenti =====
Linea 161: Linea 420:
   * autore della libreria IR http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html   * autore della libreria IR http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html
   * generalità sulla trasmissione IR https://www.sbprojects.net/knowledge/ir/index.php   * generalità sulla trasmissione IR https://www.sbprojects.net/knowledge/ir/index.php
-  * datasheet +  * datasheet https://www.vishay.com/docs/82667/tsdp341.pdf 
 +  * circuito di un ricevitore vishay https://www.vishay.com/docs/80069/circuit.pdf
  
riservata/ir.1536945711.txt.gz · Ultima modifica: 2020/07/03 15:59 (modifica esterna)