Sadržaj:
- Korak 1: Kratak pregled kruga
- Korak 2: Kratak pregled softvera
- Korak 3: Sadržaj paketa I2C
- Korak 4: Dobivanje kodova za daljinsko upravljanje (ui32Data)
- Korak 5: Kako testirati svoj I2C slave uređaj
- Korak 6: Smanjivanje dizajna
- Korak 7: Zaključak
- Korak 8: Korištene reference
Video: I2C Infracrveni daljinski upravljač s Arduinom: 8 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
PreambulaOva instrukcija detaljno opisuje kako stvoriti univerzalni daljinski upravljač koristeći I2C za sučelje.
Koliko čudno kažete da koristite I2C slave uređaj?
Da, I2C slave uređaj.
To je zato što je točno vrijeme za IR pakete prilično zahtjevno i s kojim će se tipičan Arduino boriti ako već istovremeno izvršava mnoge druge zadatke. Računarsko opterećenje je bolje raspodijeliti dodjeljivanjem intenzivnih vremenskih aktivnosti namjenskim procesorima kad god je to moguće (bolje je ipak to učiniti hardverski). S obzirom da je I2C dobro dokumentirana i robusna komunikacijska metoda između IC -ova, odabrao sam ovo kao sučelje.
Uvod
Kao što je gore spomenuto, ova uputa opisuje kako kontrolirati kućanske aparate poput TV -a, DVD playera i satelita itd. Pomoću IRremote biblioteke na Arduinu.
Završava primjerom dizajna pretvarajući Arduino u I2C slave daljinski upravljački modul (slika 1 gore) s prototipnim testnim krugom (slika 2 gore) i nastavlja s detaljima kako smanjiti dizajn na minimalno potrebne komponente kako bi se moglo ugrađen u drugi dizajn. U mom slučaju ovaj ugrađeni uređaj koristim u IoT univerzalnom daljinskom upravljaču zasnovanom na ESP8266-12E.
Koji dijelovi mi trebaju?
Za izgradnju sklopa prikazanog u koraku 1 (IC odašiljač) trebat će vam sljedeći dijelovi;
- 2 isključena 10K otpornika
- 1 off 390R otpornik
- 1 off 33R otpornik
- 1 off 3K8 otpornik
- 1 isključeno Crvena LED
- 1 isključeno IR Led TSAL6400
- 1 isključeno Tranzistor BC337
- 1 off 220uF kondenzator
- 1 popusta na Arduino Uno
Za izgradnju sklopa prikazanog u koraku 4 (IC prijemnik) trebat će vam sljedeći dijelovi;
- 1 off 10K otpornik
- 1 popusta na TSOP38328
- 1 off 220uF kondenzator
- 1 popusta na Arduino Uno
Za izgradnju kruga prikazanog u koraku 5 (Slave test krug) trebat će vam sljedeći dijelovi;
- 4 isključena 10K otpornika
- 2 off 390R otpornik
- 1 off 33R otpornik
- 1 off 3K8 otpornik
- 2 isključena Crvena LED
- 1 off IR Led TSAL6400
- 1 isključeno Tranzistor BC337
- 1 off 220uF kondenzator
- 2 gumba za isključenje SPST
- 2 off Arduino Unos
Za izgradnju sklopa prikazanog u koraku 6 (skupljeni dizajn) trebat će vam sljedeći dijelovi;
- 3 isključena 10K otpornika
- 1 off 270R otpornik
- 1 off 15R otpornik
- 4 isključena 1K otpornika
- 1 isključeno Crvena LED
- 1 off IR Led TSAL6400 ili TSAL5300
- 1 isključeno Tranzistor BC337
- 1 isključeno elektrolitski kondenzator 220uF @ 6.3v
- 1 isključeno elektrolitski kondenzator 1000uF @ 6.3v
- 2 kondenzatora od 0,1 uF
- 2 kondenzatora od 22 pF
- 1 isključeno 16MHz Xtal
- 1 popusta na ATMega328P-PU
Napomena: Za programiranje ATMega328P trebat će vam i FTDI uređaj
Koje vještine su mi potrebne?
- Minimalno razumijevanje elektronike,
- Poznavanje Arduina i njegovog IDE -a,
- Malo strpljenja,
- Odlično razumijevanje I2C -a bilo bi korisno (ovdje pogledajte neke općenite pojedinosti o I2C/Wire Library).
Tema završena
- Kratak pregled kola,
- Kratak pregled softvera,
- Sadržaj paketa I2C,
- Dobivanje kodova za daljinsko upravljanje (ui32Data),
- Kako testirati svoj I2C slave uređaj,
- Smanjuje vaš dizajn,
- Zaključak,
- Korištene reference.
Odricanje
Kao i uvijek, koristite ove upute na vlastitu odgovornost i one dolaze bez podrške.
Korak 1: Kratak pregled kruga
Svrha kruga je prijenos IR kodova daljinskog upravljača. Njegov dizajn je prilično jasan i jednostavan.
Kada je tranzistor Q1 BC337 NPN uključen putem logičkog od Arduino PWM O/P D3 do otpornika R5, struja prolazi kroz Leds 1 i 2. Ograničena samo balastnim otpornicima R3 i R4. Q1 se koristi za povećanje struje koja prolazi kroz IC diodu (IF Max = 100mA) na onu veću od one koju Arduino O/P može napajati ~ 40mA @ +5v.
Kondenzator C1 a elektrolitički od 220 uF osigurava određenu stabilizaciju sprječavajući pad opskrbne tračnice snagom koju izvlače LED -i 1 i 2.
Otpornici R1 i R2 su I2C pull -up prozori.
Korak 2: Kratak pregled softvera
Preambula
Za uspješno sastavljanje ovog izvornog koda trebat će vam sljedeća dodatna biblioteka;
IRremote.h
- Napisao: z3t0
- Svrha: Infracrvena udaljena biblioteka za Arduino: slanje i primanje infracrvenih signala s više protokola
- S:
Pregled koda
Kao što je prikazano na gornjoj slici 1, kod pokretanja kod konfigurira U/I mikrokontrolera, a zatim ispituje status interne programske zastavice 'bFreshDataFlag'. Kad je ova zastavica postavljena, kontroler potvrđuje da je to linija "Zauzeto" (slanje podatkovnog pina D4 nisko) i prelazi u stanje "eBUSY", uzastopno čitajući tipke koje se drže u uDataArray i šalju IC modulirane podatke na IC LED u prijenosni slijed.
Nakon što su podaci koji se čuvaju u uDataArray u potpunosti poslani, stanje 'eIDLE' se nastavlja i linija 'Zauzeto' se poništava (slanje podatkovnog pina D4 visoko). Uređaj je sada spreman za primanje novih pritisaka na tipke koji označavaju kraj prijenosa.
Prijem podataka o pritisku tipke IC
Kada se podaci šalju na daljinski upravljač InfraRed putem I2C, on pokreće prekid i poziv funkcije receiveEvent () pokreće se asinkrono.
Nakon što se aktiviraju, primljeni I2C podaci se zapisuju sekvencijalno u međuspremnik 'uDataArray '.
Tijekom prijema podataka, ako master signalizira kraj sekvence (bFreshData! = 0x00), postavlja se 'bFreshDataFlag', čime se signalizira početak sekvence prijenosa.
Slike 2… 3 prikazuju primjer tipične sekvence paketa.
Napomena: Cijeli izvorni kod dostupan je ovdje
Korak 3: Sadržaj paketa I2C
Format kontrolnog paketa poslanog podređenom uređaju preko I2C dat je gore na slici 1, značenje svakog polja dano je ispod
Značenje polja kontrolnih paketa
bEkodiranje bajtova;
-
Kodiranje IR daljinskog upravljača,
- RC6 (nebo) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Heksadecimalni prikaz binarnog IC toka podataka 4 bajta podataka (bez potpisa, dugačak), LSByte … MSByte
bajt bNumberOfBitsInTheData;
Broj bitova u podacima (maks. 32). Raspon = 1… 32
bajt bPulseTrainRepeats;
Koliko ponavljanja ovog pulsnog niza. Raspon = 1… 255. Obično 2… 4 ponavljanja. Možda ćete to htjeti proširiti za naredbe za uključivanje/isključivanje jer prijemnom uređaju ponekad je potrebno nekoliko dodatnih impulsnih ponavljanja za primanje signala uključenja
bajt bDelayBetweenPulseTrainRepeats;
Kašnjenje između ponavljanja ovog impulsnog niza. Domet = 1… 255mS. Obično 22mS… 124mS
bajt bButtonRepeats;
Simulira opetovano pritiskanje istog gumba (ali ne podržava izmijenjeni kod poput Apple daljinskog upravljača, samo ponavlja kôd gumba). Raspon = 1… 256. Zadano = 1
uint16_t ui16DelayBetweenButtonRepeats;
Kašnjenje između ponavljanja gumba (nepotpisani int). 2 bajta ukupno LSByte … MSByte. Domet = 1… 65535mS. Zadano = 0 ms
bajt bFreshData;
-
Svježi podaci. Vrijednost koja nije nulta. Zadnje napisano pokreće IR TX sekvencu. Raspon 0x00… 0xFF
- Dolazi još kontrolnih paketa = 0
- Ovo je konačni kontrolni paket = vrijednost koja nije nula 1, 2,… 255
Obratite pozornost na uporabu kompajler direktive '_packed_'. Time se osigurava da su podaci paketni bajt za bajt u memoriji, bez obzira na ciljni sustav koji se koristi (Uno, Due, ESP8266 itd.). To znači da sjedinjenje između registerAllocationType i dataArrayType treba samo sekvencijalno taktiranje/taktiranje u bajtovima iz kontrolnog paketa, čineći softver TX/RX jednostavnim.
Korak 4: Dobivanje kodova za daljinsko upravljanje (ui32Data)
Postoje tri načina na koje možete nabaviti odgovarajući kôd ključa za daljinsko upravljanje;
- Brojenjem bitova osciloskopom,
- Potražite na web stranici,
- Dekodirajte ga izravno iz protoka podataka u softveru.
Preko brojanja bitova s opsegom
Ovo nije učinkovita metoda jer oduzima dosta vremena i potencijalno zahtijeva više od jednog pokušaja, no može biti vrlo točna. Također je korisno u vizualnoj provjeri kodova dobivenih metodama 2 i 3, također u određivanju bilo kakvih posebnosti daljinskog upravljača. Primjerice, kada držite gumb pritisnut na Apple daljinskom upravljaču. Daljinski upravljač će u početku izdati naredbeni slijed, a zatim slijediti to s ponovljenim komprimiranim nizom od 0xF….
Potražite na web stranici
Baza podataka kodova za daljinsko upravljanje na web mjestu Linux infracrvenog daljinskog upravljača dobar je izvor.
Nedostatak je što ćete možda morati isprobati nekoliko kodova dok ne pronađete onaj koji vam odgovara. Možda ćete također morati protumačiti neke prikaze kodova kako biste ih pretvorili u njihov ekvivalentni šesterokutni oblik.
Dekodirajte ga izravno iz podatkovnog toka
Koristeći sklop na gornjoj slici 1 zajedno s primjerom biblioteke IRremote 'IRrecvDumpV2.ino' moguće je dekodirati tok podataka izravno s daljinskog upravljača. Slika 2 prikazuje dekodirani daljinski upravljač televizora Samsung za pritiskanje gumba za uključivanje/isključivanje u prozoru terminala Arduino IDE.
Kombinirani prijemnik/odašiljač
Slike 3 i 4 gore prikazuju rješenje koje omogućuje i prijem i prijenos IC naredbe kako bi se omogućilo jednostavno stvaranje prototipa.
Za dekodiranje pritiska tipki na daljinskom upravljaču trebat ćete Arduino prebrisati primjerom 'IRrecvDumpV2.ino' koji dolazi s bibliotekom IRremote.
Također radi jednako dobro za prijenos ako IR naredi. Crvena LED dioda uključena je kao vizualna indikacija da uređaj radi.
Korak 5: Kako testirati svoj I2C slave uređaj
Koristeći ovdje izvorni kod i krug opisan gore na slici 1, programirajte 'Master' Arduino s 'IR_Remote_Sim_Test.ino' i 'Slave' Arduino s 'IR_Remote_Sim.ino'.
Pod pretpostavkom da imate televizor Sony Bravia, Sky HD box i Sony BT SoundBar, pritisnite gumb 1 i vaš će se televizor prebaciti na BBC1 (kanal 101). Pritisnite gumb 2 i zvučna traka će se isključiti. Pritisnite ponovo i isključit će se zvuk.
Tijekom izvođenja sekvence IC prijenosa LED3 će svijetliti ukazujući na to da je slave zauzet, a LED1 će treperiti u skladu s procesom IC prijenosa.
Naravno, ako nemate postavljen isti sustav zabave kao gore, možete ponovno programirati slave s 'IRrecvDumpV2.ino', dekodirati vaše daljinske naredbe koje vas zanimaju, a zatim ih programirati u 'IR_Remote_Sim_Test.ino' za vaš zadanom scenariju.
Slika 2 prikazuje pregled softvera za testiranje na razini sustava između glavnog i podređenog.
Korak 6: Smanjivanje dizajna
U redu, pa ako pretpostavite da ste slijedili ove upute, oslanjanje na dva Arduina za kontrolu kućnih uređaja nije najučinkovitija upotreba vaših Arduino dionica. Slijedom toga, ako izgradite krug prikazan na gornjoj slici i slijedite upute ovdje za programiranje ATMega328P s 'IR_Remote_Sim.ino', moći ćete svesti cijeli sustav na minimalne komponente. To će vam omogućiti da svoj dizajn ugradite u neki drugi sustav.
Korak 7: Zaključak
Rješenje je stabilno i dobro radi, već je nekoliko tjedana ugrađeno u drugi sustav bez ikakvih problema.
Odabrao sam Arduino Uno R3 jer sam htio uređaj koji ima dovoljno RAM -a tako da mogu imati međuspremnik tipki razumne dubine. Zadovoljio sam se veličinom međuspremnika od 20 paketa (MAX_SEQUENCES).
Hibridni TX/RX štit koji sam napravio također mi je dobro došao prilikom dekodiranja Sony i Sky daljinskih upravljača. Iako moram priznati da s vremena na vrijeme upotrebljavam svoj digitalni opseg za provjeru softverske dekodirane IC naredbe koja je bila ista kao i ona koja je stigla od primljene IC (TSOP38328).
Jedino što bih drugačije učinio bilo bi korištenje kruga pogona konstantne struje za infracrvenu LED diodu kao što je prikazano gore na slici 2.
Treba napomenuti i to da nisu svi IC odašiljači modulirani s 38KHz, TSOP38328 je optimiziran za 38KHz.
Korak 8: Korištene reference
IRRemote.h
- Napisao: z3t0
- Svrha: Infracrvena udaljena biblioteka za Arduino: slanje i primanje infracrvenih signala s više protokola
- S:
IR daljinska biblioteka
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IC (infracrveni) senzor prijemnika - TSOP38238 (ekvivalent)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Kako bi se izbjeglo dodavanje strukture podataka do granica riječi
- 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
Dobar izvor detalja o IR daljinskom upravljaču
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Baza podataka IR daljinskog upravljača
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
Tehnički list BC337
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Tehnički list
https://www.vishay.com/docs/81857/1n4148.pdf
Preporučeni:
TV daljinski upravljač postaje RF daljinski -- NRF24L01+ Vodič: 5 koraka (sa slikama)
TV daljinski upravljač postaje RF daljinski || Vodič za NRF24L01+: U ovom projektu ću vam pokazati kako sam koristio popularni nRF24L01+ RF IC za bežično podešavanje svjetline LED trake putem tri beskorisna gumba na daljinskom upravljaču televizora. Započnimo
Univerzalni daljinski upravljač za TV - Ardiuino, infracrveni: 5 koraka
Univerzalni daljinski upravljač za televizor - Ardiuino, infracrveni: Zdravo! U ovom uputstvu pokazat ću vam kako izgraditi i programirati vlastiti univerzalni daljinski upravljač koji će raditi s većinom stvari koje koriste infracrveni daljinski upravljač, a koji će također " slušati " i dekodirati infracrveni signal koji šalju različiti drugi
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: 6 koraka
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: Ako ste ikada izgubili daljinski upravljač za televizor ili DVD uređaj, znate koliko je frustrirajuće morati hodati do, pronaći i koristiti gumbe na samom uređaju. Ponekad ti gumbi čak ne nude istu funkcionalnost kao daljinski. Primiti
Infracrveni klima uređaj za mobilne telefone Daljinski upravljač DIY Proizvodnja: 7 koraka
Infracrveni klima uređaj za mobilne telefone Daljinski upravljač DIY Proizvodnja: U vrućem ljetu, kad idete kući ili u ured, želite uključiti klima uređaj, ali neko vrijeme ne možete pronaći daljinski upravljač. To je vrlo neugodna stvar. U doba kada ovaj mobilni telefon ne odlazi, možete li ga koristiti kao
Infracrveni daljinski i IC prijemnik (TSOP1738) s Arduinom: 10 koraka
Infracrveni daljinski i IC prijemnik (TSOP1738) s Arduinom: Ovo uputstvo je za Arduino početnike. Ovo je jedan od mojih ranijih projekata s Arduinom. Jako sam uživao kad sam to napravio i nadam se da će se svidjeti i vama. Najatraktivnija značajka ovog projekta je “ Bežično upravljanje ”. I to je