Obsah:

I2C infračervené dálkové ovládání s Arduinem: 8 kroků (s obrázky)
I2C infračervené dálkové ovládání s Arduinem: 8 kroků (s obrázky)

Video: I2C infračervené dálkové ovládání s Arduinem: 8 kroků (s obrázky)

Video: I2C infračervené dálkové ovládání s Arduinem: 8 kroků (s obrázky)
Video: ESP8266 Diesel Injector Purging Station - PWM NodeMCU pump flow Control (Subtittled) 2024, Červenec
Anonim
I2C infračervené dálkové ovládání s Arduino
I2C infračervené dálkové ovládání s Arduino
I2C infračervené dálkové ovládání s Arduino
I2C infračervené dálkové ovládání s Arduino

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

Stručný přehled obvodu
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

Stručný přehled softwaru
Stručný přehled softwaru
Stručný přehled softwaru
Stručný přehled softwaru
Stručný přehled softwaru
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

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

Získávání kódů dálkového ovládání (ui32Data)
Získávání kódů dálkového ovládání (ui32Data)
Získávání kódů dálkového ovládání (ui32Data)
Získávání kódů dálkového ovládání (ui32Data)
Získávání kódů dálkového ovládání (ui32Data)
Získávání kódů dálkového ovládání (ui32Data)
Získávání kódů dálkového ovládání (ui32Data)
Získává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í;

  1. Počítáním bitů pomocí osciloskopu,
  2. Podívejte se na web,
  3. 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

Jak otestovat podřízené zařízení I2C
Jak otestovat podřízené zařízení I2C
Jak otestovat podřízené zařízení I2C
Jak otestovat 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

Zmenšování vašeho návrhu
Zmenšování 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

Závěr
Závěr
Závěr
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: