Sadržaj:
- Korak 1: Kratak pregled kola
- 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 izmjena: 2024-01-30 08:08
PreambleOva instrukcija 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 precizno određivanje vremena 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 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, ovo uputstvo 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) sa 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 kola prikazanog u koraku 1 (IC odašiljač) trebat će vam sljedeći dijelovi;
- 2 od 10K otpornika
- 1 off 390R otpornik
- 1 off 33R otpornik
- 1 off 3K8 otpornik
- 1 isključeno Crvena LED
- 1 off IR Led TSAL6400
- 1 isključeno Tranzistor BC337
- 1 off 220uF kondenzator
- 1 off Arduino Uno
Za izgradnju kola prikazanog u koraku 4 (IC prijemnik) trebat će vam sljedeći dijelovi;
- 1 off 10K otpornik
- 1 off TSOP38328
- 1 off 220uF kondenzator
- 1 off Arduino Uno
Da biste izgradili kolo opisano 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čeno Crvena LED
- 1 off IR Led TSAL6400
- 1 isključeno Tranzistor BC337
- 1 off 220uF kondenzator
- 2 dugmeta za isključenje SPST
- 2 off Arduino Unos
Za izgradnju kola prikazanog u koraku 6 (skupljeni dizajn) trebat će vam sljedeći dijelovi;
- 3 od 10K otpornika
- 1 off 270R otpornik
- 1 off 15R otpornik
- 4 isključena 1K otpornika
- 1 isključeno Crvena LED
- 1 isključeno 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 22pF
- 1 isključeno 16MHz Xtal
- 1 off 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 bi bilo korisno (ovdje pogledajte neke općenite detalje o I2C/Wire Library).
Obrađene teme
- Kratak pregled kola,
- Kratak pregled softvera,
- Sadržaj paketa I2C,
- Preuzimanje kodova za daljinsko upravljanje (ui32Data),
- Kako testirati svoj I2C Slave uređaj,
- Smanjujući vaš dizajn,
- Zaključak,
- Korištene reference.
Odricanje odgovornosti
Kao i uvijek, koristite ove upute na vlastitu odgovornost i ona dolaze bez podrške.
Korak 1: Kratak pregled kola
Svrha kola je prenošenje 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) do one veće od one koju Arduino O/P može napajati ~ 40mA @ +5v.
Kondenzator C1 a elektrolitik od 220 uF osigurava određenu stabilizaciju sprječavajući pad opskrbne tračnice snagom koju crpe 1 i 2.
Otpornici R1 i R2 su I2C povlačenja.
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: šalje i prima infracrvene signale sa više protokola
- Sa:
Pregled koda
Kao što je prikazano na gornjoj slici 1, kod pokretanja kôd konfigurira U/I mikrokontrolera, a zatim ispituje status interne programske zastavice 'bFreshDataFlag'. Kada je ova zastavica postavljena, kontroler potvrđuje da je to linija "Zauzeto" (slanje pina podataka D4 nisko) i prelazi u stanje "eBUSY" za sekvencijalno čitanje pritiskom na komande koje se drže u uDataArray i slanjem IC moduliranih podataka na IR LED u sekvenca prenosa.
Nakon što su podaci koji se drže u uDataArray u potpunosti poslani, stanje 'eIDLE' se nastavlja i linija 'Zauzeto' se poništava (slanje pina podataka D4 visoko). Uređaj je sada spreman za primanje dodatnih pritisaka na dugmad koji označavaju kraj niza prijenosa.
Prijem podataka o pritisku IC dugmeta
Kada se podaci šalju na daljinski upravljač InfraRed preko I2C, on pokreće prekid i poziv funkcije receiveEvent () se pokreće asinhrono.
Nakon što se aktiviraju, primljeni I2C podaci se zapisuju sekvencijalno u međuspremnik 'uDataArray '.
Tokom prijema podataka, ako master signalizira kraj sekvence (bFreshData! = 0x00), postavlja se 'bFreshDataFlag', čime se signalizira početak sekvence prenosa.
Slike 2… 3 daju primjer tipične sekvence paketa.
Napomena: Cijeli izvorni kod dostupan je ovdje
Korak 3: Sadržaj paketa I2C
Format kontrolnog paketa koji se šalje slave -u preko I2C dat je gore na slici 1, značenje svakog polja je dato ispod
Značenje polja kontrolnih paketa
bEncoding byte;
-
IC kodiranje 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čki), 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 da primi signal uključenja
bajt bDelayBetweenPulseTrainRepeats;
Kašnjenje između ponavljanja ovog impulsnog niza. Domet = 1… 255mS. Obično 22mS… 124mS
bajt bButtonRepeats;
Simulira višekratno 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 dugmeta (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 više kontrolnih paketa = 0
- Ovo je konačni kontrolni paket = vrijednost koja nije nula 1, 2,… 255
Obratite pažnju na upotrebu kompajler direktive '_packed_'. Time se osigurava da su podaci paketni bajt za bajt u memoriji, bez obzira na ciljni sistem koji se koristi (Uno, Due, ESP8266 itd.). To znači da unija 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 toka 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, ali može biti vrlo precizna. Također je korisno pri vizualnoj provjeri kodova dobivenih metodama 2 i 3, također pri određivanju bilo kakvih posebnosti daljinskog upravljača. Na primjer, kada držite pritisnuto dugme na Apple IR daljinskom upravljaču. Daljinski upravljač će u početku izdati naredbenu sekvencu, a zatim je slijediti s ponovljenom komprimiranom sekvencom od 0xF….
Potražite na web stranici
Baza podataka kodova za daljinsko upravljanje na Linux web lokaciji za infracrveno daljinsko upravljanje dobar je izvor.
Nedostatak je, međutim, š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 heksadecimalni oblik.
Dekodirajte ga izravno iz toka podataka
Koristeći kolo na slici 1 gore zajedno sa primjerom biblioteke IRremote 'IRrecvDumpV2.ino' moguće je dekodirati tok podataka direktno sa daljinskog upravljača. Slika 2 prikazuje dekodirani daljinski upravljač Samsung TV -a za pritiskanje tipke za uključivanje/isključivanje u prozoru terminala Arduino IDE.
Kombinovani prijemnik/predajnik
Slike 3 i 4 gore prikazuju rješenje koje omogućava i prijem i prijenos IC naredbe kako bi se omogućilo jednostavno stvaranje prototipa.
Za dekodiranje pritiska daljinskog upravljača na daljinskom upravljaču trebat ćete Arduino prebrisati primjerom 'IRrecvDumpV2.ino' koji dolazi s bibliotekom IRremote.
Isto tako radi i za prijenos ako IR naredi. Crvena LED dioda je uključena kao vizuelna indikacija da je uređaj u akciji.
Korak 5: Kako testirati svoj I2C slave uređaj
Koristeći ovdje izvorni kod i krug prikazan na slici 1, programirajte 'Master' Arduino sa 'IR_Remote_Sim_Test.ino' i 'Slave' Arduino sa 'IR_Remote_Sim.ino'.
Pod pretpostavkom da imate Sony Bravia TV, Sky HD box i Sony BT SoundBar, pritisnite dugme 1 i vaš TV će se prebaciti na BBC1 (kanal 101). Pritisnite dugme 2 i zvučna traka će se isključiti. Pritisnite ponovo i zvuk će se isključiti.
Tokom izvođenja IC sekvence prenosa LED3 će zasvetleti ukazujući da je slave zauzet, a LED1 će treperiti u skladu sa procesom IC prenosa.
Naravno, ako nemate postavljen isti sistem zabave kao gore, možete ponovno programirati slave s 'IRrecvDumpV2.ino', dekodirati vaše daljinske komande koje vas zanimaju, a zatim ih programirati u 'IR_Remote_Sim_Test.ino' za vaš datom scenariju.
Slika 2 prikazuje pregled softvera za testiranje sistemskog nivoa između Master -a i Slave -a.
Korak 6: Smanjivanje dizajna
U redu, pa pretpostaviti da ste slijedili ove upute oslanjanje na dva Arduina za kontrolu kućnih uređaja nije najefikasnija upotreba vaših Arduino dionica. Prema tome, ako izgradite krug prikazan na gornjoj slici i slijedite upute ovdje za programiranje ATMega328P sa 'IR_Remote_Sim.ino', moći ćete svesti cijeli sistem na minimalne komponente. To će vam omogućiti da svoj dizajn ugradite u neki drugi sistem.
Korak 7: Zaključak
Rješenje je stabilno i dobro radi, već nekoliko sedmica je ugrađeno u drugi sistem bez ikakvih problema.
Odabrao sam Arduino Uno R3 jer sam htio uređaj koji ima dovoljno RAM -a da mogu imati međuspremnik tipki razumne dubine. Zadovoljio sam se veličinom bafera od 20 paketa (MAX_SEQUENCES).
Hibridni TX/RX štit koji sam napravio također mi je dobro došao pri dekodiranju Sony i Sky daljinskih upravljača. Iako moram priznati da s vremena na vrijeme koristim svoj digitalni opseg za provjeru softverske dekodirane IC naredbe koja je ista kao i ona koja dolazi 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.
Još jedna stvar koju treba napomenuti je 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: šalje i prima infracrvene signale sa više protokola
- Sa:
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
Da biste izbjegli 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
BC337 Tehnički list
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Tehnički list
https://www.vishay.com/docs/81857/1n4148.pdf
Preporučuje se:
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 dugmeta na daljinskom upravljaču televizora. Hajde da počnemo
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 tipke na samom uređaju. Ponekad ti gumbi čak ne nude istu funkcionalnost kao daljinski. Primiti
Infracrveni klima uređaj za mobilne telefone Daljinski upravljač Uradi sam: 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 dosadna stvar. U doba kada ovaj mobilni telefon ne odlazi, možete li ga koristiti kao
Bežični daljinski upravljač pomoću NRF24L01 modula od 2,4 GHz sa Arduinom - Nrf24l01 4 -kanalni / 6 -kanalni prijemnik odašiljača za Quadcopter - Rc helikopter - Rc avion pomoću Arduina: 5 koraka (sa slikama)
Bežični daljinski upravljač pomoću NRF24L01 modula od 2,4 GHz sa Arduinom | Nrf24l01 4 -kanalni / 6 -kanalni prijemnik odašiljača za Quadcopter | Rc helikopter | Rc avion pomoću Arduina: Za upravljanje Rc automobilom | Quadcopter | Dron | RC avion | RC brod, uvijek nam je potreban prijemnik i odašiljač, pretpostavimo da za RC QUADCOPTER trebamo 6 -kanalni odašiljač i prijemnik, a ta vrsta TX -a i RX -a je preskupa, pa ćemo napraviti jedan na našem
Infracrveni daljinski i IC prijemnik (TSOP1738) sa 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. Mnogo sam uživao kad sam to napravio i nadam se da će se i vama svideti. Najatraktivnija karakteristika ovog projekta je “ Bežična kontrola ”. A to je