Mündəricat:

Arduino ilə I2C InfraRed Uzaqdan İdarəetmə: 8 Addım (Şəkillərlə birlikdə)
Arduino ilə I2C InfraRed Uzaqdan İdarəetmə: 8 Addım (Şəkillərlə birlikdə)

Video: Arduino ilə I2C InfraRed Uzaqdan İdarəetmə: 8 Addım (Şəkillərlə birlikdə)

Video: Arduino ilə I2C InfraRed Uzaqdan İdarəetmə: 8 Addım (Şəkillərlə birlikdə)
Video: MKS Gen L — Марлин 1 1 9 (configuration.h) 2024, Iyul
Anonim
Arduino ilə I2C InfraRed Uzaqdan İdarəetmə
Arduino ilə I2C InfraRed Uzaqdan İdarəetmə
Arduino ilə I2C InfraRed Uzaqdan İdarəetmə
Arduino ilə I2C InfraRed Uzaqdan İdarəetmə

PreambleThis Instructable, interfeys üçün I2C istifadə edərək universal bir uzaqdan idarəedicinin necə yaradılacağını ətraflı izah edir.

Bir I2C qul cihazı istifadə edərək nə qədər qəribə deyirsiniz?

Bəli, bir I2C qul cihazı.

Bunun səbəbi, IR paketlərinin dəqiq vaxtı olduqca tələbkardır və tipik bir Arduino, eyni zamanda bir çox digər vəzifəni yerinə yetirirsə, mübarizə aparacaqdır. Mümkün olduğu təqdirdə xüsusi prosessorlara vaxt intensiv fəaliyyəti təyin etməklə hesablama yükünü paylamaq daha yaxşıdır (hələ də bunu hardware ilə etmək daha yaxşıdır). I2C, IC -lər arasında yaxşı sənədləşdirilmiş və möhkəm bir əlaqə üsulu olduğunu nəzərə alaraq, bunu interfeys olaraq seçdim.

Giriş

Yuxarıda qeyd edildiyi kimi, bu təlimat Arduino -dakı IRremote kitabxanasından istifadə edərək TV, DVD oynatıcı və Peyk kimi məişət cihazlarının necə idarə olunacağını təsvir edir.

Arduino -nu prototip test dövrəsi (yuxarıdakı şəkil 2) olan bir I2C kölə uzaqdan idarəetmə moduluna (yuxarıdakı şəkil 1) çevirən bir dizayn nümunəsi ilə başa çatır və dizaynınızı lazım olan minimum komponentlərə qədər necə kiçiltmək lazım olduğunu izah edir. başqa bir dizayna daxil edilmişdir. Mənim vəziyyətimdə, bu quraşdırılmış cihazı ESP8266-12E ətrafında qurulmuş bir IoT Universal uzaqdan idarə cihazında istifadə edirəm.

Hansı hissələrə ehtiyacım var?

Addım 1 -də (IR Verici) təsvir olunan dövrə qurmaq üçün aşağıdakı hissələrə ehtiyacınız olacaq;

  • 2 ədəd 10K rezistor
  • 1 off 390R müqavimət
  • 1 off 33R rezistor
  • 1 off 3K8 rezistor
  • 1 ədəd qırmızı LED
  • 1 dəfə IR Led TSAL6400
  • 1 dəfə Transistor BC337
  • 1 ədəd 220 uF kondansatör
  • 1 ədəd Arduino Uno

Addım 4 -də (IR Alıcısı) təsvir olunan dövrə qurmaq üçün aşağıdakı hissələrə ehtiyacınız olacaq;

  • 1 ədəd 10K rezistor
  • 1 endirim TSOP38328
  • 1 ədəd 220 uF kondansatör
  • 1 ədəd Arduino Uno

Addım 5 -də (Slave test dövrəsi) təsvir olunan dövrə qurmaq üçün aşağıdakı hissələrə ehtiyacınız olacaq;

  • 4 ədəd 10K rezistor
  • 2 off 390R müqavimət
  • 1 off 33R rezistor
  • 1 ədəd 3K8 rezistor
  • 2 söndürülmüş qırmızı LED
  • 1 dəfə IR Led TSAL6400
  • 1 dəfə Transistor BC337
  • 1 ədəd 220 uF kondansatör
  • SPST düymələrinə 2 endirim
  • 2 ədəd Arduino Unos

Addım 6 -da təsvir olunan dövrə qurmaq üçün (Shrunk dizaynı) aşağıdakı hissələrə ehtiyacınız olacaq;

  • 3 ədəd 10K rezistor
  • 1 off 270R rezistor
  • 1 off 15R rezistor
  • 4 ədəd 1K rezistor
  • 1 ədəd qırmızı LED
  • 1 dəfə IR Led TSAL6400 və ya TSAL5300
  • 1 dəfə Transistor BC337
  • 1 off 220 uF elektrolitik kondansatör 6.3v
  • 1 off 1000uF kondansatör elektrolitik @ 6.3v
  • 2 off 0.1uF kondansatör
  • 2 ədəd 22 pF kondansatör
  • 1 dəfə 16 MHz Xtal
  • 1 endirim ATMega328P-PU

Qeyd: ATMega328P -ni proqramlaşdırmaq üçün FTDI cihazına da ehtiyacınız olacaq

Hansı bacarıqlara ehtiyacım var?

  • Minimum elektronika anlayışı,
  • Arduino və onun IDE bilikləri,
  • Bir az səbr,
  • I2C haqqında bəzi anlayışlar faydalı olardı (bəzi ümumi I2C/Telli Kitabxana təfərrüatları üçün bura baxın).

Mövzular əhatə olunur

  • Dövrə qısa baxış,
  • Proqram təminatına qısa baxış,
  • I2C Paket məzmunu,
  • Uzaqdan idarəetmə kodları əldə etmək (ui32Data),
  • I2C Slave cihazınızı necə sınamaq olar,
  • Dizaynınızı kiçiltmək,
  • Nəticə,
  • İstifadə olunan istinadlar.

İmtina

Həmişə olduğu kimi, bu təlimatları öz riski ilə istifadə edirsən və dəstəklənmir.

Addım 1: Dövrə Qısa Baxış

Dövrə haqqında qısa məlumat
Dövrə haqqında qısa məlumat

Dövrün məqsədi IR uzaqdan idarəetmə kodlarını ötürməkdir. Dizaynı olduqca irəli və olduqca sadədir.

Transistor Q1 a BC337 NPN, Arduino PWM O/P D3 -dən Resistor R5 -ə qədər bir məntiqlə açıldıqda, cərəyan Leds 1 və 2 -dən keçir, yalnız R3 və R4 balast rezistorları ilə məhdudlaşır. Q1, IR Diodundan (IF Max = 100mA) keçən cərəyanı Arduino O/P -nin ~ 40mA @ +5v təchizatından artıq olana qədər artırmaq üçün istifadə olunur.

Kondansatör C1 a 220uF Elektrolitik, Leds 1 və 2 tərəfindən çəkilən enerji ilə təchizat xəttinin düşməsini maneə törədən bəzi sabitləşdirmə təmin edir.

R1 və R2 rezistorları I2C çəkilməsidir.

Addım 2: Proqram təminatına qısa baxış

Proqram təminatına qısa baxış
Proqram təminatına qısa baxış
Proqram təminatına qısa baxış
Proqram təminatına qısa baxış
Proqram təminatına qısa baxış
Proqram təminatına qısa baxış

Giriş

Bu mənbə kodunu uğurla tərtib etmək üçün aşağıdakı əlavə kitabxanaya ehtiyacınız olacaq;

IRremote.h

  • Müəllif: z3t0
  • Məqsəd: Arduino üçün infraqırmızı uzaq kitabxana: çoxlu protokollarla infraqırmızı siqnalları göndərin və qəbul edin
  • Kimdən:

Kod Baxış

Yuxarıdakı şəkil 1-də göstərildiyi kimi, başlanğıcda kod mikro nəzarətçi G/Ç konfiqurasiya edir və sonra 'bFreshDataFlag' daxili proqram bayrağının vəziyyətini sorğulayır. Bu bayraq qurulduqda, nəzarətçi 'Məşğul' xəttini (D4 məlumat pinini aşağı göndərir) təsdiqləyir və 'eBUSY' vəziyyətinə keçir, uDataArray -də tutulan düymələri ardıcıl oxuyaraq 'eBUSY' vəziyyətinə keçir və IR modulyasiya edilmiş məlumatları IR LED -ə göndərir. ötürmə ardıcıllığı.

UDataArray -də saxlanılan məlumatlar tam göndərildikdən sonra 'eIDLE' vəziyyəti bərpa edilir və 'Məşğul' xətti təsdiqlənmir (D4 yüksək məlumat pinini göndərir). Cihaz artıq ötürmə ardıcıllığının sonunu göstərən daha çox düymə basmağa hazırdır.

IR düyməsini basma məlumatlarının qəbulu

Məlumatlar I2C vasitəsi ilə InfraRed uzaqdan idarəediciyə göndərildikdə bir kəsilməyə səbəb olur və receptEvent () funksiyası zəngi asinxron olaraq işə salınır.

Alınan I2C məlumatları işə salındıqdan sonra 'uDataArray ' tamponuna ardıcıl olaraq yazılır.

Məlumat qəbulu zamanı, master tərəfindən ardıcıllığın sonu (bFreshData! = 0x00) siqnal verilirsə, 'bFreshDataFlag' təyin edilir və bununla da ötürmə ardıcıllığının başladığını bildirir.

Şəkillər 2… 3 tipik bir paket ardıcıllığına bir nümunə verir.

Qeyd: Tam mənbə kodu burada mövcuddur

Addım 3: I2C Paket Məzmunu

I2C Paket Məzmunu
I2C Paket Məzmunu

I2C üzərindən kölə göndərilən nəzarət paketinin formatı yuxarıda şəkil 1 -də hər sahənin mənası aşağıda verilmişdir

Nəzarət paketi sahələrinin mənası

bayt bEncoding;

  • IR uzaqdan idarəetmə kodlaşdırması,

    • RC6 (Göy) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

İkili İR məlumat axınının hex təsviri 4 Məlumat baytı (işarəsiz uzun), LSByte… MSByte

bayt bNumberOfBitsInTheData;

Məlumatdakı bitlərin sayı (Maksimum 32). Aralıq = 1… 32

bayt bPulseTrainRepeats;

Bu nəbz qatarı nə qədər təkrarlanır. Aralıq = 1… 255. Adətən 2… 4 təkrar. Qəbul edən cihazın bir açılma siqnalı almaq üçün bəzən bir neçə əlavə pulse qatarının təkrarlanmasını tələb etdiyi üçün bunu Açma/Kapatma əmrləri üçün uzatmaq istəyə bilərsiniz

bayt bDelayBetweenPulseTrainRepeats;

Bu nəbz qatarının təkrarlanması arasındakı gecikmə. Aralığı = 1… 255 mS. Tipik olaraq 22mS… 124mS

bayt bButtonTəkrar;

Eyni düyməni təkrar basmağı simulyasiya edir (lakin Apple pultu kimi dəyişdirilmiş kodu dəstəkləmir, sadəcə düymə kodunu təkrarlayır). Aralıq = 1… 256. Varsayılan = 1

uint16_t ui16DelayBetweenButtonRepeats;

Düymə təkrarları arasındakı gecikmə (imzasız int). Cəmi 2 bayt LSByte… MSByte. Aralığı = 1… 65535 mS. Varsayılan = 0mS

bayt bFreshData;

  • Təzə məlumatlar. Sıfır olmayan bir dəyər. Son yazılan IR TX ardıcıllığını tetikler. 0x00… 0xFF aralığında
    • Daha çox nəzarət paketi gələcək = 0
    • Bu son nəzarət paketidir = Sıfır olmayan dəyər 1, 2,… 255

