Sadržaj:

I2C Infracrveni daljinski upravljač s Arduinom: 8 koraka (sa slikama)
I2C Infracrveni daljinski upravljač s Arduinom: 8 koraka (sa slikama)

Video: I2C Infracrveni daljinski upravljač s Arduinom: 8 koraka (sa slikama)

Video: I2C Infracrveni daljinski upravljač s Arduinom: 8 koraka (sa slikama)
Video: Lesson 1: What is Arduino? Types of Arduino Boards and SunFounder Kit | SunFounder Robojax 2024, Novembar
Anonim
I2C Infracrveni daljinski upravljač sa Arduinom
I2C Infracrveni daljinski upravljač sa Arduinom
I2C Infracrveni daljinski upravljač sa Arduinom
I2C Infracrveni daljinski upravljač sa Arduinom

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

Kratak pregled kola
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

Kratak pregled softvera
Kratak pregled softvera
Kratak pregled softvera
Kratak pregled softvera
Kratak pregled softvera
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

Sadržaj paketa I2C
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)

Preuzimanje kodova za daljinsko upravljanje (ui32Data)
Preuzimanje kodova za daljinsko upravljanje (ui32Data)
Preuzimanje kodova za daljinsko upravljanje (ui32Data)
Preuzimanje kodova za daljinsko upravljanje (ui32Data)
Nabavljanje kodova za daljinsko upravljanje (ui32Data)
Nabavljanje kodova za daljinsko upravljanje (ui32Data)
Nabavljanje kodova za daljinsko upravljanje (ui32Data)
Nabavljanje kodova za daljinsko upravljanje (ui32Data)

Postoje tri načina na koje možete nabaviti odgovarajući kôd ključa za daljinsko upravljanje;

  1. Brojenjem bitova osciloskopom,
  2. Potražite na web stranici,
  3. 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

Kako testirati svoj I2C slave uređaj
Kako testirati svoj I2C slave uređaj
Kako testirati svoj I2C slave uređaj
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

Smanjivanje vašeg dizajna
Smanjivanje vašeg 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

Zaključak
Zaključak
Zaključak
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: