Obsah:
- Krok 1: Stručný přehled obvodu
- Krok 2: Stručný přehled softwaru
- Krok 3: Obsah paketu I2C
- Krok 4: Získání kódů dálkového ovládání (ui32Data)
- Krok 5: Jak otestovat své podřízené zařízení I2C
- Krok 6: Zmenšení vašeho návrhu
- Krok 7: Závěr
- Krok 8: Použité reference
Video: I2C infračervené dálkové ovládání s Arduinem: 8 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:24
Tento Preamble podrobně popisuje, jak vytvořit univerzální dálkový ovladač pomocí rozhraní I2C.
Jak zvláštní to říkáte, když používáte podřízené zařízení I2C?
Ano, zařízení I2C slave.
Důvodem je, že přesné načasování IR paketů je poměrně náročné a s jakým bude typický Arduino bojovat, pokud již provádí mnoho dalších úkolů současně. Je lepší distribuovat výpočetní zátěž přiřazením činností náročných na časování vyhrazeným procesorům, kdykoli je to možné (ještě lépe to udělat v hardwaru). Vzhledem k tomu, že I2C je dobře zdokumentovaná a robustní komunikační metoda mezi integrovanými obvody, zvolil jsem toto rozhraní.
Úvod
Jak bylo uvedeno výše, tento návod popisuje, jak ovládat domácí zařízení, jako je televize, DVD přehrávač a satelit atd., Pomocí knihovny IRremote na Arduinu.
V závěru je ukázka designu přeměněna Arduino na modul dálkového ovládání I2C slave (obr. 1 výše) s prototypovým testovacím obvodem (obr. 2 nahoře) a pokračuje v detailu, jak zmenšit váš návrh až na minimum nezbytných komponent, aby mohl být vložené do jiného designu. V mém případě používám toto integrované zařízení v zařízení pro dálkové ovládání IoT Universal založené na ESP8266-12E.
Jaké díly potřebuji?
K sestavení obvodu zobrazeného v kroku 1 (IR vysílač) budete potřebovat následující díly;
- 2 off 10K odpory
- 1 vypnutý odpor 390R
- 1 vypnutý odpor 33R
- 1 off rezistor 3K8
- 1 vypnuto Červená LED
- 1 vypnuto IR LED TSAL6400
- 1 off tranzistoru BC337
- 1 vypnutý kondenzátor 220uF
- 1 sleva na Arduino Uno
K sestavení obvodu zobrazeného v kroku 4 (IR přijímač) budete potřebovat následující díly;
- 1 off 10K odpor
- 1 sleva na TSOP38328
- 1 vypnutý kondenzátor 220uF
- 1 sleva na Arduino Uno
K sestavení obvodu zobrazeného v kroku 5 (testovací obvod Slave) budete potřebovat následující části;
- 4 off 10K odpory
- 2 vypnuto odpor 390R
- 1 vypnutý odpor 33R
- 1 off rezistor 3K8
- 2 vypnuto Červená LED
- 1 off IR LED TSAL6400
- 1 off tranzistoru BC337
- 1 vypnutý kondenzátor 220uF
- 2 vypnutá tlačítka SPST
- 2 z Arduino Unos
K sestavení obvodu zobrazeného v kroku 6 (Shrunk design) budete potřebovat následující části;
- 3 off 10K odpory
- 1 vypnutý rezistor 270R
- 1 off 15R odpor
- 4 off 1K odpory
- 1 vypnuto Červená LED
- 1 off IR Led TSAL6400 nebo TSAL5300
- 1 off tranzistoru BC337
- 1 vypnutý elektrolytický kondenzátor 220uF při 6,3 V
- 1 vypnutý elektrolytický kondenzátor 1000 uF při 6,3 V
- 2 off 0,1uF kondenzátory
- 2 vypnuté kondenzátory 22 pF
- 1 off 16MHz Xtal
- 1 sleva na ATMega328P-PU
Poznámka: K programování ATMega328P budete také potřebovat zařízení FTDI
Jaké dovednosti potřebuji?
- Minimální znalost elektroniky,
- Znalost Arduina a jeho IDE,
- Trochu trpělivosti,
- Užitečné by bylo porozumět I2C (některé obecné informace o I2C/Wire Library naleznete zde).
Pokrytá témata
- Krátký přehled okruhu,
- Krátký přehled softwaru,
- Obsah paketu I2C,
- Získávání kódů dálkového ovladače (ui32Data),
- Jak otestovat zařízení I2C Slave,
- Zmenšování vašeho designu,
- Závěr,
- Použité reference.
Prohlášení
Tyto pokyny jako vždy používáte na vlastní riziko a nejsou podporovány.
Krok 1: Stručný přehled obvodu
Účelem obvodu je přenos kódů IR dálkového ovládání. Jeho design je docela přímočarý a docela jednoduchý.
Když je tranzistor Q1 a BC337 NPN zapnut pomocí logického z Arduino PWM O/P D3 na odpor R5, proud prochází LED 1 a 2. Omezeno pouze předřadnými odpory R3 a R4. Q1 se používá k posílení proudu procházejícího IR diodou (IF Max = 100 mA) na hodnotu převyšující to, co je schopno Arduino O/P napájet ~ 40mA @ +5v.
Kondenzátor C1 a 220uF elektrolytický poskytuje určitou stabilizaci, která zabraňuje poklesu napájecí lišty o výkon odebíraný LED diodami 1 a 2.
Rezistory R1 a R2 jsou výsuvy I2C.
Krok 2: Stručný přehled softwaru
Preambule
K úspěšnému kompilaci tohoto zdrojového kódu budete potřebovat následující knihovnu navíc;
IRremote.h
- Autor: z3t0
- Účel: Infračervená vzdálená knihovna pro Arduino: odesílejte a přijímejte infračervené signály s více protokoly
- Od:
Přehled kódu
Jak je znázorněno na obrázku 1 výše, při spuštění kód konfiguruje I/O mikrořadiče a poté dotazuje stav interního softwarového příznaku „bFreshDataFlag“. Když je tento příznak nastaven, ovladač prohlásí, že je to „zaneprázdněný“řádek (odesílání datového pinu D4 nízko), a přesune se do stavu „eBUSY“, aby postupně přečetl tlačítko stisknuté příkazy držené v uDataArray a odeslání IR modulovaných dat do IR LED v přenosová sekvence.
Jakmile jsou data uložená v uDataArray plně odeslána, stav 'eIDLE' je obnoven a řádek 'Busy' je zrušen (odesílání datového pinu D4 vysoké). Zařízení je nyní připraveno přijímat další stisknutí tlačítek označující konec přenosové sekvence.
Příjem údajů o stisknutí infračerveného tlačítka
Když jsou data odeslána do dálkového ovladače InfraRed přes I2C, spustí se přerušení a volání funkce receiveEvent () se spustí asynchronně.
Po spuštění se přijatá data I2C zapisují postupně do vyrovnávací paměti „uDataArray “.
Pokud je během příjmu dat master signalizován konec sekvence (bFreshData! = 0x00), nastaví se 'bFreshDataFlag', což signalizuje začátek přenosové sekvence.
Obrázky 2… 3 uvádějí příklad typické sekvence paketů.
Poznámka: Úplný zdrojový kód je k dispozici zde
Krok 3: Obsah paketu I2C
Formát řídicího paketu odeslaného do slave přes I2C je uveden výše na obrázku 1, význam každého pole je uveden níže
Význam polí kontrolních paketů
bajtové bEncoding;
-
Kódování IR dálkového ovládání,
- RC6 (Sky) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Šestnáctková reprezentace binárního datového proudu IR 4 datové bajty (dlouhé bez znaménka), LSByte… MSByte
bajt bNumberOfBitsInTheData;
Počet bitů v datech (max. 32). Rozsah = 1… 32
bajt bPulseTrainRepeats;
Kolik opakování tohoto pulzního vlaku. Rozsah = 1… 255. Obvykle 2… 4 opakování. Možná to budete chtít rozšířit pro příkazy Zap/Vyp, protože přijímací zařízení někdy vyžaduje několik dalších opakování sledu pulsů, aby obdrželo signál zapnutí
bajt bDelayBetweenPulseTrainRepeats;
Zpoždění mezi opakováními této pulzní řady. Dosah = 1… 255 mS. Obvykle 22 mS… 124 mS
bajt bButtonRepeats;
Simuluje opakované stisknutí stejného tlačítka (ale nepodporuje upravený kód jako dálkové ovládání Apple, pouze opakuje kód tlačítka). Rozsah = 1… 256. Výchozí = 1
uint16_t ui16DelayBetweenButtonRepeats;
Zpoždění mezi opakováními tlačítek (nepodepsané int). 2 bajty celkem LSByte… MSByte. Dosah = 1… 65535 mS. Výchozí = 0 mS
byte bFreshData;
-
Čerstvá data. Nenulová hodnota. Napsáno jako poslední, spustí sekvenci IR TX. Rozsah 0x00… 0xFF
- Další kontrolní pakety přijdou = 0
- Toto je konečný kontrolní paket = nenulová hodnota 1, 2,… 255
Všimněte si použití směrnice kompilátoru '_packed_'. To má zajistit, že data jsou pakety bajt po bajtu v paměti bez ohledu na použitý cílový systém (Uno, Due, ESP8266 atd.). To znamená, že spojení mezi registerAllocationType a dataArrayType potřebuje pouze postupné vytáčení/hodiny v bajtech z řídicího paketu, což zjednodušuje software TX/RX.
Krok 4: Získání kódů dálkového ovládání (ui32Data)
Existují tři způsoby, jak můžete získat příslušný kód klíče dálkového ovládání;
- Počítáním bitů pomocí osciloskopu,
- Podívejte se na web,
- Dekódujte jej přímo z datového toku v softwaru.
Přes počítání bitů s rozsahem
Toto není efektivní metoda, protože to trvá poměrně dlouho a potenciálně vyžaduje více než jeden pokus, nicméně může být velmi přesné. Je také užitečný při vizuální validaci kódů získaných pomocí metod 2 a 3, také při určování jakýchkoli zvláštností dálkového ovladače. Například při podržení tlačítka na dálkovém ovládání Apple IR. Dálkový ovladač zpočátku vydá příkazovou sekvenci, poté následuje opakovaná komprimovaná sekvence 0xF….
Podívejte se na web
Dobrým zdrojem je databáze kódů dálkového ovládání na webu Linux Infrared Remote Control.
Nevýhodou však je, že možná budete muset vyzkoušet několik kódů, dokud nenajdete ten, který vám vyhovuje. Možná budete muset také interpretovat některá zobrazení kódů, abyste je převedli do ekvivalentní hexadecimální podoby.
Dekódujte jej přímo z datového proudu
Pomocí obvodu na obrázku 1 výše ve spojení s příkladem knihovny IRremote 'IRrecvDumpV2.ino' je možné dekódovat datový tok přímo z dálkového ovladače. Obrázek 2 ukazuje dekódovaný dálkový ovladač Samsung TV pro stisknutí tlačítka zapnutí/vypnutí v okně terminálu Arduino IDE.
Kombinovaný přijímač/vysílač
Obrázky 3 a 4 výše zobrazují řešení, které umožňuje příjem i přenos IR příkazu, což umožňuje snadné prototypování.
Chcete -li dekódovat stisknutí tlačítka IR dálkového ovladače, budete muset flashovat Arduino pomocí příkladu 'IRrecvDumpV2.ino', který je dodáván s knihovnou IRremote.
Stejně dobře to funguje i pro přenos, pokud IR příkazy. Červená LED je součástí vizuální indikace, že je zařízení v provozu.
Krok 5: Jak otestovat své podřízené zařízení I2C
Pomocí zdrojového kódu zde a obvodu uvedeného výše na obrázku 1 naprogramujte Arduino „Master“pomocí „IR_Remote_Sim_Test.ino“a „Slave“Arduino pomocí „IR_Remote_Sim.ino“.
Za předpokladu, že máte televizor Sony Bravia, Sky HD box a Sony BT SoundBar, stiskněte tlačítko 1 a váš televizor se přepne na BBC1 (kanál 101). Stiskněte tlačítko 2 a váš zvukový panel se ztlumí. Znovu stiskněte a zvuk se vypne.
Během provádění sekvence přenosu IR se rozsvítí LED3, což znamená, že podřízený je zaneprázdněn, a LED1 bude blikat v souladu s procesem přenosu IR.
Samozřejmě pokud nemáte nastavený stejný zábavní systém jako výše, můžete přeprogramovat otroka pomocí 'IRrecvDumpV2.ino', dekódovat vaše vzdálené příkazy, které vás zajímají, a poté je naprogramovat do 'IR_Remote_Sim_Test.ino' pro váš daný scénář.
Obrázek 2 ukazuje přehled testovacího softwaru na úrovni systému mezi Master a Slave.
Krok 6: Zmenšení vašeho návrhu
Dobře, takže za předpokladu, že jste se řídili tímto návodem, spoléhat se na ovládání dvou domácích zařízení pomocí dvou Arduinos není nejúčinnější využití vaší zásoby Arduino. Pokud tedy zkonstruujete obvod zobrazený na obrázku výše a při programování ATMega328P pomocí 'IR_Remote_Sim.ino' podle zde uvedených pokynů budete moci redukovat celý systém na minimální komponenty. To vám umožní vložit svůj design do jiného systému.
Krok 7: Závěr
Řešení je stabilní a funguje dobře, je integrováno do jiného systému již několik týdnů bez jakýchkoli problémů.
Vybral jsem Arduino Uno R3, protože jsem chtěl zařízení, které mělo dostatečnou paměť RAM, takže jsem mohl mít vyrovnávací paměť tlačítek přiměřené hloubky. Vyrovnal jsem se s velikostí vyrovnávací paměti 20 paketů (MAX_SEQUENCES).
Štít Hybrid TX/RX, který jsem vyrobil, mi také přišel velmi vhod při dekódování dálkových ovladačů Sony a Sky. I když se musím přiznat, že čas od času použiji svůj digitální rozsah pro kontrolu, že softwarově dekódovaný IR příkaz byl stejný jako ten, který přišel z IR přijatého (TSOP38328).
Jediná věc, kterou bych udělal jinak, by bylo použít obvod konstantního proudu pro infračervenou LED, jak je uvedeno výše na obrázku 2.
Ještě jeden bod na vědomí je, že ne všechny IR vysílače jsou modulovány na 38KHz, TSOP38328 je optimalizován pro 38KHz.
Krok 8: Použité reference
IRRemote.h
- Autor: z3t0
- Účel: Infračervená vzdálená knihovna pro Arduino: odesílejte a přijímejte infračervené signály s více protokoly
- Od:
IR vzdálená knihovna
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Senzor přijímače IR (infračervený) - TSOP38238 (ekvivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Aby se zabránilo odsazení datové struktury na hranice 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 dálkových ovladačů
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR databáze dálkových ovladačů
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Datasheet
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
Datový list 1N4148
https://www.vishay.com/docs/81857/1n4148.pdf
Doporučuje:
Dálkové ovládání založené na prohlížeči Arduino (Linux): 9 kroků (s obrázky)
Dálkové ovládání založené na prohlížeči Arduino (linux): Máme děti. Miluji je na kousky, ale dál zapínají dálkové ovládání pro satelit a televizi, když zapnou dětské kanály. Poté, co se to děje několik let denně, a poté, co mi moje drahá manželka dovolila mít
Dálkové ovládání neviditelných garážových vrat: 7 kroků (s obrázky)
Dálkové ovládání neviditelných garážových vrat: Jednou jsme nechali auto zaparkované mimo garáž a zloděj rozbil okno, aby se dostal k dálkovému ovládání garážových vrat. Poté otevřeli garáž a ukradli několik kol. Rozhodl jsem se tedy schovat dálkový ovladač zabudováním do popelníku auta. Funguje tak, že
IRduino: Dálkové ovládání Arduino - napodobte ztracené dálkové ovládání: 6 kroků
IRduino: Dálkové ovládání Arduino - napodobte ztracené dálkové ovládání: Pokud jste někdy ztratili dálkový ovladač pro váš televizor nebo DVD přehrávač, víte, jak frustrující je chodit k němu, hledat a používat tlačítka na samotném zařízení. Někdy tato tlačítka ani nenabízejí stejné funkce jako dálkové ovládání. Přijmout
Ovládání 3 servomotorů se 3 potenciometry a Arduinem: 11 kroků (s obrázky)
Ovládání 3 servomotorů se 3 potenciometry a Arduinem: Dobrý den. Toto je můj první pokyn, takže doufám, že se mnou budete mít trpělivost, pokud při nastavování udělám nějaké chyby. Je napsán pro začátečníky, takže pokročilejší z vás toho mohou hodně přeskočit a zapojit to. Cíl, který jsem si stanovil
Běžná sada dálkového ovládání přeměněna na čtyřkanálové dálkové ovládání RC hraček: 4 kroky
Běžná sada dálkového ovládání přeměněna na čtyřkanálové dálkové ovládání RC hraček: 如何 将 通用 遥控 器 套件 转换 为 玩具 模型 器 使用 的 四 四 通道 遥控 器。 遥控 器 套件 非常 便宜 便宜。 它 采用改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 教程 完成 这个 电子 项目 为 您 您 服务。 玩具 车船 提供 远程 无线 无线。