Sommario:
- Passaggio 1: breve panoramica del circuito
- Passaggio 2: breve panoramica del software
- Passaggio 3: contenuto del pacchetto I2C
- Passaggio 4: acquisizione dei codici di controllo remoto (ui32Data)
- Passaggio 5: come testare il dispositivo slave I2C
- Passaggio 6: restringere il tuo design
- Passaggio 7: conclusione
- Passaggio 8: riferimenti utilizzati
Video: Telecomando a infrarossi I2C con Arduino: 8 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Preambolo Questo Instructable spiega come creare un telecomando universale utilizzando I2C per l'interfaccia.
Che strano dici, usando un dispositivo slave I2C?
Sì, un dispositivo slave I2C.
Questo perché la tempistica accurata dei pacchetti IR è piuttosto impegnativa e un tipico Arduino avrà difficoltà se sta già svolgendo molte altre attività contemporaneamente. È meglio distribuire il carico di elaborazione assegnando attività ad alta intensità di temporizzazione a processori dedicati quando possibile (meglio ancora farlo in hardware). Dato che I2C è un metodo di comunicazione ben documentato e robusto tra i circuiti integrati, ho scelto questo come interfaccia.
introduzione
Come accennato in precedenza, questa istruzione descrive come controllare elettrodomestici come TV, lettore DVD e satellite ecc. Utilizzando la libreria IRremote su Arduino.
Si conclude con un esempio di progettazione che trasforma l'Arduino in un modulo di controllo remoto slave I2C (foto 1 sopra) con un circuito di prova prototipo (foto 2 sopra) e passa a dettagliare come ridurre il progetto ai componenti minimi necessari in modo che possa essere incorporato in un altro disegno. Nel mio caso utilizzo questo dispositivo integrato in un dispositivo di controllo remoto universale IoT basato su un ESP8266-12E.
Di quali parti ho bisogno?
Per costruire il circuito illustrato nel passaggio 1 (trasmettitore IR) avrai bisogno delle seguenti parti;
- 2 resistenze da 10K
- 1 off 390R resistore
- 1 resistore 33R
- 1 off 3K8 resistore
- 1 LED rosso spento
- 1 led IR spento TSAL6400
- 1 fuori Transistor BC337
- 1 condensatore da 220uF
- 1 sconto su Arduino Uno
Per costruire il circuito illustrato al punto 4 (Ricevitore IR) avrai bisogno delle seguenti parti;
- 1 resistore da 10K
- 1 sconto TSOP38328
- 1 condensatore da 220uF
- 1 sconto su Arduino Uno
Per costruire il circuito raffigurato al punto 5 (Slave test circuit) avrai bisogno delle seguenti parti;
- 4 resistenze da 10K
- 2 off 390R resistore
- 1 off 33R resistore
- 1 off 3K8 resistore
- 2 LED rossi spenti
- 1 led IR spento TSAL6400
- 1 fuori Transistor BC337
- 1 condensatore da 220uF
- 2 pulsanti SPST off
- 2 su Arduino Unos
Per costruire il circuito illustrato nel passaggio 6 (Shrunk design) avrai bisogno delle seguenti parti;
- 3 resistenze da 10K
- 1 resistore da 270R
- 1 off 15R resistore
- 4 resistenze da 1K
- 1 LED rosso spento
- 1 led IR spento TSAL6400 o TSAL5300
- 1 off Transistor BC337
- 1 condensatore elettrolitico da 220uF a 6,3 v
- 1 condensatore elettrolitico da 1000uF a 6,3 v
- 2 condensatori da 0.1uF
- 2 condensatori da 22 pF
- 1 off 16MHz Xtal
- 1 pezzo ATMega328P-PU
Nota: sarà necessario anche un dispositivo FTDI per programmare ATMega328P
Di quali competenze ho bisogno?
- Una conoscenza minima dell'elettronica,
- Conoscenza di Arduino e del suo IDE,
- Un po 'di pazienza,
- Una certa comprensione di I2C sarebbe utile (vedi qui per alcuni dettagli generici di I2C/Wire Library).
Argomenti trattati
- Breve panoramica del circuito,
- Breve panoramica del software,
- Contenuto del pacchetto I2C,
- Acquisizione codici telecomando (ui32Data),
- Come testare il tuo dispositivo I2C Slave,
- Riducendo il tuo disegno,
- Conclusione,
- Riferimenti utilizzati.
Disclaimer
Come sempre, utilizzi queste istruzioni a tuo rischio e pericolo e non sono supportate.
Passaggio 1: breve panoramica del circuito
Lo scopo del circuito è trasmettere codici di telecomando IR. Il suo design è piuttosto diretto e abbastanza semplice.
Quando il transistor Q1 un BC337 NPN viene acceso tramite uno logico da Arduino PWM O/P D3 a Resistor R5, la corrente passa attraverso i LED 1 e 2. Limitata solo dai resistori di zavorra R3 e R4 rispettivamente. Q1 viene utilizzato per aumentare la corrente che passa attraverso il diodo IR (IF Max = 100mA) a quella superiore a quella che l'O/P di Arduino è in grado di fornire ~40mA @ +5v.
Il condensatore C1 a 220uF elettrolitico fornisce una certa stabilizzazione prevenendo una caduta della linea di alimentazione dalla potenza assorbita dai LED 1 e 2.
I resistori R1 e R2 sono pull up I2C.
Passaggio 2: breve panoramica del software
Preambolo
Per compilare correttamente questo codice sorgente avrai bisogno della seguente libreria aggiuntiva;
IRremote.h
- Di: z3t0
- Scopo: libreria remota a infrarossi per Arduino: inviare e ricevere segnali a infrarossi con più protocolli
- Da:
Panoramica del codice
Come mostrato nella figura 1 sopra, all'avvio il codice configura l'I/O del microcontrollore quindi interroga lo stato del flag software interno 'bFreshDataFlag'. Quando questo flag è impostato, il controller afferma che è la linea "Occupato" (inviando il pin di dati D4 basso) e si sposta nello stato "eBUSY" leggendo in sequenza i comandi della pressione del pulsante mantenuti in uDataArray e inviando i dati modulati IR al LED IR in un sequenza di trasmissione.
Una volta che i dati contenuti in uDataArray sono stati completamente inviati, lo stato 'eIDLE' viene ripristinato e la linea 'Occupato' viene deasserita (invio dati pin D4 alto). Il dispositivo è ora pronto per ricevere più pressioni dei pulsanti che segnano la fine della sequenza di trasmissione.
Ricezione dei dati di pressione del pulsante IR
Quando i dati vengono inviati al telecomando a infrarossi tramite I2C, viene attivato un interrupt e la chiamata alla funzione receiverEvent() viene avviata in modo asincrono.
Una volta attivato, i dati I2C ricevuti vengono scritti in sequenza nel buffer 'uDataArray'.
Durante la ricezione dei dati, se viene segnalata la fine della sequenza dal master (bFreshData!=0x00) viene impostato 'bFreshDataFlag', segnalando così l'inizio della sequenza di trasmissione.
Le figure 2…3 forniscono un esempio di una tipica sequenza di pacchetti.
Nota: il codice sorgente completo è disponibile qui
Passaggio 3: contenuto del pacchetto I2C
Il formato del pacchetto di controllo inviato allo slave su I2C è riportato sopra in figura 1 il significato di ciascun campo è riportato di seguito
Significato dei campi del pacchetto di controllo
byte bCodifica;
-
Codifica telecomando IR,
- RC6 (Cielo) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
La rappresentazione esadecimale del flusso di dati IR binario 4 Byte di dati (unsigned long), LSByte … MSByte
byte bNumberOfBitsInTheData;
Numero di Bit nei dati (Max di 32). Campo = 1 … 32
byte bPulseTrainRepeats;
Quante ripetizioni di questo treno di impulsi. Intervallo = 1 … 255. Tipicamente 2…4 ripetizioni. Potresti voler estendere questo per i comandi On/Off poiché il dispositivo ricevente a volte richiede alcune ripetizioni del treno di impulsi extra per ricevere un segnale di accensione
byte bDelayBetweenPulseTrainRepeats;
Ritardo tra le ripetizioni di questo treno di impulsi. Intervallo = 1 … 255 ms. Tipicamente 22 ms … 124 ms
byte bButtonRepeats;
Simula la pressione ripetuta dello stesso pulsante (ma non supporta il codice modificato come un telecomando Apple, ripete semplicemente il codice del pulsante). Intervallo = 1 … 256. Predefinito = 1
uint16_t ui16DelayBetweenButtonRepeats;
Ritardo tra le ripetizioni del pulsante (unsigned int). 2 byte in totale LSByte … MSByte. Intervallo = 1 … 65535 mS. Predefinito = 0mS
byte bFreshData;
-
Dati freschi. Un valore diverso da zero. Scritto per ultimo, attiva la sequenza IR TX. Gamma 0x00…0xFF
- Altri pacchetti di controllo in arrivo = 0
- Questo è il pacchetto di controllo finale = Valore diverso da zero 1, 2, … 255
Notare l'uso della direttiva del compilatore '_packed_'. Questo per garantire che i dati siano pacchetti byte per byte in memoria indipendentemente dal sistema di destinazione utilizzato (Uno, Due, ESP8266 ecc.). Ciò significa che l'unione tra registerAllocationType e dataArrayType necessita solo di un clock sequenziale in byte da un pacchetto di controllo, rendendo semplice il software TX/RX.
Passaggio 4: acquisizione dei codici di controllo remoto (ui32Data)
Ci sono tre modi per acquisire un rispettivo codice chiave del telecomando;
- Tramite il conteggio dei bit con un oscilloscopio,
- Cercalo su un sito web,
- Decodificalo direttamente dal flusso di dati nel software.
Tramite conteggio bit con un oscilloscopio
Questo non è un metodo efficiente in quanto richiede un po' di tempo e potenzialmente richiede più di un tentativo, tuttavia può essere molto accurato. È utile anche per validare visivamente i codici ottenuti con i metodi 2 e 3, anche per determinare eventuali peculiarità di un telecomando. Ad esempio quando si tiene premuto un pulsante su un telecomando Apple IR. Il telecomando inizialmente emetterà una sequenza di comandi, quindi seguirà quella con una sequenza compressa ripetuta di 0xF….
Cercalo su un sito web
Il database del codice di controllo remoto sul sito Web Linux Infrared Remote Control è una buona fonte.
Il rovescio della medaglia, tuttavia, è che potresti dover provare alcuni codici finché non ne trovi uno che funzioni per te. Potrebbe anche essere necessario interpretare alcune delle rappresentazioni dei codici per convertirli nella loro forma esadecimale equivalente.
Decodificalo direttamente dal flusso di dati
Utilizzando il circuito nella figura 1 sopra in combinazione con l'esempio della libreria IRremote 'IRrecvDumpV2.ino' è possibile decodificare il flusso di dati direttamente dal telecomando. L'immagine 2 mostra un telecomando TV Samsung decodificato per la pressione del pulsante di accensione/spegnimento nella finestra del terminale IDE di Arduino.
Ricevitore/trasmettitore combinato
Le figure 3 e 4 sopra mostrano una soluzione che consente sia la ricezione che la trasmissione del comando IR per consentire una facile prototipazione.
Per decodificare le pressioni dei pulsanti del telecomando IR sarà necessario eseguire il flashing di Arduino con l'esempio 'IRrecvDumpV2.ino' fornito con la libreria IRremote.
Funziona altrettanto bene anche per la trasmissione se i comandi IR. Un led rosso è incluso come indicazione visiva che il dispositivo è in azione.
Passaggio 5: come testare il dispositivo slave I2C
Usando il codice sorgente qui e il circuito descritto sopra nella figura 1, programma l'Arduino 'Master' con 'IR_Remote_Sim_Test.ino' e l'Arduino 'Slave' con 'IR_Remote_Sim.ino'.
Supponendo che tu abbia una TV Sony Bravia, un decoder Sky HD e una Sony BT SoundBar, premi il pulsante 1 e la tua TV passerà a BBC1 (canale 101). Premi il pulsante 2 e la soundbar si disattiverà. Premi di nuovo e si riattiverà.
Durante l'esecuzione della sequenza di trasmissione IR, il LED3 si illuminerà indicando che lo slave è occupato e il LED1 lampeggerà in linea con il processo di trasmissione IR.
Ovviamente se non hai lo stesso sistema di intrattenimento configurato come sopra, puoi riprogrammare lo slave con 'IRrecvDumpV2.ino', decodificare i tuoi comandi remoti di interesse, quindi programmarli in 'IR_Remote_Sim_Test.ino' per il tuo dato scenario.
La figura 2 mostra la panoramica del software di test a livello di sistema tra Master e Slave.
Passaggio 6: restringere il tuo design
Ok, quindi supponendo che tu abbia seguito questa istruzione fare affidamento su due Arduino per controllare i tuoi dispositivi domestici non è l'uso più efficiente del tuo stock Arduino. Di conseguenza, se si costruisce il circuito mostrato nell'immagine sopra e si seguono le istruzioni qui per programmare l'ATMega328P con 'IR_Remote_Sim.ino', sarà possibile ridurre l'intero sistema ai componenti minimi. Questo ti permetterà di incorporare il tuo design in qualche altro sistema.
Passaggio 7: conclusione
La soluzione è stabile e funziona bene, è stata incorporata in un altro sistema per parecchie settimane senza problemi.
Ho scelto Arduino Uno R3 perché volevo un dispositivo che avesse una RAM sufficiente in modo da poter avere un buffer dei pulsanti di ragionevole profondità. Ho optato per una dimensione del buffer di 20 pacchetti (MAX_SEQUENCES).
Anche lo shield Hybrid TX/RX che ho realizzato è stato molto utile durante la decodifica dei telecomandi Sony e Sky. Anche se devo confessare di aver usato di tanto in tanto il mio telescopio digitale per verificare che il comando IR decodificato dal software fosse lo stesso di quello proveniente dall'IR ricevuto (TSOP38328).
L'unica cosa che avrei fatto diversamente sarebbe stata quella di utilizzare il circuito di azionamento a corrente costante per il led IR come mostrato sopra nella foto 2.
Un ulteriore punto da notare è che non tutti i trasmettitori IR sono modulati con 38KHz, il TSOP38328 è ottimizzato per 38KHz.
Passaggio 8: riferimenti utilizzati
IRremote.h
- Di: z3t0
- Scopo: libreria remota a infrarossi per Arduino: inviare e ricevere segnali a infrarossi con più protocolli
- Da:
Libreria IR Remote
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Sensore ricevitore IR (infrarossi) - TSOP38238 (equivalente)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Per evitare il riempimento della struttura dati ai limiti delle parole
- https://github.com/esp8266/Arduino/issues/1825
- https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
- https://stackoverflow.com/questions/11770451/what-is-the-signing-of-attribute-packed-aligned4
Buona fonte di dettagli del telecomando IR
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Database telecomandi IR
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
Scheda tecnica BC337
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Scheda tecnica
https://www.vishay.com/docs/81857/1n4148.pdf
Consigliato:
Telecomando a infrarossi di Harry Potter con Raspberry Pi: 5 passaggi
Telecomando IR di Harry Potter con Raspberry Pi: questa istruzione descrive come creare un semplice script Python controllato dalla bacchetta del telecomando universale di Harry Potter realizzata da The Noble Collection. Richiede un Raspberry Pi come controller e un ricevitore IR USB Flirc in combinazione
Il telecomando della TV diventa un telecomando RF -- Tutorial NRF24L01+: 5 passaggi (con immagini)
Il telecomando della TV diventa un telecomando RF || Tutorial NRF24L01+: in questo progetto ti mostrerò come ho utilizzato il popolare IC RF nRF24L01+ per regolare la luminosità di una striscia LED in modalità wireless tramite tre inutili pulsanti di un telecomando TV. Iniziamo
Termometro a infrarossi senza contatto basato su Arduino - Termometro a infrarossi con Arduino: 4 passaggi
Termometro a infrarossi senza contatto basato su Arduino | Termometro a infrarossi con Arduino: Ciao ragazzi in questo tutorial faremo un termometro senza contatto usando arduino. Poiché a volte la temperatura del liquido/solido è troppo alta o troppo bassa e quindi è difficile entrare in contatto con esso e leggerlo temperatura poi in quella scena
Converti il tuo telecomando IR in telecomando RF: 9 passaggi (con immagini)
Converti il tuo telecomando IR in telecomando RF: in Instructable di oggi, ti mostrerò come puoi utilizzare un modulo RF generico senza un microcontrollore che alla fine ci porterà a costruire un progetto in cui puoi convertire un telecomando IR di qualsiasi dispositivo in un RF A distanza. Il vantaggio principale di convertire un
Telecomando a infrarossi e ricevitore IR (TSOP1738) con Arduino: 10 passaggi
Telecomando a infrarossi e ricevitore IR (TSOP1738) con Arduino: questo istruibile è per i principianti Arduino. Questo è uno dei miei precedenti progetti con Arduino. Mi sono divertito molto quando l'ho fatto e spero che piacerà anche a voi. La caratteristica più interessante di questo progetto è il “Controllo wireless”. E questo è