Satura rādītājs:

I2C infrasarkanā tālvadības pults ar Arduino: 8 soļi (ar attēliem)
I2C infrasarkanā tālvadības pults ar Arduino: 8 soļi (ar attēliem)

Video: I2C infrasarkanā tālvadības pults ar Arduino: 8 soļi (ar attēliem)

Video: I2C infrasarkanā tālvadības pults ar Arduino: 8 soļi (ar attēliem)
Video: Инфракрасный приемник дистанционного управления NE567 (схема и макет) 2024, Jūlijs
Anonim
I2C infrasarkanā tālvadības pults ar Arduino
I2C infrasarkanā tālvadības pults ar Arduino
I2C infrasarkanā tālvadības pults ar Arduino
I2C infrasarkanā tālvadības pults ar Arduino

Šajā pamācībā ir sīki aprakstīts, kā izveidot universālu tālvadības pulti, izmantojot interfeisu I2C.

Cik dīvaini jūs sakāt, izmantojot I2C vergu ierīci?

Jā, I2C vergu ierīce.

Tas ir tāpēc, ka precīzs IR pakešu laiks ir diezgan prasīgs, un tipisks Arduino cīnīsies, ja tas jau vienlaikus veic daudzus citus uzdevumus. Labāk ir sadalīt skaitļošanas slodzi, kad vien iespējams, piešķirot intensīvas laika aktivitātes īpašiem procesoriem (labāk to darīt aparatūrā). Tā kā I2C ir labi dokumentēta un stabila saziņas metode starp IC, es izvēlējos to kā saskarni.

Ievads

Kā minēts iepriekš, šajā pamācībā ir aprakstīts, kā kontrolēt sadzīves tehniku, piemēram, TV, DVD atskaņotāju un satelītu utt., Izmantojot IRrdote bibliotēku Arduino.

Tas noslēdzas ar dizaina piemēru, pārvēršot Arduino par I2C vergu tālvadības moduli (1. attēls iepriekš) ar prototipa pārbaudes ķēdi (2. attēls iepriekš), un sīkāk aprakstīts, kā samazināt dizainu līdz minimālajām nepieciešamajām sastāvdaļām, lai to varētu iestrādāts citā dizainā. Manā gadījumā es izmantoju šo iegulto ierīci IoT universālās tālvadības ierīcē, kuras pamatā ir ESP8266-12E.

Kādas detaļas man ir vajadzīgas?

Lai izveidotu ķēdi, kas attēlota 1. solī (IR raidītājs), jums būs nepieciešamas šādas daļas;

  • 2 izslēgti 10K rezistori
  • 1 izslēgts 390R rezistors
  • 1 izslēgts 33R rezistors
  • 1 izslēgts 3K8 rezistors
  • 1 izslēgta sarkanā gaismas diode
  • 1 atlaide IR Led TSAL6400
  • 1 atlaide no tranzistora BC337
  • 1 izslēgts 220uF kondensators
  • 1 atlaide Arduino Uno

Lai izveidotu ķēdi, kas attēlota 4. solī (IR uztvērējs), jums būs nepieciešamas šādas daļas;

  • 1 izslēgts 10K rezistors
  • 1 atlaide TSOP38328
  • 1 izslēgts 220uF kondensators
  • 1 atlaide Arduino Uno

Lai izveidotu ķēdi, kas attēlota 5. solī (Vergu pārbaudes ķēde), jums būs nepieciešamas šādas daļas;

  • 4 izslēgti 10K rezistori
  • 2 izslēgts 390R rezistors
  • 1 izslēgts 33R rezistors
  • 1 izslēgts 3K8 rezistors
  • 2 izslēgta sarkanā gaismas diode
  • 1 atlaide IR Led TSAL6400
  • 1 atlaide no tranzistora BC337
  • 1 izslēgts 220uF kondensators
  • 2 izslēgtas SPST pogas
  • 2 atlaide Arduino Unos

Lai izveidotu ķēdi, kas attēlota 6. solī (saraušanās dizains), jums būs nepieciešamas šādas daļas;

  • 3 izslēgti 10K rezistori
  • 1 izslēgts 270R rezistors
  • 1 izslēgts 15R rezistors
  • 4 izslēgti 1K rezistori
  • 1 izslēgta sarkanā gaismas diode
  • 1 izslēgts IR LED TSAL6400 vai TSAL5300
  • 1 atlaide no tranzistora BC337
  • 1 izslēgts 220uF kondensatora elektrolītiskais @ 6.3v
  • 1 izslēgts 1000uF kondensatora elektrolītiskais @ 6.3v
  • 2 izslēgti 0,1uF kondensatori
  • 2 izslēgti 22pF kondensatori
  • 1 izslēgts 16MHz Xtal
  • 1 atlaide ATMega328P-PU

Piezīme: ATMega328P programmēšanai būs nepieciešama arī FTDI ierīce

Kādas prasmes man vajadzīgas?

  • Minimāla elektronikas izpratne,
  • Zināšanas par Arduino un tā IDE,
  • Nedaudz pacietības,
  • Būtu noderīga zināma I2C izpratne (skatiet šeit dažus vispārīgus I2C/Wire Library datus).

Tēmas, uz kurām attiecas

  • Īss ķēdes pārskats,
  • Īss pārskats par programmatūru,
  • I2C pakešu saturs,
  • Tālvadības pults kodu iegūšana (ui32Data),
  • Kā pārbaudīt savu I2C Slave ierīci,
  • Samazinot savu dizainu,
  • Secinājums,
  • Izmantotās atsauces.

Atruna

Kā vienmēr, jūs izmantojat šos norādījumus uz savu risku, un tie netiek atbalstīti.

1. darbība. Īss ķēdes pārskats

Īss ķēdes pārskats
Īss ķēdes pārskats

Ķēdes mērķis ir pārsūtīt IR tālvadības pults kodus. Tās dizains ir diezgan vienkāršs un vienkāršs.

Kad tranzistors Q1 a BC337 NPN tiek ieslēgts, izmantojot loģiku, no Arduino PWM O/P D3 uz rezistoru R5, strāva iet caur 1. un 2. gaismas diodi. To ierobežo tikai balasta rezistori R3 un R4. Q1 tiek izmantots, lai palielinātu strāvu, kas iet caur IR diode (IF Max = 100mA), līdz jaudai, kas pārsniedz Arduino O/P spēju ~ 40mA @ +5v.

Kondensators C1 un 220uF Electrolytic nodrošina zināmu stabilizāciju, novēršot piegādes sliedes krišanos ar 1. un 2. gaismas diodes patērēto jaudu.

Rezistori R1 un R2 ir I2C pull up.

2. darbība. Īss programmatūras pārskats

Īss programmatūras pārskats
Īss programmatūras pārskats
Īss programmatūras pārskats
Īss programmatūras pārskats
Īss programmatūras pārskats
Īss programmatūras pārskats

Preambula

Lai veiksmīgi apkopotu šo avota kodu, jums būs nepieciešama šāda papildu bibliotēka;

IRremote.h

  • Autors: z3t0
  • Mērķis: Infrasarkanā attālā bibliotēka Arduino: nosūtīt un saņemt infrasarkanos signālus ar vairākiem protokoliem
  • No:

Koda pārskats

Kā parādīts 1. attēlā, palaišanas laikā kods konfigurē mikrokontrollera I/O un pēc tam aptauj iekšējās programmatūras karoga statusu “bFreshDataFlag”. Kad šis karogs ir iestatīts, kontrolieris apgalvo, ka tā ir aizņemta (datu sūtīšanas taustiņš D4 ir zems) un pāriet uz “eBUSY” stāvokli, secīgi nolasot pogas, nospiežot komandas, kas tiek turētas uDataArray , un nosūta IR modulētos datus uz IR LED pārraides secība.

Kad uDataArray saglabātie dati ir pilnībā nosūtīti, stāvoklis “eIDLE” tiek atsākts un rindā “Aizņemts” tiek atcelta (sūtot datu tapu D4 augsts). Ierīce tagad ir gatava saņemt vairāk pogu nospiešanas, kas apzīmē pārraides secības beigas.

IR pogu nospiešanas datu saņemšana

Kad dati tiek nosūtīti uz infrasarkano staru tālvadības pulti, izmantojot I2C, tas izraisa pārtraukumu, un funkciju callEvent () funkcija tiek aktivizēta asinhroni.

Pēc aktivizēšanas saņemtie I2C dati tiek ierakstīti secīgi buferī “uDataArray ”.

Datu saņemšanas laikā, ja galvenais ziņo par secības beigām (bFreshData! = 0x00), tiek iestatīts 'bFreshDataFlag', tādējādi signalizējot pārraides secības sākumu.

Attēli 2… 3 sniedz tipiskas pakešu secības piemēru.

Piezīme. Pilns avota kods ir pieejams šeit

3. darbība: I2C pakešu saturs

I2C pakešu saturs
I2C pakešu saturs

Vadības paketes formāts, kas nosūtīts vergam, izmantojot I2C, ir norādīts 1. attēlā, katra lauka nozīme ir dota zemāk

Vadības pakešu lauku nozīme

baits bKodēšana;

  • IR tālvadības pults kodējums,

    • RC6 (debesis) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

Binārās IR datu plūsmas heksadecimālais attēlojums 4 Datu baiti (neparakstīti gari), LSByte… MSByte

baits bNumberOfBitsInTheData;

Bitu skaits datos (ne vairāk kā 32). Diapazons = 1… 32

baits bPulseTrainRepeats;

Cik atkārtojas šis pulsa vilciens. Diapazons = 1… 255. Parasti 2… 4 atkārtojumi. Iespējams, vēlēsities to pagarināt ieslēgšanas/izslēgšanas komandām, jo uztvērēja ierīcei dažkārt ir nepieciešami daži papildu impulsa vilcienu atkārtojumi, lai saņemtu ieslēgšanās signālu

baits bDelayBetweenPulseTrainRepeats;

Kavēšanās starp šī impulsa vilciena atkārtojumiem. Diapazons = 1… 255mS. Parasti 22mS… 124mS

baits bButtonRepeats;

Simulē atkārtotu vienas un tās pašas pogas nospiešanu (bet neatbalsta modificēto kodu kā Apple tālvadības pults, tas tikai atkārto pogas kodu). Diapazons = 1… 256. Noklusējums = 1

uint16_t ui16DelayBetweenButtonRepeats;

Aizkave starp pogu atkārtojumiem (neparakstīts int). Kopā 2 baiti LSByte… MSByte. Diapazons = 1… 65535mS. Noklusējums = 0mS

baits bFreshData;

  • Svaigi dati. Vērtība, kas nav nulle. Ierakstīts pēdējais, aktivizē IR TX secību. Diapazons 0x00… 0xFF

    • Nākamās kontroles paketes = 0
    • Šī ir pēdējā kontroles pakete = vērtība, kas nav nulle 1, 2,… 255

Ņemiet vērā kompilatora direktīvas “_packed_” izmantošanu. Tas ir paredzēts, lai nodrošinātu, ka dati atmiņā ir pakešu baiti par baitu neatkarīgi no izmantotās mērķa sistēmas (Uno, Due, ESP8266 utt.). Tas nozīmē savienotību starp registerAllocationType un dataArrayType ir nepieciešams tikai secīgi pulksteņa laiks/pulkstenis baitos no vadības paketes, padarot TX/RX programmatūru vienkāršu.

4. darbība. Tālvadības pults kodu iegūšana (ui32Data)

Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)
Tālvadības pults kodu iegūšana (ui32Data)

Ir trīs veidi, kā iegūt attiecīgu tālvadības pults atslēgas kodu;

  1. Izmantojot bitu skaitīšanu ar osciloskopu,
  2. Meklējiet to vietnē,
  3. Atšifrējiet to tieši no programmatūras datu plūsmas.

Izmantojot bitu skaitīšanu ar tvērumu

Šī nav efektīva metode, jo tā prasa diezgan daudz laika un, iespējams, prasa vairāk nekā vienu mēģinājumu, tomēr tā var būt ļoti precīza. Tas ir arī noderīgi, vizuāli apstiprinot kodus, kas iegūti, izmantojot 2. un 3. metodi, kā arī nosakot visas tālvadības pults īpatnības. Piemēram, turot nospiestu Apple IR tālvadības pults pogu. Tālvadības pults sākotnēji izdos komandu secību, pēc tam seko atkārtotai saspiestai 0xF secībai….

Meklējiet to vietnē

Tālvadības pults kodu datu bāze Linux infrasarkanās tālvadības pults tīmekļa vietnē ir labs avots.

Tomēr mīnuss ir tāds, ka jums, iespējams, būs jāizmēģina daži kodi, līdz atrodat sev piemērotāko. Iespējams, jums būs jāinterpretē arī daži kodu attēlojumi, lai tos pārvērstu līdzvērtīgā heksadecimālā formā.

Atšifrējiet to tieši no datu plūsmas

Izmantojot 1. attēlā redzamo ķēdi kopā ar IRremote bibliotēkas piemēru “IRrecvDumpV2.ino”, ir iespējams atšifrēt datu plūsmu tieši no tālvadības pults. 2. attēlā redzama atšifrēta Samsung TV tālvadības pults, lai ieslēgtu/izslēgtu pogu Arduino IDE termināļa logā.

Kombinēts uztvērējs/raidītājs

Iepriekš 3. un 4. attēlā ir attēlots risinājums, kas ļauj gan uztvert, gan pārraidīt IS komandu, lai varētu viegli prototipēt.

Lai atšifrētu IR tālvadības pults nospiešanu, jums būs jāatspīdina Arduino ar “IRrecvDumpV2.ino” piemēru, kas pievienots IRremote bibliotēkai.

Tas darbojas vienlīdz labi arī pārraidei, ja IR komandas. Sarkana gaismas diode ir iekļauta kā vizuāla norāde par ierīces darbību.

5. darbība. Kā pārbaudīt savu I2C vergu ierīci

Kā pārbaudīt savu I2C vergu ierīci
Kā pārbaudīt savu I2C vergu ierīci
Kā pārbaudīt savu I2C vergu ierīci
Kā pārbaudīt savu I2C vergu ierīci

Izmantojot šeit esošo avota kodu un iepriekš attēlā redzamo ķēdi, ieprogrammējiet “Master” Arduino ar “IR_Remote_Sim_Test.ino” un “Slave” Arduino ar “IR_Remote_Sim.ino”.

Pieņemot, ka jums ir televizors Sony Bravia, Sky HD kaste un Sony BT SoundBar, nospiediet pogu 1, un jūsu televizors pārslēgsies uz BBC1 (101. kanāls). Nospiediet pogu 2, un skaņas josla izslēgsies. Nospiediet vēlreiz, un tiks atslēgta skaņa.

Infrasarkanās pārraides secības izpildes laikā LED3 iedegsies, norādot, ka vergs ir aizņemts, un gaismas diode 1 mirgos vienlaikus ar IR pārraides procesu.

Protams, ja jums nav iestatīta tāda pati izklaides sistēma kā iepriekš, varat pārprogrammēt vergu, izmantojot “IRrecvDumpV2.ino”, atšifrēt interesējošās tālvadības komandas un pēc tam ieprogrammēt tās “IR_Remote_Sim_Test.ino”. dots scenārijs.

2. attēlā parādīts sistēmas līmeņa pārbaudes programmatūras pārskats starp Master un Slave.

6. darbība: samaziniet savu dizainu

Samaziniet savu dizainu
Samaziniet savu dizainu

Labi, pieņemot, ka esat ievērojis šo pamācību, paļaujoties uz diviem Arduinos, lai kontrolētu savas mājas ierīces, nav visefektīvākais jūsu Arduino krājuma izmantojums. Līdz ar to, ja jūs izveidojat ķēdi, kas parādīta iepriekšējā attēlā, un izpildiet šeit sniegtos norādījumus, lai ieprogrammētu ATMega328P ar 'IR_Remote_Sim.ino', jūs varēsit samazināt visu sistēmu līdz minimālajām sastāvdaļām. Tas ļaus jums iegult savu dizainu citā sistēmā.

7. solis. Secinājums

Secinājums
Secinājums
Secinājums
Secinājums

Risinājums ir stabils un darbojas labi, tas jau vairākas nedēļas ir iebūvēts citā sistēmā bez problēmām.

Es izvēlējos Arduino Uno R3, jo vēlējos ierīci, kurai būtu pietiekami daudz operatīvās atmiņas, lai man būtu saprātīga dziļuma pogu buferis. Es samierinājos ar bufera izmēru 20 paketes (MAX_SEQUENCES).

Manis izgatavotais hibrīda TX/RX vairogs arī ļoti noderēja, dekodējot Sony un Sky tālvadības pultis. Lai gan man jāatzīstas, ka laiku pa laikam izmantoju savu digitālo diapazonu, lai pārbaudītu, vai programmatūras dekodētā IR komanda bija tāda pati kā tā, kas tika saņemta no saņemtā IS (TSOP38328).

Vienīgais, ko es būtu darījis citādi, būtu bijis izmantot pastāvīgās strāvas piedziņas ķēdi IR vadam, kā parādīts iepriekš 2. attēlā.

Vēl jāpiebilst, ka ne visi IR raidītāji ir modulēti ar 38KHz, TSOP38328 ir optimizēts 38KHz.

8. darbība. Izmantotās atsauces

IRRemote.h

  • Autors: z3t0
  • Mērķis: Infrasarkano staru attālā bibliotēka Arduino: nosūtīt un saņemt infrasarkanos signālus ar vairākiem protokoliem
  • No:

IR tālvadības bibliotēka

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

IR (infrasarkanais) uztvērēja sensors - TSOP38238 (ekvivalents)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

Lai izvairītos no datu struktūras saspiešanas līdz vārdu robežām

  • 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

Labs IR tālvadības detaļu avots

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

IR tālvadības datu bāze

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

BC337 datu lapa

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

1N4148 Datu lapa

https://www.vishay.com/docs/81857/1n4148.pdf

Ieteicams: