riservata:ir
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedenteProssima revisioneEntrambe le parti successive la revisione | ||
riservata:ir [2018/09/14 17:12] – [Esempio con decodifica segnale IR] admin | riservata:ir [2018/09/15 13:19] – admin | ||
---|---|---|---|
Linea 15: | Linea 15: | ||
==== Trasmettitore ==== | ==== Trasmettitore ==== | ||
- | ===== Esempio | + | Un LED a infrarosso della lunghezza d'onda giusta (compatibile col ricevitore) da pilotare a 38kHz con un microcontrollore. |
+ | |||
+ | ===== 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 | ||
+ | |||
+ | ===== 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 | ||
+ | |||
+ | Esiste una libreria molto facile da utilizzare fatta da Ken Shirrif. Il programma seguente invece non usa librerie ed è sufficientemente facile da capire. Prerequisiti: | ||
+ | * tipi di dati | ||
+ | * bitwise math (shift, AND) | ||
+ | * array | ||
+ | * registri microcontrollori | ||
<code C> | <code C> | ||
Linea 145: | Linea 165: | ||
</ | </ | ||
+ | |||
+ | ===== 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, | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | Serial.println(" | ||
+ | // 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, | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(IRED, | ||
+ | delayMicroseconds(10); | ||
+ | usecs -= 26; | ||
+ | } | ||
+ | |||
+ | // riattiva gli interrupt | ||
+ | interrupts(); | ||
+ | } | ||
+ | |||
+ | // sequenza IR per scatto remoto Nikon D50 | ||
+ | void SendNikonCode() { | ||
+ | // comando scatto | ||
+ | pulseIR(2000); | ||
+ | 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); | ||
+ | } | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Riferimenti ===== | ||
+ | |||
+ | * protocollo NEC (usato anche dalla mia smart TV LG) https:// | ||
+ | * tutorial e programma senza librerie (adattato sopra) https:// | ||
+ | * tutorial con molti riferimenti utili https:// | ||
+ | * autore della libreria IR http:// | ||
+ | * generalità sulla trasmissione IR https:// | ||
+ | * datasheet https:// | ||
+ | * circuito di un ricevitore vishay https:// | ||
+ |
riservata/ir.txt · Ultima modifica: 2020/07/03 15:58 da 127.0.0.1