Arduino için evrensel uzaktan kumanda. Arduino kullanarak kızılötesi aralıktaki verileri aktarma Kızılötesi alıcıyı arduino'ya bağlama

İnternette Arduino kullanarak kendi TV uzaktan kumandanızı nasıl yapacağınızla ilgili birçok makale var, ancak TV'mi ve medya oynatıcımı kontrol etmek için evrensel bir uzaktan kumandaya ihtiyacım vardı. Evrensel uzaktan kumandamın en büyük avantajı Android telefon uygulamasındaki tuşların çift amaçlı olmasıdır ama videoya bakın.



Uzaktan kumanda, TV'yi ve oynatıcıyı kontrol etmek için ekrandaki hemen hemen aynı düğmelerin kullanılması nedeniyle çok kullanışlıdır. Bir fark şu ki " AV"TV kontrol modunda bir düğmeye dönüşür" " (dur) oynatıcı kontrol moduna geçerken. Resimler iki modu gösterir; solda TV kontrol modu, sağda oynatıcı kontrol modu.

Şimdi size böyle bir uzaktan kumandanın yaratılmasından biraz bahsedeceğim. Cihaz için ERGO TV'nin uzaktan kumandasını ve DUNE HD TV101W medya oynatıcının uzaktan kumandasını kullandım.

Uzaktan kumandalardan veri almak için, 38 kHz çalışma frekansında TSOP1138 kızılötesi sensörünü (TSOP4838'e benzer) kullandım ve şemaya göre Arduino kartına bağladım:

Veri iletiminin kodlamasını belirlemek ve uzaktan kumanda düğmelerinin kodunu okumak için bu çizime gerek kalmayacaktır.

int RECV_PIN = 11 satırındaki çizimde; 4 numaralı pin numaramızı belirtin

Çizimi yükledikten sonra “port monitörünü” açın ve uzaktan kumanda düğmelerine basarak alınan verilere bakın.

Resimde TV uzaktan kumandasındaki ve oynatıcının uzaktan kumandasındaki güç düğmesinin taranmasına ilişkin bir örnek gösterilmektedir. Şimdi buton kodları için bir tablo oluşturuyoruz.

Yukarıdaki fotoğraftaki gibi aldım. Yazıtın altında televizyon TV uzaktan kumanda düğme kodları; yazıtın altında oyuncu- medya oynatıcının uzaktan kumandasındaki kodlar.

Şimdi kızılötesi sinyal alıcımızı Arduino kartından ayırıp HC-05 Bluetooth modülünü ve kızılötesi LED'i fotoğraftaki şemaya göre bağlıyoruz.

Bundan sonra doğrudan taslağa geçiyoruz.

Eskiz

#katmak IRgönder gönder; int y = 1; void setup() ( Serial.begin(9600); ) void loop() ( if (Serial.available() > 0) ( int x = Serial.read(); if (x == 49) ( y = 1; ) if (x == 50) ( y = 2; ) if (y == 1) ( // TV kumandası tuş kodları if (x == 97) ( irsend.sendNEC(0x807F08F7, 32); gecikme(40) ); ) if (x == 98) ( irsend.sendNEC(0x807FA857, 32); gecikme(40); ) if (x == 99) ( irsend.sendNEC(0x807F708F, 32); gecikme(40); ) if (x == 100) ( irsend.sendNEC(0x807FF00F, 32); gecikme(40); ) if (x == 101) ( irsend.sendNEC(0x807F30CF, 32); gecikme(40); ) if (x == 102) ( irsend.sendNEC(0x807FB04F, 32); gecikme(40); ) if (x == 103) ( irsend.sendNEC(0x807F9867, 32); gecikme(40); ) if (x == 104) ( irsend .sendNEC(0x807F58A7, 32); gecikme(40); ) if (x == 105) ( irsend.sendNEC(0x807FD827, 32); gecikme(40); ) if (x == 106) ( irsen.sendNEC(0x807F38C7) , 32); gecikme(40); ) if (x == 107) ( irsend.sendNEC(0x807F48B7, 32); gecikme(40); ) if (x == 108) ( irsend.sendNEC(0x807FB847, 32); gecikme(40); ) if (x == 109) ( irsend.sendNEC(0x807F6897, 32); gecikme(40); ) ) if (y == 2) ( //medya oynatıcı uzaktan kumanda tuşlarının kodları if (x == 97) ( irsend.sendNEC(0xFDC23D, 32); gecikme(40); ) if (x == 98) ( irsend.sendNEC(0xFDE01F, 32); gecikme(40); ) if (x == 99) ( irsend.sendNEC(0xFD18E7, 32); gecikme(40); ) if (x == 100) ( irsend.sendNEC (0xFDE817, 32); gecikme(40); ) if (x == 101) ( irsend.sendNEC(0xFDA857, 32); gecikme(40); ) if (x == 102) ( irsend.sendNEC(0xFD6897, 32) ); gecikme (40); ) if (x == 103) ( irsesend.sendNEC(0xFDA857, 32); gecikme(40); ) if (x == 104) ( irsend.sendNEC(0xFD6897, 32); gecikme( 40); ) if (x == 105) ( irsend.sendNEC(0xFDE817, 32); gecikme(40); ) if (x == 106) ( irsend.sendNEC(0xFD18E7, 32); gecikme(40); ) if (x == 107) ( irsend.sendNEC(0xFD9867, 32); gecikme(40); ) if (x == 108) ( irsend.sendNEC(0xFD28D7, 32); gecikme(40); ) if (x = = 109) ( irsend.sendNEC(0xFD20DF, 32); gecikme(40); ) )) )


Çizimde düğme kodlarını, yani satırlarda düzenlemeniz gerekecektir:

If (x == 97) ( irsend.sendNEC(0x807F08F7, 32); gecikme(40);
807F08F7 değerini şu şekilde değiştirin:

If (y == 1) ( //TV uzaktan kumandasının tuş kodları if (x == 97) ( irsend.sendNEC(0x12345678, 32); gecikme(40); )
Düğmenizin kodu 12345678'dir.

Buton kodlarınızı kullanarak taslağı düzenledikten sonra taslağı Arduino kartına yükleyin ve uygulamayı telefonunuza yüklemeye devam edin.

Telefonda Bluetooth'u açıyoruz, cihazımızı arıyoruz, bir çift oluşturuyoruz ve ardından uygulamayı başlatıyoruz Nabız telefonda.

Başlangıçta, sağ alt köşede, cihazımıza bağlı olmadığımızı gösteren kırmızı bir bluetooth simgesi bulunan bir ekranımız olacak.

Bundan sonra bu simgeye tıklayın. Bağlanmak için cihazımızı seçtiğimiz, mevcut tüm bluetooth cihazlarının listesini içeren bir pencere görmeliyiz.

Artık ana ekrana geri döndük ve TV'yi zaten kontrol edebiliyoruz:

Kontrol moduna geçmek için etiketli düğmeye basmamız gerekiyor. "Oyuncu". Daha önce de söylediğim gibi "AV" etiketli butonumuz bir butona dönüşecek" ":

Cihazımızdan bağlantıyı kesmek için “Güç” düğmesini birkaç saniye basılı tutmanız yeterlidir.

Bitmiş cihazımın birkaç fotoğrafı.

Oldukça iyi çıktı, öyle görünüyor. Yazıya yorum bekliyorum.

IR LED'e kodlanmış ve modüle edilmiş bir veri paketi gönderir ve düğme basılı tutulduğunda paketleri tekrarlar.

  • IR LED'den gelen görünmez kızılötesi ışık, Trima IR alıcı modülüne çarpar ve burada demodüle edilmiş elektrik darbelerine dönüştürülür.
  • iarduino_IR kütüphanesi, IR alıcısından gelen darbeleri sürekli olarak okur ve kodunu çözer (ikinci Arduino donanım zamanlayıcısını kullanarak)
  • Döngü kodunda, kitaplık tarafından kodu çözülen verileri cihaza (lamba) atananlarla kontrol ediyoruz ve eşleşiyorsa Trema modülü Katı Hal girişindeki durumu (“1”/“0”) değiştiriyoruz Röle bu nedenle cihazı (lambayı) açar veya kapatır.
  • Odadaki aydınlatmayı kontrol etmek için televizyonun uzaktan kumandasındaki kullanılmayan düğmeleri (örneğin, renkli teletekst düğmeleri) atarsanız cihaz yararlı olabilir.

    Akkor lambalar yerine, 2 A'e kadar akım tüketimi olan herhangi bir ~220 V ağ cihazını bağlayabilirsiniz.

    İhtiyacımız olacak:

    • IR uzaktan kumanda x 1 adet (herhangi bir TV IR uzaktan kumandası işe yarar)
    • Kontrol edeceğimiz cihazlar (lambalar) x 3 adet.

    Projeyi uygulamak için kütüphaneyi kurmamız gerekiyor:

    • IR alıcı-vericileriyle çalışmak için iarduino_IR kütüphanesi
      ÖNEMLİ: kitaplık ikinci bir donanım zamanlayıcısı kullanır,
      PWM SİNYALLERİNİ 3 VEYA 11 ÇIKIŞA ÇIKARMAYIN!

    Kütüphanelerin nasıl kurulacağını Wiki sayfasından öğrenebilirsiniz - Arduino IDE'ye kütüphanelerin kurulumu.

    Video:

    Bağlantı şeması:

    Bu devre yalnızca dijital modüller kullanır; herhangi bir (hem dijital hem de analog) Arduino pinine bağlanabilirler. Örneğin tüm modülleri analog çıkışlara bağladık. Herkes, Arduino analog pinlerinin normal dijital pinler gibi çalışabileceğini ve dijital sinyalleri mantıksal "0" ve "1" biçiminde almanıza (bir IR alıcısından) ve iletmenize (katı hal rölelerine) izin verebileceğini bilmiyor.

    Cihazları diğer pinlere bağlayacaksanız, çizimin ikinci (IR nesne bildirimi) ve üçüncü (pinRelay dizisi bildirimi) satırlarında bunların numaraları belirtilmelidir. Program kodu, basitçe çizimin üçüncü satırındaki pin numaralarını listeleyerek (pinRelay dizisi bildirimi) Arduino'nuzdaki boş pinler kadar çok sayıda röle bağlayabilmeniz için yazılmıştır.

    Çalışma algoritması:

    • Başlangıçta, çizim IR uzaktan kumanda düğmesi kodunu her bir katı hal rölesine sırayla atar. İlk olarak, LED yanıp söner ve çıkışı ilk önce gösterilen katı hal rölesinin devresi kapatılır. IR uzaktan kumandada herhangi bir düğmeye basarsanız, o düğmenin kodu o röleye atanacak ve bir sonraki yanıp sönmeye başlayacak ve bu, IR uzaktan kumandadaki tüm rölelere düğmeler atanana kadar devam edecek.
    • Randevudan sonraDüğme işlevleri, tüm röleler kapalı. IR uzaktan kumanda butonuna basarsanız bu butonun kodunun atandığı röle açılacaktır. Belirtilen düğmeye tekrar basarsanız röle kapanacaktır. Herhangi bir röleye kodu atanmamış tuşlara basıldığında cihaz cevap vermeyecektir.
    • Eğer Her başlangıçta düğme kodları atamak istemiyorsanız varRelay dizisini bildirirken bunları açıkça belirtin ve kurulum kodundan for ve while döngülerini kaldırın.
    • Her düğmenin kodunu öğreninşu satırı yazabilirsiniz: if(IR.check())(Serial.println(IR.data);)

    Program kodu:

    #katmak // kütüphaneyi IR alıcısıyla çalışacak şekilde bağlayın iarduino_IR_RX IR(A5); // IR alıcısıyla çalışmak için bir IR nesnesi tanımlayın (IR alıcısının bağlı olduğu herhangi bir pini belirterek) const uint8_t pinRelay = (A1,A2,A3); // katı hal rölelerinin bağlı olduğu herhangi bir pinin (dijital veya analog) sayısını gösteren bir dizi tanımlayın const uint8_t allRelay = sizeof(pinRelay); // pinRelay dizisindeki öğe sayısını (röle sayısı) ileterek bir sabit tanımlayın uint32_t varRelay; // röleler de dahil olmak üzere IR alıcısının kodlarını (komutlarını) içeren bir dizi bildirin bool modRelay; // röle durumlarını içeren bir dizi tanımlayın uint8_t setRelay; // IR alıcısından gelen komutun yazıldığı röle sayısını içeren bir değişken tanımlayın void setup())( IR.begin(); // IR alıcı-vericisi ile çalışmayı for(uint8_t i=0; i) başlatın IR Alıcı modülü, IR uzaktan kumandayla birlikte, Arduino kartının uzaktan kontrolünü kolayca uygulamanıza olanak tanır.

    Üreticinin önerdiği kablo demetinin karta takılı olduğu bir VS1838B IR alıcısından başka bir şey değildir.

    Bu modülle kutudan çıktığı gibi çalışmak için 38 kHz frekanslı bir uzaktan kumandaya ihtiyacınız vardır.

    Bu kartın avantajı, IR alıcısını lehimleme gerektirmeden projeniz için gereken frekansta çalışan başka bir alıcıyla değiştirmenize olanak tanıyan itmeli konektördür.

    Ana teknik özellikler:

    Besleme voltajı: 2,7 - 5,5V

    Modülasyon frekansı: 38kHz

    Sıcaklık aralığı: - 20 ... + 80°C

    Arayüz: Dijital

    Arduino'ya bağlanma

    Modül üç pimli 2,54 mm konektörle donatılmıştır

    : GND pinine bağlanır

    : +5V çıkışa bağlanır

    : dijital pin'e bağlanır (örnekte D2)

    Arduino ortamında çalışmaya bir örnek

    Bu modülle çalışmak için IRRemote kütüphanesini kurmanız gerekir.

    İndirin, paketini açın ve Arduino klasöründeki kütüphaneler klasörüne koyun. Kütüphane eklendiğinde Arduino IDE açıksa ortamı yeniden başlatın.

    Uzaktan kumanda düğmelerini okuma

    Uzaktan kumanda okumalarını okumak için aşağıdaki çizimi doldurun. Basılan düğmelerin kodlamasını bağlantı noktasına aktaracaktır.

    Örnek olarak resimdeki gibi uzaktan kumandayı kullanacağız çünkü Bu tip uzaktan kumanda sete dahildir

    Çeşitli uzaktan kumandaların çalışma mantığındaki farklılıkları, topluluğumuzun bir üyesinden takma adla yazdığı orijinal makalede okuyabilirsiniz.

    Basit kod:

    #katmak int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); //Belirli bir porttan sinyal almak için bir nesne yaratıyoruz decode_results sonuçları; //Sonucu saklayan değişken geçersiz kurmak () { Seri // Almayı başlat) geçersiz döngü() ( if (irrecv.decode(&sonuçlar)) //Sinyal alındığında... { Seri.println(sonuçlar.değer); //...değerinin seri porta çıktısı irrecv.resume(); ))

    Bağlantı noktası monitöründe aşağıdakileri görmelisiniz:

    Her düğmeyi neredeyse bir saniye basılı tuttuğumuzda yaklaşık 10 kod elde ediyoruz. Bunlardan ilki düğme kodudur. Ve bundan sonra, düğmenin takılı kaldığını bildiren standart bir kod görünmeye başlar.

    Arduino kartını uzaktan kumandayla kontrol etme

    Arduino kartı (D13) üzerindeki LED'in ilk buton kodlandığında yanmasını, ikinci buton kodlandığında ise sönmesini sağlayalım.

    Basit kod:

    // Arduino IDE 1.0.3'te test edildi#katmak int RECV_PIN = 2; int LED = 13; IRrecv irrecv(RECV_PIN); decode_results sonuçları; geçersiz kurmak () { Seri.begin(9600); irrecv.enableIRIn(); // Alıcıyı başlat pinMode(LED, ÇIKIŞ); ) geçersiz döngü() ( if (irrecv.decode(&sonuçlar)) ( Seri.println(sonuçlar.değer); if (sonuçlar.değer == 16769565) // Kodlama 1 alınırken( digitalWrite(LED, YÜKSEK); // LED'i aç) if (sonuçlar.değer == 16761405) // Kodlama 2 alınırken( digitalWrite(LED, DÜŞÜK); // LED'i kapat) irrecv.resume(); // Sonraki değeri al } }

    Herkese iyi günler (veya dilediğiniz gibi geceler), lirik bir girişle başlayalım. Günümüzde birçok insanın evi var Uzaktan kumandalı TV, tuner, DVD oynatıcı . Pek çok insan (ve aile), ev hayatını ellerinde bir uzaktan kumanda olmadan hayal edemez. Katılıyorum - ev aletlerinin ustası olmak ve her an bu donanım parçalarına iradenizi dikte etmek ne kadar harika. Bu yazımızda uzaktan kumanda teknolojisini daha derinlemesine ele almak ve ihtiyaçlarımıza yönelik bazı uygulama örnekleri vermek istiyoruz.

    Peki deneyimizin bileşenleri olarak neye ihtiyacımız var? Bir seçenek olarak hazır IR uzaktan kumanda ve IR alıcı modülleri satılmaktadır. Ama bekleyip para ödemek istemiyoruz, bu yüzden daha sert davranacağız. Kaynağı bilinmeyen bir uzaktan kumandayı temel alalım, ayrıca üzerine kızılötesi bir alıcının lehimlendiği Çin tunerinden bir tahta parçamız da var. Aşağıdaki fotoğrafta bu bileşenleri görebilirsiniz. Dürüst olmak gerekirse, uzaktan kumanda ofis masasındaki gereksiz çöpler arasında bulundu ve IR alıcısının bulunduğu kart en yakın radyo tamirhanesinden alındı.

    Peki o zaman, dediğim gibi Hannibal - "Kartaca'ya İleri" . Sadece alıcının lehimini çözüp panoya bağlamamız gerekiyor arduino aşağıdaki şemaya göre...

    • IR alıcısının bağlanması

    IR alıcısı Levhadan lehimlenen herhangi bir işarete sahip değil, sadece binlercesi üretilmiş, bilinmeyen başka bir Çin radyo bileşenidir. Kısacası şunu söyleyebiliriz: tek bir binada birleşiyorfotodiyot, ön amplifikatör ve sürücü . Çıkış normal bir şekilde oluşturulurTTL sinyali dolgusuz, mikrokontrolör tarafından daha ileri işlemlere uygun. Taşıyıcı frekansı muhtemelen (!) 36 kHz'dir, ancak şimdi bu o kadar önemli değil... Hadi onu panele bağlamayı deneyelim.arduino koşullu diyagram bu cihazın istenen pin çıkışını verecektir. Aşağıdaki şemada kırmızı renkle vurgulanan, bizimkinin yapıldığı vücudun şeklidirIR alıcısı , yeşil renkle vurgulanmıştır - panele bağlı olduğu pin çıkışıarduino .

    Dikkat!!! İnternette böyle bir paketteki (TSOP) cihazlar için birçok pin şeması vardır. Bu makalede verilen pin şemaları internette bulunanlarla örtüşmeyebilir, ancak her şey bizimle bu şekilde bağlantılıdır. IR alıcısı bağlandığında ısınmaya başlarsa, monte edilen devreyi derhal kapatın; bu, bağlantı pin şemasının gerçek pin çıkışına karşılık gelmediği ve onu neredeyse rastgele seçmeniz gerekeceği anlamına gelir. Biz de tam olarak bunu yaptık çünkü internette bulunan devreler IR alıcımıza uygun değildi. Burada genel olarak asıl mesele Arduino kartını yakmamak, dikkatli ilerleyin!!!

    • IRuzaktan kütüphane

    Yani her şey birbiriyle bağlantılı. Uzaktan kumandadan kodları okumak için bir kütüphane var IRuzak.h, onun yardımıyla uzaktan kumandamızı veya daha doğrusu düğme kodlarını inceleyeceğiz. Gelecekte okunan kodları kendi amaçlarımız için kullanacağız. Bu kütüphanenin örneklerinde buton kodlarının okunacağı taslak sunulmuştur, buna denir IRrecvDemo. Dikkat!!! Taslağı derlerken hata veriyor, başlangıçta iki eklenti kütüphanesi daha eklemeniz gerekiyor:

    #include "boarddefs.h" //Ek kütüphane #include "IRremote.h" #include "IRremoteInt.h" //Ek kütüphane int RECV_PIN = 2; //IR alıcısından gelen çıkış sinyalini bağlamak için pin //IRrecv sınıfının bir örneğini oluşturun, IR alıcısından gelen sinyali bağlamak için pini IRrecv irrecv(RECV_PIN) parametresi olarak iletin; decode_results sonuçları; //Basılan düğmenin alınan kodunu kaydetmek için değişken void setup() ( Serial.begin(9600); irrecv.enableIRIn(); //IR alıcısının çalışmasını etkinleştirme ) void loop() ( if (irrecv.decode( &results)) //Bir olay meydana gelirse/düğmeye basıldıysa ( Serial.println(results.value, HEX); //Basılan düğmenin kodunu onaltılık biçimde port monitörü irrecv.resume()'a çıktılayın; // Sonraki değeri oku/düğme ) gecikme(100 ); )

    Kroki panoya yüklendikten sonraarduino(kullanırız Arduino Nano'su kalkanın üzerinde Nano için G/Ç Kablosuz Kalkanı ), açılabilir bağlantı noktası monitörü ve uzaktan kumandadaki tuşlara bastığınızda hangi kodların göründüğünü görün. Çizimin sonucu aşağıdaki ekran görüntüsünde gösterilmektedir:

    Bu arada, bağlantı noktası monitörü Kanıtlanmış yazılımımızı kullanıyoruz, eğer ilgilenen varsa makaleyi okuyabilir ve Serial Monitor Pro'yu indirebilirsiniz.

    #define KEY_ONOFF 0x807F807F //Açma/Kapama düğmesi #define KEY_MUTE 0x807F48B7 //Sessiz düğmesi #define KEY_1 0x807F00FF //Düğme 1 #define KEY_2 0x807FE01F //Düğme 2 #define KEY_3 0x807F609F //K düğmesi 3 #define KEY_4 0x807F20DF //Düğme 4 #define KEY_5 0x807FD02F //Button 5 #define KEY_6 0x807F50AF //Button 6 #define KEY_7 0x807F10EF //Button 7 #define KEY_8 0x807FF00F //Button 8 #define KEY_9 0x807F708F //Button 9 #define KEY_0 0x807FC837 //Düğme 0

    Ve şimdi, genel olarak, son test için her şey hazır - bu, röle modüllerinin açılıp kapanmasını kontrol etmeye yönelik temel bir test olacak. İşte küçük bir görev:

    • İki röle modülü kullanıyoruz
    • 1 numaralı röleyi uzaktan kumandanın “1” düğmesine bağlarız
    • 2 numaralı röle uzaktan kumandanın “2” düğmesine bağlıdır
    • Röle modüllerinden herhangi birinin açılması, atandığı düğmeye basılarak yapılır.
    • Röle modüllerinden herhangi birinin kapatılması, atandığı düğmeye basılarak da yapılır.
    • Açma/Kapama düğmesine basmak her iki röle modülünü de koşulsuz olarak kapatır (eğer açıksa veya içlerinden biri açıksa)

    Yukarıdaki görevi uygulayan bir çizim:

    #include "boarddefs.h" //Ek kütüphane #include "IRremote.h" #include "IRremoteInt.h" //Ek kütüphane #define KEY_ONOFF 0x807F807F //Açma/Kapama düğmesi #define KEY_1 0x807F00FF //Button 1 #define KEY_2 0x807FE01F //Buton 2 #define RELOUT1 3 //Röle 1 için çıkış portu #define RELOUT2 4 //Röle 2 için çıkış portu int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results sonuçları; statik boole REL1_ONOFF = yanlış; statik boole REL2_ONOFF = yanlış; void setup() ( pinMode(RELOUT1, OUTPUT); pinMode(RELOUT2, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // Alıcıyı başlatın) void loop() ( if (irrecv.decode(&results) )) ( switch(sonuçlar.değer) ( case(KEY_ONOFF): REL1_ONOFF = false; REL2_ONOFF = false; break; case(KEY_1): if(REL1_ONOFF) REL1_ONOFF = false; else REL1_ONOFF = true; break; case(KEY_2) ): if(REL2_ONOFF) REL2_ONOFF = yanlış; else REL2_ONOFF = doğru; ara; ) irrecv.resume(); ) digitalWrite(RELOUT1, REL1_ONOFF); digitalWrite(RELOUT2, REL2_ONOFF); gecikme(100); )

    Ve makalenin sonunda her iki eskizin çalışmasını gösteren bir video var. Arzu ederseniz ve yaratıcı hayal gücünüz varsa, eklenti filosunu genişletebilir ve her şeyi daha gelişmiş bir şekilde yönetebilirsiniz. Yazımızda bu teknolojinin kullanımına dair temel bir örnek vermeye çalıştık. İlginiz için teşekkür ederiz ve izlemenin tadını çıkarın!!!

    Yorumların çalışması için lütfen javascript'i etkinleştirin.

    İnternette Arduino kullanarak kendi TV uzaktan kumandanızı nasıl yapacağınızla ilgili birçok makale var, ancak TV'mi ve medya oynatıcımı kontrol etmek için evrensel bir uzaktan kumandaya ihtiyacım vardı. Evrensel uzaktan kumandamın en büyük avantajı Android telefon uygulamasındaki tuşların çift amaçlı olmasıdır ama videoya bakın.



    Uzaktan kumanda, TV'yi ve oynatıcıyı kontrol etmek için ekrandaki hemen hemen aynı düğmelerin kullanılması nedeniyle çok kullanışlıdır. Bir fark şu ki " AV"TV kontrol modunda bir düğmeye dönüşür" " (dur) oynatıcı kontrol moduna geçerken. Resimler iki modu gösterir; solda TV kontrol modu, sağda oynatıcı kontrol modu.

    Şimdi size böyle bir uzaktan kumandanın yaratılmasından biraz bahsedeceğim. Cihaz için ERGO TV'nin uzaktan kumandasını ve DUNE HD TV101W medya oynatıcının uzaktan kumandasını kullandım.

    Uzaktan kumandalardan veri almak için, 38 kHz çalışma frekansında TSOP1138 kızılötesi sensörünü (TSOP4838'e benzer) kullandım ve şemaya göre Arduino kartına bağladım:

    Veri iletiminin kodlamasını belirlemek ve uzaktan kumanda düğmelerinin kodunu okumak için bu çizime gerek kalmayacaktır.

    int RECV_PIN = 11 satırındaki çizimde; 4 numaralı pin numaramızı belirtin

    Çizimi yükledikten sonra “port monitörünü” açın ve uzaktan kumanda düğmelerine basarak alınan verilere bakın.

    Resimde TV uzaktan kumandasındaki ve oynatıcının uzaktan kumandasındaki güç düğmesinin taranmasına ilişkin bir örnek gösterilmektedir. Şimdi buton kodları için bir tablo oluşturuyoruz.

    Yukarıdaki fotoğraftaki gibi aldım. Yazıtın altında televizyon TV uzaktan kumanda düğme kodları; yazıtın altında oyuncu- medya oynatıcının uzaktan kumandasındaki kodlar.

    Şimdi kızılötesi sinyal alıcımızı Arduino kartından ayırıp HC-05 Bluetooth modülünü ve kızılötesi LED'i fotoğraftaki şemaya göre bağlıyoruz.

    Bundan sonra doğrudan taslağa geçiyoruz.

    Eskiz

    #katmak IRgönder gönder; int y = 1; void setup() ( Serial.begin(9600); ) void loop() ( if (Serial.available() > 0) ( int x = Serial.read(); if (x == 49) ( y = 1; ) if (x == 50) ( y = 2; ) if (y == 1) ( // TV kumandası tuş kodları if (x == 97) ( irsend.sendNEC(0x807F08F7, 32); gecikme(40) ); ) if (x == 98) ( irsend.sendNEC(0x807FA857, 32); gecikme(40); ) if (x == 99) ( irsend.sendNEC(0x807F708F, 32); gecikme(40); ) if (x == 100) ( irsend.sendNEC(0x807FF00F, 32); gecikme(40); ) if (x == 101) ( irsend.sendNEC(0x807F30CF, 32); gecikme(40); ) if (x == 102) ( irsend.sendNEC(0x807FB04F, 32); gecikme(40); ) if (x == 103) ( irsend.sendNEC(0x807F9867, 32); gecikme(40); ) if (x == 104) ( irsend .sendNEC(0x807F58A7, 32); gecikme(40); ) if (x == 105) ( irsend.sendNEC(0x807FD827, 32); gecikme(40); ) if (x == 106) ( irsen.sendNEC(0x807F38C7) , 32); gecikme(40); ) if (x == 107) ( irsend.sendNEC(0x807F48B7, 32); gecikme(40); ) if (x == 108) ( irsend.sendNEC(0x807FB847, 32); gecikme(40); ) if (x == 109) ( irsend.sendNEC(0x807F6897, 32); gecikme(40); ) ) if (y == 2) ( //medya oynatıcı uzaktan kumanda tuşlarının kodları if (x == 97) ( irsend.sendNEC(0xFDC23D, 32); gecikme(40); ) if (x == 98) ( irsend.sendNEC(0xFDE01F, 32); gecikme(40); ) if (x == 99) ( irsend.sendNEC(0xFD18E7, 32); gecikme(40); ) if (x == 100) ( irsend.sendNEC (0xFDE817, 32); gecikme(40); ) if (x == 101) ( irsend.sendNEC(0xFDA857, 32); gecikme(40); ) if (x == 102) ( irsend.sendNEC(0xFD6897, 32) ); gecikme (40); ) if (x == 103) ( irsesend.sendNEC(0xFDA857, 32); gecikme(40); ) if (x == 104) ( irsend.sendNEC(0xFD6897, 32); gecikme( 40); ) if (x == 105) ( irsend.sendNEC(0xFDE817, 32); gecikme(40); ) if (x == 106) ( irsend.sendNEC(0xFD18E7, 32); gecikme(40); ) if (x == 107) ( irsend.sendNEC(0xFD9867, 32); gecikme(40); ) if (x == 108) ( irsend.sendNEC(0xFD28D7, 32); gecikme(40); ) if (x = = 109) ( irsend.sendNEC(0xFD20DF, 32); gecikme(40); ) )) )


    Çizimde düğme kodlarını, yani satırlarda düzenlemeniz gerekecektir:

    If (x == 97) ( irsend.sendNEC(0x807F08F7, 32); gecikme(40);
    807F08F7 değerini şu şekilde değiştirin:

    If (y == 1) ( //TV uzaktan kumandasının tuş kodları if (x == 97) ( irsend.sendNEC(0x12345678, 32); gecikme(40); )
    Düğmenizin kodu 12345678'dir.

    Buton kodlarınızı kullanarak taslağı düzenledikten sonra taslağı Arduino kartına yükleyin ve uygulamayı telefonunuza yüklemeye devam edin.

    Telefonda Bluetooth'u açıyoruz, cihazımızı arıyoruz, bir çift oluşturuyoruz ve ardından uygulamayı başlatıyoruz Nabız telefonda.

    Başlangıçta, sağ alt köşede, cihazımıza bağlı olmadığımızı gösteren kırmızı bir bluetooth simgesi bulunan bir ekranımız olacak.

    Bundan sonra bu simgeye tıklayın. Bağlanmak için cihazımızı seçtiğimiz, mevcut tüm bluetooth cihazlarının listesini içeren bir pencere görmeliyiz.

    Artık ana ekrana geri döndük ve TV'yi zaten kontrol edebiliyoruz:

    Kontrol moduna geçmek için etiketli düğmeye basmamız gerekiyor. "Oyuncu". Daha önce de söylediğim gibi "AV" etiketli butonumuz bir butona dönüşecek" ":

    Cihazımızdan bağlantıyı kesmek için “Güç” düğmesini birkaç saniye basılı tutmanız yeterlidir.

    Bitmiş cihazımın birkaç fotoğrafı.

    Oldukça iyi çıktı, öyle görünüyor. Yazıya yorum bekliyorum.