Obsah:

I2C infračervené diaľkové ovládanie s Arduino: 8 krokov (s obrázkami)
I2C infračervené diaľkové ovládanie s Arduino: 8 krokov (s obrázkami)

Video: I2C infračervené diaľkové ovládanie s Arduino: 8 krokov (s obrázkami)

Video: I2C infračervené diaľkové ovládanie s Arduino: 8 krokov (s obrázkami)
Video: Easy Starter Kit Lesson 25: Infrared remote control and display Работаем с IR. 13 января 2023 г. 2024, Júl
Anonim
I2C infračervené diaľkové ovládanie s Arduino
I2C infračervené diaľkové ovládanie s Arduino
I2C infračervené diaľkové ovládanie s Arduino
I2C infračervené diaľkové ovládanie s Arduino

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

Stručný prehľad obvodu
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

Stručný prehľad softvéru
Stručný prehľad softvéru
Stručný prehľad softvéru
Stručný prehľad softvéru
Stručný prehľad softvéru
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

Obsah paketu I2C
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)

Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie kódov diaľkového ovládania (ui32Data)
Získavanie 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;

  1. Počítanie bitov pomocou osciloskopu,
  2. Pozrite sa na webovú stránku,
  3. 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

Ako otestovať svoje podradené zariadenie I2C
Ako otestovať svoje podradené zariadenie I2C
Ako otestovať svoje podradené zariadenie I2C
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

Zmenšenie vášho dizajnu
Zmenšenie vášho dizajnu

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

Záver
Záver
Záver
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: