İçindekiler:
- Adım 1: Devreye Kısa Bir Bakış
- 2. Adım: Yazılıma Kısa Bir Bakış
- Adım 3: I2C Paket İçeriği
- Adım 4: Uzaktan Kontrol Kodlarını Alma (ui32Data)
- Adım 5: I2C Slave Cihazınızı Test Etme
- Adım 6: Tasarımınızı Küçültün
- 7. Adım: Sonuç
- Adım 8: Kullanılan Referanslar
Video: Arduino İle I2C Kızılötesi Uzaktan Kumanda: 8 Adım (Resimli)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
ÖnsözBu Eğitilebilir Kitap, arabirim için I2C kullanarak evrensel bir uzaktan kumandanın nasıl oluşturulacağını ayrıntılarıyla anlatır.
Bir I2C bağımlı cihazı kullanarak ne kadar garip diyorsunuz?
Evet, bir I2C bağımlı cihazı.
Bunun nedeni, IR paketlerinin doğru zamanlamasının oldukça zorlu olması ve aynı anda birçok başka görevi yerine getiriyorsa, tipik bir Arduino ile mücadele etmesidir. Bilgi işlem yükünü, mümkün olduğunda özel işlemcilere zamanlama yoğun etkinlikler atayarak dağıtmak daha iyidir (yine de donanımda yapın). I2C'nin IC'ler arasında iyi belgelenmiş ve sağlam bir iletişim yöntemi olduğu göz önüne alındığında, bunu arayüz olarak seçtim.
Tanıtım
Yukarıda bahsedildiği gibi bu talimat, Arduino'daki IRremote kitaplığını kullanarak TV, DVD oynatıcı ve Uydu vb. gibi ev aletlerinin nasıl kontrol edileceğini açıklar.
Arduino'yu prototip test devresi (yukarıdaki resim 2) ile bir I2C bağımlı uzaktan kumanda modülüne (yukarıdaki resim 1) dönüştüren bir tasarım örneği ile sona erer ve tasarımınızı gerekli minimum bileşenlere nasıl küçültebileceğinizi ayrıntılarıyla anlatır. başka bir tasarıma gömülü. Benim durumumda bu gömülü cihazı bir ESP8266-12E temelli bir IoT Evrensel uzaktan kumanda cihazında kullanıyorum.
Hangi parçalara ihtiyacım var?
Adım 1'de (IR Verici) gösterilen devreyi kurmak için aşağıdaki parçalara ihtiyacınız olacak;
- 2 kapalı 10K direnç
- 1 kapalı 390R direnç
- 1 kapalı 33R direnç
- 1 kapalı 3K8 direnç
- 1 kapalı Kırmızı LED
- 1 kapalı IR Led TSAL6400
- 1 kapalı Transistör BC337
- 1 kapalı 220uF kapasitör
- 1 adet Arduino Uno
Adım 4'te (IR Alıcı) gösterilen devreyi kurmak için aşağıdaki parçalara ihtiyacınız olacak;
- 1 kapalı 10K direnç
- 1 kapalı TSOP38328
- 1 kapalı 220uF kapasitör
- 1 adet Arduino Uno
Adım 5'te (Slave test devresi) gösterilen devreyi kurmak için aşağıdaki parçalara ihtiyacınız olacak;
- 4 kapalı 10K direnç
- 2 kapalı 390R direnç
- 1 kapalı 33R direnç
- 1 kapalı 3K8 direnç
- 2 kapalı Kırmızı LED
- 1 kapalı IR Led TSAL6400
- 1 kapalı Transistör BC337
- 1 kapalı 220uF kapasitör
- 2 kapalı SPST Düğmesi
- 2 kapalı Arduino Unos
Adım 6'da (Shrink tasarım) gösterilen devreyi kurmak için aşağıdaki parçalara ihtiyacınız olacak;
- 3 kapalı 10K direnç
- 1 kapalı 270R direnç
- 1 kapalı 15R direnç
- 4 kapalı 1K direnç
- 1 kapalı Kırmızı LED
- 1 kapalı IR Led TSAL6400 veya TSAL5300
- 1 kapalı Transistör BC337
- 1 kapalı 220uF kapasitör elektrolitik @ 6.3v
- 1 kapalı 1000uF kapasitör elektrolitik @ 6.3v
- 2 kapalı 0.1 uF kapasitör
- 2 kapalı 22pF kapasitör
- 1 kapalı 16MHz Xtal
- 1 adet ATMega328P-PU
Not: ATMega328P'yi programlamak için ayrıca bir FTDI cihazına ihtiyacınız olacaktır.
Hangi becerilere ihtiyacım var?
- Minimum düzeyde elektronik bilgisi,
- Arduino ve IDE bilgisine sahip,
- Biraz sabır,
- I2C'yi biraz anlamak faydalı olacaktır (bazı genel I2C/Wire Library ayrıntıları için buraya bakın).
İşlenmiş konular
- Devreye kısa bir bakış,
- Yazılıma kısa bir bakış,
- I2C Paket içeriği,
- Uzaktan kumanda kodlarının (ui32Data) alınması,
- I2C Slave cihazınızı nasıl test edersiniz,
- Tasarımınızı küçültmek,
- Çözüm,
- Kullanılan referanslar.
sorumluluk reddi
Her zaman olduğu gibi, bu talimatları kendi sorumluluğunuzda kullanırsınız ve desteklenmezler.
Adım 1: Devreye Kısa Bir Bakış
Devrenin amacı IR uzaktan kumanda kodlarını iletmektir. Tasarımı oldukça yalındır ve oldukça basittir.
Transistör Q1 a BC337 NPN, Arduino PWM O/P D3'ten Direnç R5'e bir mantık yoluyla açıldığında, akım Ledler 1 ve 2'den geçer. Sadece sırasıyla balast dirençleri R3 ve R4 ile sınırlıdır. Q1, IR Diyottan (IF Max = 100mA) geçen akımı, Arduino O/P'nin ~40mA @ +5v besleme kapasitesini aşan bir seviyeye yükseltmek için kullanılır.
Kapasitör C1 a 220uF Elektrolitik, Led 1 ve 2 tarafından çekilen güç tarafından besleme rayının düşmesini önleyen bir miktar stabilizasyon sağlar.
Dirençler R1 ve R2, I2C pull up'larıdır.
2. Adım: Yazılıma Kısa Bir Bakış
önsöz
Bu kaynak kodunu başarılı bir şekilde derlemek için aşağıdaki ekstra kütüphaneye ihtiyacınız olacak;
IRremote.h
- Gönderen: z3t0
- Amaç: Arduino için kızılötesi uzak kütüphane: çoklu protokollerle kızılötesi sinyaller göndermek ve almak
- Kimden:
Kod Genel Bakış
Yukarıdaki resim 1'de gösterildiği gibi, başlatma sırasında kod, mikro denetleyici G/Ç'sini yapılandırır ve ardından dahili yazılım bayrağı 'bFreshDataFlag' durumunu sorgular. Bu bayrak ayarlandığında, kontrolör 'Meşgul' hattı olduğunu belirtir (veri pini D4 düşük gönderiliyor) ve 'eBUSY' durumuna geçer, uDataArray içinde tutulan düğmeye basın komutlarını sırayla okur ve IR modülasyonlu verileri IR LED'e gönderir. iletim sırası.
uDataArray içinde tutulan veriler tamamen gönderildikten sonra, 'eIDLE' durumu devam ettirilir ve 'Meşgul' satırı onaylanır (veri pimi D4 yüksek gönderiliyor). Cihaz artık iletim dizisinin sonunu işaret eden daha fazla düğmeye basmaya hazırdır.
IR düğmesi basın verilerinin alınması
Veriler, I2C aracılığıyla Kızılötesi uzaktan kumandaya gönderildiğinde, bir kesmeyi tetikler ve alıcıEvent() işlev çağrısı eşzamansız olarak tetiklenir.
Tetiklendikten sonra alınan I2C verileri sırayla 'uDataArray' arabelleğine yazılır.
Veri alımı sırasında, ana cihaz tarafından bir dizinin sonu bildirilirse (bFreshData!=0x00) 'bFreshDataFlag' ayarlanır, böylece iletim dizisinin başladığını bildirir.
Resimler 2…3, tipik bir paket dizisinin bir örneğini vermektedir.
Not: Tam kaynak kodu burada mevcuttur
Adım 3: I2C Paket İçeriği
I2C üzerinden slave'e gönderilen kontrol paketinin formatı yukarıda resim 1'de verilmiştir, her alanın anlamı aşağıda verilmiştir.
Kontrol paketi alanlarının anlamı
bayt bEncoding;
-
IR uzaktan kumanda kodlaması,
- RC6 (Gökyüzü) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
İkili IR veri akışının onaltılı gösterimi 4 Veri baytı (işaretsiz uzun), LSByte … MSByte
bayt bNumberOfBitsInTheData;
Verideki Bit Sayısı (Max 32). Aralık = 1 … 32
bayt bPulseTrainRepeats;
Bu darbe treninin kaç tekrarı. Aralık = 1 … 255. Tipik olarak 2…4 tekrar. Alıcı cihaz bazen bir açma sinyali almak için birkaç ekstra darbe dizisi tekrarı gerektirdiğinden, bunu Açma/Kapama komutları için genişletmek isteyebilirsiniz
byte bDelayBetweenPulseTrainRepeats;
Bu darbe dizisinin tekrarları arasındaki gecikme. Aralık = 1 … 255mS. Tipik olarak 22mS … 124mS
bayt bButtonRepeats;
Aynı düğmeye tekrar tekrar basılmasını simüle eder (ancak Apple uzaktan kumandası gibi değiştirilen kodu desteklemez, sadece düğme kodunu tekrarlar). Aralık = 1 … 256. Varsayılan = 1
uint16_t ui16DelayBetweenButtonRepeats;
Düğme tekrarları arasındaki gecikme (işaretsiz int). Toplamda 2 bayt LSByte… MSByte. Aralık = 1 … 65535mS. Varsayılan = 0mS
bayt bFreshData;
-
Taze veriler. Sıfır olmayan bir değer. En son yazılan, IR TX dizisini tetikler. Aralık 0x00…0xFF
- Daha fazla kontrol paketi gelecek = 0
- Bu son kontrol paketidir = Sıfırdan farklı değer 1, 2, … 255
'_packed_' derleyici yönergesinin kullanımına dikkat edin. Bu, kullanılan hedef sistemden (Uno, Due, ESP8266 vb.) bağımsız olarak verilerin bellekteki bayt için paket bayt olduğundan emin olmak içindir. Bu, registerAllocationType ve dataArrayType arasındaki birliğin, bir kontrol paketinden bayt cinsinden yalnızca sıralı olarak saat aşımına/saat hızına ihtiyacı olduğu anlamına gelir, bu da TX/RX yazılımını basitleştirir.
Adım 4: Uzaktan Kontrol Kodlarını Alma (ui32Data)
İlgili bir uzaktan kumanda anahtarı kodunu edinmenin üç yolu vardır;
- Osiloskop ile bit sayma yoluyla,
- Bir web sitesinde ara,
- Doğrudan yazılımdaki veri akışından kodunu çözün.
Kapsamlı bit sayma yoluyla
Bu, oldukça zaman aldığı ve potansiyel olarak birden fazla deneme gerektirdiği için verimli bir yöntem değildir, ancak oldukça doğru olabilir. Ayrıca, 2. ve 3. yöntemler kullanılarak elde edilen kodların görsel olarak doğrulanmasında ve ayrıca bir uzaktan kumandanın herhangi bir özelliğinin belirlenmesinde de yararlıdır. Örnek olarak, bir Apple IR uzaktan kumandasında bir düğmeyi basılı tutarken. Uzaktan kumanda başlangıçta bir komut dizisi yayınlayacak, ardından bunu tekrarlanan sıkıştırılmış 0xF dizisiyle takip edecektir.
Bir web sitesinde ara
Linux Kızılötesi Uzaktan Kontrol web sitesindeki uzaktan kontrol kodu veritabanı iyi bir kaynaktır.
Ancak dezavantajı, sizin için uygun olanı bulana kadar birkaç kod denemeniz gerekebilir. Ayrıca, kodların bazı temsillerini eşdeğer onaltılık biçimlerine dönüştürmek için yorumlamanız gerekebilir.
Doğrudan veri akışından kodunu çözün
IRremote kütüphane örneği 'IRrecvDumpV2.ino' ile bağlantılı olarak yukarıdaki resim 1'deki devreyi kullanarak, veri akışını doğrudan uzaktan kumandadan çözmek mümkündür. Resim 2, Arduino IDE terminal penceresinde bir açma/kapama düğmesine basmak için kodu çözülmüş bir Samsung TV uzaktan kumandasını göstermektedir.
Kombine Alıcı/Verici
Yukarıdaki 3 ve 4 numaralı resimler, kolay prototip oluşturmaya izin vermek için IR komutunun hem alınmasına hem de iletilmesine izin veren bir çözümü göstermektedir.
IR uzaktan kumanda düğmesine basışların kodunu çözmek için, IRremote kitaplığı ile birlikte gelen 'IRrecvDumpV2.ino' örneği ile Arduino'yu flaş etmeniz gerekecektir.
IR komutları varsa iletim için de eşit derecede iyi çalışır. Cihazın çalıştığına dair görsel bir gösterge olarak kırmızı bir led dahildir.
Adım 5: I2C Slave Cihazınızı Test Etme
Buradaki kaynak kodunu ve yukarıda resim 1'de özetlenen devreyi kullanarak, 'Master' Arduino'yu 'IR_Remote_Sim_Test.ino' ve 'Slave' Arduino'yu 'IR_Remote_Sim.ino' ile programlayın.
Bir Sony Bravia TV'niz, Sky HD kutunuz ve bir Sony BT SoundBar'ınız olduğunu varsayarsak, 1 düğmesine bastığınızda TV'niz BBC1'e (kanal 101) geçecektir. 2 düğmesine basın, ses çubuğunuz sessize alınacaktır. Tekrar basın ve sesi açacaktır.
Kızılötesi iletim dizisinin yürütülmesi sırasında, bağımlı birimin meşgul olduğunu belirten LED3 yanacak ve LED1, kızılötesi iletim işlemiyle birlikte yanıp sönecektir.
Tabii ki, yukarıdakiyle aynı eğlence sistemi kurulumuna sahip değilseniz, slave'i 'IRrecvDumpV2.ino' ile yeniden programlayabilir, ilgilendiğiniz uzaktan kumanda komutlarının kodunu çözebilir ve ardından bunları sizin için 'IR_Remote_Sim_Test.ino'ya programlayabilirsiniz. verilen senaryo.
Resim 2, Master ve Slave arasındaki sistem seviyesi test yazılımına genel bakışı gösterir.
Adım 6: Tasarımınızı Küçültün
Tamam, ev cihazlarınızı kontrol etmek için iki Arduino'ya güvenerek bu talimatı takip ettiğinizi varsayarsak, Arduino stoğunuzun en verimli kullanımı değildir. Sonuç olarak, yukarıdaki resimde gösterilen devreyi kurarsanız ve ATMega328P'yi 'IR_Remote_Sim.ino' ile programlamak için buradaki talimatları takip ederseniz, tüm sistemi minimum bileşenlere indirgeyebileceksiniz. Bu, tasarımınızı başka bir sisteme yerleştirmenize izin verecektir.
7. Adım: Sonuç
Çözüm kararlı ve iyi çalışıyor, birkaç haftadır herhangi bir sorun olmadan başka bir sisteme yerleştirildi.
Arduino Uno R3'ü, makul derinlikte bir düğme arabelleğine sahip olabileceğim kadar yeterli RAM'e sahip bir cihaz istediğim için seçtim. 20 paketlik bir arabellek boyutuna karar verdim (MAX_SEQUENCES).
Yaptığım Hybrid TX/RX kalkanı, Sony ve Sky uzaktan kumandalarının kodunu çözerken de çok kullanışlı oldu. Zaman zaman dijital kapsamımı kullanarak yazılımın kodu çözülmüş IR komutunun, alınan IR'den gelenle aynı olduğunu (TSOP38328) kontrol etmem gerektiğini itiraf etmem gerekiyor.
Farklı bir şekilde yapacağım tek şey, yukarıda resim 2'de gösterildiği gibi IR led için sabit akım sürücü devresini kullanmak olurdu.
Unutulmaması gereken bir diğer nokta, tüm IR vericileri 38KHz ile modüle edilmemiştir, TSOP38328 38KHz için optimize edilmiştir.
Adım 8: Kullanılan Referanslar
IRUzaktan.h
- Gönderen: z3t0
- Amaç: Arduino için kızılötesi uzak kütüphane: çoklu protokollerle kızılötesi sinyaller göndermek ve almak
- Kimden:
IR Uzak kitaplığı
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IR (Kızılötesi) Alıcı Sensör - TSOP38238 (eşdeğer)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Kelime sınırlarına veri yapısı dolgusunu önlemek için
- 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 uzak ayrıntıları için iyi bir kaynak
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR Uzaktan Kumanda Veritabanı
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
BC337 Veri Sayfası
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
1N4148 Veri Sayfası
https://www.vishay.com/docs/81857/1n4148.pdf
ATMega328P-PU Veri Sayfası
Önerilen:
Shadow Light Box - Arduino ile IR Uzaktan Kumanda ile Kontrol: 8 Adım (Resimlerle)
Gölge Işık Kutusu - Arduino ile IR Uzaktan Kumanda ile Kontrol: Bu talimat, bir sonraki Noel için gölge ışık kutusunun nasıl yapılacağına rehberlik edecektir. Kendi odanızı dekore edebilir veya arkadaşınıza hediye olarak yapabilirsiniz. Bu gölge kutusu, Kırmızı, Mavi, Yeşil renklerle karıştırarak çeşitli renkler yapabilir
IRduino: Arduino Uzaktan Kumanda - Kayıp Bir Uzaktan Kumandayı Taklit Etme: 6 Adım
IRduino: Arduino Uzaktan Kumanda - Kayıp Bir Uzaktan Kumandayı Taklit Edin: TV veya DVD oynatıcınızın uzaktan kumandasını kaybettiyseniz, cihazın üzerindeki düğmeleri yürümek, bulmak ve kullanmak zorunda olmanın ne kadar sinir bozucu olduğunu bilirsiniz. Bazen bu düğmeler, uzaktan kumandayla aynı işlevi bile sunmaz.
Raspberry Pi Herhangi Bir Uzaktan Kumanda İle Açılır/Kapatılır: 3 Adım (Resimli)
Raspberry Pi Herhangi Bir Uzaktan Kumandayla Açma/Kapama: Raspberry Pi'ye giden gücü bir IR uzaktan kumanda ile kontrol etme
TSOP4838 Kullanan Kızılötesi Uzaktan Kumanda Test Cihazı: 5 Adım
TSOP4838 Kullanan Kızılötesi Uzaktan Kumanda Test Cihazı: Basit bir uzaktan kumanda test cihazı devresinin nasıl oluşturulacağı aşağıda açıklanmıştır. Aşağıdaki adımları takip edin ve 5 Dakikadan kısa sürede tamamlayın. İşe yararsa, lütfen videomuzu beğenip yorumlarda bize bildirin
Arduino ile Kızılötesi Uzaktan Kumanda ve IR Alıcısı (TSOP1738): 10 Adım
Arduino ile Kızılötesi Uzaktan Kumanda ve IR Alıcısı (TSOP1738): Bu talimat, Arduino'ya yeni başlayanlar içindir. Bu, Arduino ile daha önceki projelerimden biri. Ben yaparken çok keyif aldım umarım sizde beğenirsiniz. Bu projenin en çekici özelliği, “Kablosuz kontrol”. Ve bu