Obsah:
- Krok 1: Stručný prehľad obvodu
- Krok 2: Stručný prehľad softvéru
- Krok 3: Obsah paketu I2C
- Krok 4: Získanie kódov diaľkového ovládania (ui32Data)
- Krok 5: Ako otestovať svoje podradené zariadenie I2C
- Krok 6: Zúženie vášho návrhu
- Krok 7: Záver
- Krok 8: Použité referencie
Video: I2C infračervené diaľkové ovládanie s Arduino: 8 krokov (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
Tento návod obsahuje podrobnosti o tom, ako vytvoriť univerzálny diaľkový ovládač pomocou rozhrania I2C.
Ako zvláštne to hovoríte, keď používate podradené zariadenie I2C?
Áno, podradené zariadenie I2C.
Dôvodom je, že presné načasovanie infračervených paketov je dosť náročné a typický Arduino s ním bude zápasiť, ak už vykonáva mnoho ďalších úloh súčasne. Je lepšie distribuovať výpočtovú záťaž priradením aktivít náročných na časovanie vyhradeným procesorom, kedykoľvek je to možné (ešte lepšie to urobte v hardvéri). Pretože I2C je dobre zdokumentovaná a robustná komunikačná metóda medzi integrovanými obvodmi, vybral som si to ako rozhranie.
Úvod
Ako je uvedené vyššie, tento návod popisuje, ako ovládať domáce spotrebiče, ako je televízor, DVD prehrávač a satelit, atď. Pomocou knižnice IRremote na Arduine.
Na konci je príklad dizajnu, ktorý premieňa Arduino na modul diaľkového ovládania I2C slave (obr. 1 vyššie) s prototypovým testovacím obvodom (obr. 2 vyššie) a pokračuje podrobne, ako zmenšiť váš návrh na nevyhnutné nevyhnutné komponenty, aby bolo možné vložené do iného dizajnu. V mojom prípade používam toto vstavané zariadenie v univerzálnom zariadení na diaľkové ovládanie IoT založenom na ESP8266-12E.
Aké diely potrebujem?
Na zostavenie obvodu zobrazeného v kroku 1 (IR vysielač) budete potrebovať nasledujúce časti;
- 2 off 10K odpory
- 1 vypnutý odpor 390R
- 1 vypnutý odpor 33R
- 1 vypnutý rezistor 3K8
- 1 vypnutá červená LED dióda
- 1 vypnutá IR LED TSAL6400
- 1 vypnutý tranzistor BC337
- 1 vypnutý kondenzátor 220uF
- 1 zľava na Arduino Uno
Na zostavenie obvodu zobrazeného v kroku 4 (IR prijímač) budete potrebovať nasledujúce diely;
- 1 off 10K odpor
- 1 zľava na TSOP38328
- 1 vypnutý kondenzátor 220uF
- 1 zľava na Arduino Uno
Na zostavenie obvodu zobrazeného v kroku 5 (testovací obvod slave) budete potrebovať nasledujúce časti;
- 4 off 10K odpory
- 2 vypnutý odpor 390R
- 1 vypnutý odpor 33R
- 1 vypnutý rezistor 3K8
- 2 nesvieti červená LED
- 1 vypnutá IR LED TSAL6400
- 1 vypnutý tranzistor BC337
- 1 vypnutý kondenzátor 220uF
- 2 vypnuté tlačidlá SPST
- 2 z ceny Arduino Unos
Na zostavenie obvodu zobrazeného v kroku 6 (zmenšený dizajn) budete potrebovať nasledujúce časti;
- 3 off 10K odpory
- 1 vypnutý odpor 270R
- 1 vypnutý odpor 15R
- 4 off 1K odpory
- 1 vypnutá červená LED dióda
- 1 vypnutá IR Led TSAL6400 alebo TSAL5300
- 1 vypnutý tranzistor BC337
- 1 vypnutý elektrolytický kondenzátor 220uF pri 6,3 V
- 1 vypnutý elektrolytický kondenzátor 1000uF pri 6,3 V
- 2 vypnuté kondenzátory 0,1 uF
- 2 vypnuté kondenzátory 22 pF
- 1 off 16 MHz Xtal
- 1 zľava na ATMega328P-PU
Poznámka: Na programovanie ATMega328P budete tiež potrebovať zariadenie FTDI
Aké zručnosti potrebujem?
- Minimálne znalosti elektroniky,
- Znalosť Arduina a jeho IDE,
- Trochu trpezlivosti,
- Užitočné by bolo určité porozumenie I2C (tu nájdete niektoré generické podrobnosti o knižnici I2C/Wire).
Témy pokryté
- Krátky prehľad okruhu,
- Krátky prehľad softvéru,
- Obsah paketu I2C,
- Získavanie kódov diaľkového ovládača (ui32Data),
- Ako otestovať zariadenie I2C Slave,
- Zmenšovanie vášho dizajnu,
- Záver,
- Použité referencie.
Vylúčenie zodpovednosti
Ako vždy, tieto pokyny používate na vlastné riziko a nie sú podporované.
Krok 1: Stručný prehľad obvodu
Účelom obvodu je prenos kódov IR diaľkového ovládania. Jeho dizajn je celkom priamy a celkom jednoduchý.
Keď je tranzistor Q1 a BC337 NPN zapnutý logickým zapojením z Arduino PWM O/P D3 na odpor R5, prúd prechádza LEDkami 1 a 2. Obmedzené iba predradnými odpormi R3 a R4. Q1 sa používa na zvýšenie prúdu prechádzajúceho infračervenou diódou (IF Max = 100 mA) na hodnotu presahujúcu to, čo je schopné napájať Arduino O/P ~ 40mA @ +5v.
Kondenzátor C1 a 220uF elektrolytický zaisťuje určitú stabilizáciu, ktorá zabraňuje poklesu napájacej koľajnice o výkon odoberaný LEDkami 1 a 2.
Rezistory R1 a R2 sú výsuvy I2C.
Krok 2: Stručný prehľad softvéru
Preambula
Na úspešné zostavenie tohto zdrojového kódu budete potrebovať nasledujúcu knižnicu;
IRremote.h
- Autor: z3t0
- Účel: Infračervená vzdialená knižnica pre Arduino: odosielanie a prijímanie infračervených signálov pomocou viacerých protokolov
- Od:
Prehľad kódu
Ako je znázornené na obrázku 1 vyššie, kód pri štarte konfiguruje I/O mikroovládača a potom zisťuje stav príznaku interného softvéru „bFreshDataFlag“. Keď je tento príznak nastavený, regulátor potvrdí, že je to „zaneprázdnený“riadok (odosielanie dátového pinu D4 je nízky) a prejde do stavu „eBUSY“. Postupne načítajte tlačidlo stlačením príkazov uložených v uDataArray a odoslaním infračervených modulovaných údajov do IR LED v prenosová sekvencia.
Akonáhle sú údaje uložené v uDataArray úplne odoslané, stav 'eIDLE' sa obnoví a riadok 'Zaneprázdnený' sa zruší (odosielanie dátového kolíka D4 je vysoké). Zariadenie je teraz pripravené prijímať ďalšie stlačenia tlačidiel označujúce koniec prenosovej sekvencie.
Príjem údajov o stlačení infračerveného tlačidla
Keď sa údaje odošlú do diaľkového ovládača InfraRed cez I2C, spustí sa prerušenie a volanie funkcie receiveEvent () sa spustí asynchrónne.
Po spustení sa prijaté I2C údaje zapíšu postupne do vyrovnávacej pamäte „uDataArray “.
Ak počas príjmu dát master signalizuje koniec sekvencie (bFreshData! = 0x00), nastaví sa „bFreshDataFlag“, čím sa signalizuje začiatok prenosovej sekvencie.
Obrázky 2… 3 uvádzajú príklad typickej sekvencie paketov.
Poznámka: Úplný zdrojový kód je k dispozícii tu
Krok 3: Obsah paketu I2C
Formát riadiaceho paketu odoslaného do zariadenia slave cez I2C je uvedený vyššie na obrázku 1, význam každého poľa je uvedený nižšie.
Význam polí riadiacich paketov
bajtové kódovanie bajtov;
-
Kódovanie diaľkového ovládača IR,
- RC6 (obloha) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Šestnástková reprezentácia binárneho dátového toku IR 4 dátové bajty (dlhé bez znamienka), LSByte… MSByte
bajt bNumberOfBitsInTheData;
Počet bitov v údajoch (max. 32). Rozsah = 1… 32
bajt bPulseTrainRepeats;
Koľko opakovaní tohto sledu impulzov. Rozsah = 1… 255. Obvykle 2… 4 opakovania. Možno to budete chcieť rozšíriť na príkazy Zap/Vyp, pretože prijímacie zariadenie niekedy vyžaduje na prijatie signálu o zapnutí niekoľko ďalších opakovaní sledu impulzov
bajt bDelayBetweenPulseTrainRepeats;
Oneskorenie medzi opakovaniami tejto série impulzov. Rozsah = 1… 255 mS. Obvykle 22 mS… 124 mS
bajt bButtonRepeats;
Simuluje opakované stlačenie rovnakého tlačidla (ale nepodporuje upravený kód ako diaľkové ovládanie Apple, iba opakuje kód tlačidla). Rozsah = 1… 256. Predvolené = 1
uint16_t ui16DelayBetweenButtonRepeats;
Oneskorenie medzi opakovaniami tlačidiel (nepodpísané int). 2 bajty celkom LSByte… MSByte. Dosah = 1… 65535 mS. Predvolené = 0 mS
bajt bFreshData;
-
Čerstvé údaje. Nenulová hodnota. Napísané ako posledné, spustí sekvenciu IR TX. Rozsah 0x00… 0xFF
- Príde viac riadiacich paketov = 0
- Toto je konečný kontrolný paket = nenulová hodnota 1, 2,… 255
Všimnite si použitia direktívy kompilátora '_packed_'. Toto má zaistiť, že údaje budú paketové bajty po bajtoch v pamäti bez ohľadu na použitý cieľový systém (Uno, Due, ESP8266 atď.). To znamená, že spojenie medzi registerAllocationType a dataArrayType potrebuje iba postupné hodiny/hodiny v bajtoch z riadiaceho paketu, čo zjednodušuje softvér TX/RX.
Krok 4: Získanie kódov diaľkového ovládania (ui32Data)
Existujú tri spôsoby, ako môžete získať príslušný kód kľúča diaľkového ovládača;
- Počítanie bitov pomocou osciloskopu,
- Pozrite sa na webovú stránku,
- Dekódujte ho priamo z dátového toku v softvéri.
Prostredníctvom počítania bitov s rozsahom
Toto nie je efektívna metóda, pretože trvá nejaký čas a potenciálne vyžaduje viac ako jeden pokus, ale môže byť veľmi presná. Je tiež užitočný pri vizuálnom overovaní kódov získaných pomocou metód 2 a 3, tiež pri určovaní akýchkoľvek zvláštností diaľkového ovládača. Napríklad pri podržaní tlačidla na diaľkovom ovládači Apple IR. Diaľkový ovládač najskôr vydá sekvenciu príkazov, potom nasleduje s opakovanou komprimovanou sekvenciou 0xF ….
Pozrite sa na to na webovej stránke
Databáza kódov diaľkového ovládania na webovej stránke Linux Infrared Remote Control je dobrým zdrojom.
Temnejšou stránkou veci je, že budete musieť vyskúšať niekoľko kódov, kým nenájdete ten, ktorý vám bude vyhovovať. Možno budete musieť interpretovať aj niektoré znázornenia kódov, aby ste ich mohli previesť do ekvivalentnej hexadecimálnej podoby.
Dekódujte ho priamo z dátového toku
Použitím obvodu na obrázku 1 vyššie v spojení s príkladom knižnice IRremote 'IRrecvDumpV2.ino' je možné dekódovať dátový tok priamo z diaľkového ovládača. Obrázok 2 zobrazuje dekódované diaľkové ovládanie Samsung TV na stlačenie tlačidla zapnutia/vypnutia v okne terminálu Arduino IDE.
Kombinovaný prijímač/vysielač
Obrázky 3 a 4 vyššie zobrazujú riešenie, ktoré umožňuje príjem aj prenos IR príkazu, čo umožňuje ľahké prototypovanie.
Na dekódovanie stlačení tlačidla IR diaľkového ovládača budete musieť flashovať Arduino pomocou príkladu „IRrecvDumpV2.ino“, ktorý je súčasťou knižnice IRremote.
Rovnako dobre funguje aj na prenos, ak používajú IR príkazy. Červená kontrolka je súčasťou vizuálnej indikácie, že zariadenie je v prevádzke.
Krok 5: Ako otestovať svoje podradené zariadenie I2C
Pomocou zdrojového kódu tu a obvodu uvedeného vyššie na obrázku 1 naprogramujte „Master“Arduino pomocou „IR_Remote_Sim_Test.ino“a „Slave“Arduino pomocou „IR_Remote_Sim.ino“.
Za predpokladu, že máte televízor Sony Bravia, Sky HD box a Sony BT SoundBar, stlačte tlačidlo 1 a televízor sa prepne na BBC1 (kanál 101). Stlačte tlačidlo 2 a váš zvukový panel sa vypne. Znova stlačte a zvuk sa vypne.
Počas vykonávania sekvencie IR prenosu sa rozsvieti LED3, čo znamená, že podriadený je zaneprázdnený a LED1 bude blikať v súlade s procesom IR prenosu.
Samozrejme, ak nemáte nastavený rovnaký zábavný systém ako vyššie, môžete preprogramovať otroka pomocou 'IRrecvDumpV2.ino', dekódovať vaše diaľkové príkazy, ktoré vás zaujímajú, a potom ich naprogramovať do 'IR_Remote_Sim_Test.ino' pre váš daný scenár.
Obrázok 2 zobrazuje prehľad testovacieho softvéru na úrovni systému medzi Master a Slave.
Krok 6: Zúženie vášho návrhu
Ok, takže za predpokladu, že ste sa riadili týmto pokynom a spoliehať sa na to, že dva domáce zariadenia Arduino ovládate svoje domáce zariadenia, nie je najefektívnejšie využitie vašich zásob Arduino. Ak teda zostrojíte obvod zobrazený na obrázku vyššie a pri programovaní ATMega328P pomocou programu „IR_Remote_Sim.ino“podľa tu uvedených pokynov, budete môcť celý systém redukovať na minimálne komponenty. To vám umožní vložiť váš návrh do iného systému.
Krok 7: Záver
Riešenie je stabilné a funguje dobre, je integrované v inom systéme už niekoľko týždňov bez akýchkoľvek problémov.
Vybral som Arduino Uno R3, pretože som chcel zariadenie, ktoré malo dostatočnú pamäť RAM, aby som mohol mať vyrovnávaciu pamäť s tlačidlami primeranej hĺbky. Vyrovnal som sa s veľkosťou vyrovnávacej pamäte 20 paketov (MAX_SEQUENCES).
Štítok Hybrid TX/RX, ktorý som vyrobil, mi tiež prišiel veľmi vhod pri dekódovaní diaľkových ovládačov Sony a Sky. Aj keď sa musím priznať, že čas od času používam svoj digitálny rozsah na kontrolu, aby softvérovo dekódovaný IR príkaz bol rovnaký ako ten, ktorý pochádza z prijatého IR (TSOP38328).
Jediná vec, ktorú by som urobil inak, by bolo použiť obvod pohonu s konštantným prúdom pre infračervenú LED, ako je uvedené vyššie na obrázku 2.
Ešte jeden bod na vedomie je, že nie všetky IR vysielače sú modulované na 38KHz, TSOP38328 je optimalizovaný na 38KHz.
Krok 8: Použité referencie
IRRemote.h
- Autor: z3t0
- Účel: Infračervená vzdialená knižnica pre Arduino: odosielanie a prijímanie infračervených signálov pomocou viacerých protokolov
- Od:
IR vzdialená knižnica
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Senzor IR (infračerveného) prijímača - TSOP38238 (ekvivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Aby sa zabránilo výplni dátovej štruktúry k hraniciam slov
- 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-meaning-of-attribute-packed-aligned4
Dobrý zdroj infračervených diaľkových ovládačov
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Databáza diaľkových ovládačov IR
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Datasheet
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Technický list
https://www.vishay.com/docs/81857/1n4148.pdf
Dátový list ATMega328P-PU
Odporúča:
Diaľkové ovládanie založené na prehliadači Arduino (Linux): 9 krokov (s obrázkami)
Diaľkové ovládanie založené na prehliadači Arduino (linux): Máme deti. Milujem ich na kusy, ale keď zapnú detské kanály, stále skryjú diaľkové ovládanie pre satelit a televíziu. Potom sa to deje denne niekoľko rokov a potom, čo mi moja drahá manželka umožnila
Arduino: Časové programy a diaľkové ovládanie z aplikácie pre Android: 7 krokov (s obrázkami)
Arduino: Časové programy a diaľkové ovládanie z aplikácie pre Android: Vždy ma zaujímalo, čo sa stane so všetkými takými doskami Arduino, ktoré ľudia nepotrebujú, keď dokončia svoje skvelé projekty. Pravda je trochu znepokojujúca: nič. Pozoroval som to v dome svojej rodiny, kde sa môj otec pokúsil postaviť si vlastný dom
Profesionálne vyzerajúce diaľkové ovládanie pre váš projekt Arduino doma: 9 krokov (s obrázkami)
Vytvorenie profesionálne vyzerajúceho diaľkového ovládača pre váš projekt Arduino doma: Vytvoril som projekt, ktorý pomocou arduina a infračervenej knižnice IR ovládal niekoľko vecí. V tomto návode vám teda ukážem, ako môžete akýkoľvek diaľkový ovládač znova použiť. použil váš ďalší projekt. A na to, aby ste si urobili dobrú toaletu, nepotrebujete nič vymyslené
ESP8266 RGB LED STRIP WIFI ovládanie - NODEMCU Ako IR diaľkové ovládanie pre LED pás ovládané cez Wifi - Ovládanie smartfónu RGB LED STRIP: 4 kroky
ESP8266 RGB LED STRIP WIFI ovládanie | NODEMCU Ako IR diaľkové ovládanie pre LED pás ovládané cez Wifi | Ovládanie smartfónu RGB LED STRIP: Ahoj, v tomto návode sa naučíme, ako používať nodemcu alebo esp8266 ako IR diaľkové ovládanie na ovládanie RGB LED pásu a Nodemcu budete ovládať smartfónom cez wifi. V zásade teda môžete RGB LED STRIP ovládať pomocou svojho smartfónu
Bezdrôtové diaľkové ovládanie pomocou 2,4 GHz modulu NRF24L01 s Arduino - Nrf24l01 4 -kanálový / 6 -kanálový vysielač pre Quadcopter - RC helikoptéra - RC lietadlo využívajúce Arduino: 5 krokov (s obrázkami)
Bezdrôtové diaľkové ovládanie pomocou 2,4 GHz modulu NRF24L01 s Arduino | Nrf24l01 4 -kanálový / 6 -kanálový vysielač pre Quadcopter | RC helikoptéra | RC lietadlo využívajúce Arduino: Na ovládanie RC auta | Kvadrokoptéra | Dron | RC lietadlo | RC čln, vždy potrebujeme prijímač a vysielač, predpokladajme, že pre RC QUADCOPTER potrebujeme 6 -kanálový vysielač a prijímač a tento typ TX a RX je príliš nákladný, takže si ho vyrobíme na