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, Srpanj
Anonim
I2C Infracrveni daljinski upravljač s Arduinom
I2C Infracrveni daljinski upravljač s Arduinom
I2C Infracrveni daljinski upravljač s Arduinom
I2C Infracrveni daljinski upravljač s Arduinom

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

Kratak pregled kola
Kratak pregled kola

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

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: 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

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

Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje kodova za daljinsko upravljanje (ui32Data)
Dobivanje 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 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

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 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

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

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