'_Packed_' tərtibçi direktivinin istifadəsinə diqqət yetirin. Bu, istifadə olunan hədəf sistemindən (Uno, Due, ESP8266 və s.) Asılı olmayaraq, məlumatların yaddaşda bayt üçün paket bayt olmasını təmin etmək üçündür. Bu, registerAllocationType və dataArrayType arasındakı birliyin, TX/RX proqramını sadə hala gətirən bir nəzarət paketindən baytlarla ardıcıl olaraq saat/saat tələb etməsi deməkdir.

Addım 4: Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)

Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)
Uzaqdan İdarəetmə Kodlarının Alınması (ui32Data)

Müvafiq bir uzaqdan idarə açar kodunu əldə etməyin üç yolu var;

  1. Osiloskopla bit saymaqla,
  2. Bir veb saytına baxın,
  3. Proqramdakı məlumat axınından birbaşa deşifr edin.

Bir əhatə dairəsi ilə bit saymaqla

Bu, kifayət qədər vaxt tələb etdiyi və potensial olaraq birdən çox cəhd tələb etdiyi üçün təsirli bir üsul deyil, lakin çox dəqiq ola bilər. 2 və 3 metodlarından istifadə edərək əldə edilən kodları vizual olaraq yoxlamaqda, həmçinin uzaqdan idarəetmə cihazının xüsusiyyətlərini təyin etməkdə də faydalıdır. Məsələn, Apple IR uzaqdan idarəetmə düyməsini basıb saxlayın. Uzaqdan idarəetmə əvvəlcə bir əmr ardıcıllığı verəcək və sonra təkrarlanan sıxılmış 0xF ardıcıllığı ilə bunu izləyin …

Bir veb saytına baxın

Linux İnfraqırmızı Uzaqdan İdarəetmə veb saytındakı uzaqdan idarəetmə kod bazası yaxşı bir mənbədir.

İşin mənfi tərəfi, sizin üçün uyğun olanı tapana qədər bir neçə kodu sınamağınız ola bilər. Kodların ekvivalent altıbucaqlı formasına çevirmək üçün bəzi ifadələrini şərh etməli ola bilərsiniz.

Məlumat axınından birbaşa deşifr edin

IRremote kitabxana nümunəsi 'IRrecvDumpV2.ino' ilə birlikdə yuxarıdakı şəkil 1 -də göstərilən sxemdən istifadə edərək məlumat axını birbaşa uzaqdan idarə etmək mümkündür. Şəkil 2, Arduino IDE terminal pəncərəsində açma/söndürmə düyməsinə basmaq üçün kodlaşdırılmış Samsung TV pultunu göstərir.

Birləşdirilmiş Alıcı/Verici

Yuxarıdakı 3 və 4 -cü şəkillər, IR protokolunun həm prototipləşdirilməsini asanlaşdırmaq üçün həm qəbul etməyi, həm də ötürülməsini təmin edən bir həlli əks etdirir.

IR uzaqdan idarəetmə düyməsini basmağı deşifr etmək üçün Arduino -nu IRremote kitabxanası ilə birlikdə gələn 'IRrecvDumpV2.ino' nümunəsi ilə yandırmalısınız.

IR əmrləri verildikdə ötürmə üçün də eyni dərəcədə yaxşı işləyir. Cihazın hərəkətdə olduğunu göstərən əyani göstərici olaraq qırmızı bir led var.

Addım 5: I2C Slave Cihazınızı Necə Test Edəcəksiniz

I2C Slave Cihazınızı Necə Test Edə bilərsiniz
I2C Slave Cihazınızı Necə Test Edə bilərsiniz
I2C Slave Cihazınızı Necə Test Edə bilərsiniz
I2C Slave Cihazınızı Necə Test Edə bilərsiniz

Mənbə kodunu və şəkil 1 -də yuxarıda göstərilən sxemdən istifadə edərək 'Master' Arduino'yu 'IR_Remote_Sim_Test.ino' və 'Slave' Arduino 'IR_Remote_Sim.ino' ilə proqramlaşdırın.

Bir Sony Bravia TV, Sky HD qutusu və bir Sony BT SoundBar olduğunu düşünsəniz, 1 düyməsini basın və televizorunuz BBC1 -ə keçəcək (kanal 101). 2 düyməsini basın və səs çubuğunuz səssiz qalacaq. Yenidən basın və səssiz olacaq.

İQ ötürmə ardıcıllığının icrası zamanı LED3, qulun məşğul olduğunu bildirəcək və LED1 İQ ötürmə prosesi ilə birlikdə yanıb -sönəcək.

Əlbəttə ki, yuxarıda göstərildiyi kimi eyni əyləncə sisteminiz yoxdursa, qulu 'IRrecvDumpV2.ino' ilə yenidən proqramlaşdıra, uzaqdan maraqlandığınız əmrlərin kodunu deşifr edə və sonra onları 'IR_Remote_Sim_Test.ino' proqramına daxil edə bilərsiniz. verilmiş ssenari.

Şəkil 2, Master və Slave arasındakı sistem səviyyəsində test proqramına ümumi baxışı göstərir.

Addım 6: Dizaynınızı kiçiltmək

Dizaynınızı kiçiltmək
Dizaynınızı kiçiltmək

Tamam, buna görə ev cihazlarınızı idarə etmək üçün iki Arduinoya güvəndiyinizə inandığınızı düşünsəniz, Arduino stokunuzdan ən səmərəli istifadə deyil. Nəticədə, yuxarıdakı şəkildə göstərilən dövrəni qurarsanız və ATMega328P -ni 'IR_Remote_Sim.ino' ilə proqramlaşdırmaq üçün buradakı təlimatları izləsəniz, bütün sistemi minimum komponentlərə endirə biləcəksiniz. Bu, dizaynınızı başqa bir sistemə yerləşdirməyə imkan verəcəkdir.

Addım 7: Nəticə

Nəticə
Nəticə
Nəticə
Nəticə

Həll sabitdir və yaxşı işləyir, artıq bir neçə həftədir ki, heç bir problem olmadan başqa bir sistemə daxil edilmişdir.

Arduino Uno R3'ü kifayət qədər operativ yaddaşa malik bir cihaz istədiyim üçün seçdim. 20 paketlik bir tampon ölçüsünə qərar verdim (MAX_SEQUENCES).

Hazırladığım Hybrid TX/RX qalxanı, Sony və Sky pultlarının deşifr edilməsi zamanı da çox lazımlı oldu. Zaman zaman proqram təminatını deşifr etmək üçün rəqəmsal əhatəmdən istifadə edərək etiraf etməli olsam da, IR komandanlığı IR -dən alınan ilə eyni idi (TSOP38328).

Fərqli şəkildə edəcəyim yeganə şey, Şəkil 2 -də yuxarıda göstərildiyi kimi IR led üçün sabit cərəyan sürücü dövrəsini istifadə etmək olardı.

Diqqət yetirməli bir məqam, bütün İQ ötürücülərinin 38KHz ilə modulyasiya edilməməsi, TSOP38328 38KHz üçün optimallaşdırılmışdır.

Addım 8: İstifadə olunan istinadlar

IRRemote.h

  • Müəllif: z3t0
  • Məqsəd: Arduino üçün infraqırmızı uzaq kitabxana: çoxlu protokollarla infraqırmızı siqnalları göndərin və qəbul edin
  • Kimdən:

IR Uzaqdan kitabxana

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

IR (İnfraqırmızı) Alıcı Sensor - TSOP38238 (ekvivalent)

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

Məlumat quruluşunun söz sərhədlərinə doldurulmasının qarşısını almaq üçün

  • 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

IR uzaq detallarının yaxşı mənbəyi

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

I2C

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

IR Uzaqdan Məlumat Bazası

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

BC337 məlumat cədvəli

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

1N4148 məlumat cədvəli

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

Tövsiyə: