Arduino uchun universal masofadan boshqarish pulti. Arduino yordamida infraqizil diapazonda ma'lumotlarni uzatish Infraqizil qabul qilgichni arduinoga ulash

Internetda Arduino yordamida televizorni masofadan boshqarish pultini qanday qilish haqida ko'plab maqolalar mavjud, ammo televizor va media pleerni boshqarish uchun menga universal masofadan boshqarish pulti kerak edi. Mening universal masofadan boshqarish pultimning asosiy afzalligi shundaki, Android telefon ilovasidagi tugmalar ikki maqsadli, lekin videoga qarang.



Masofadan boshqarish pulti juda qulay, chunki televizor va pleerni boshqarish uchun ekrandagi deyarli bir xil tugmalar ishlatiladi. Bir farq shundaki, " AV"televizorni boshqarish rejimida tugmachaga o'zgaradi" Pleyerni boshqarish rejimiga o'tishda " (to'xtatish). Rasmlar ikkita rejimni ko'rsatadi, chapda televizorni boshqarish rejimi, o'ngda pleerni boshqarish rejimi.

Xo'sh, endi men sizga bunday masofadan boshqarish pultini yaratish haqida bir oz aytib beraman. Qurilma uchun men ERGO TV uchun masofadan boshqarish pulti va DUNE HD TV101W media pleer uchun masofadan boshqarish pultini ishlatganman.

Masofadan boshqarish pultidan ma'lumotlarni olish uchun men 38 kHz ish chastotasida TSOP1138 (TSOP4838 ga o'xshash) infraqizil sensordan foydalandim va uni sxema bo'yicha Arduino platasiga uladim:

Ushbu eskiz ma'lumotlarni uzatishni kodlashni aniqlash va masofadan boshqarish tugmalari kodini o'qish uchun kerak bo'lmaydi.

Chiziqdagi eskizda int RECV_PIN = 11; 4-pin raqamimizni ko'rsating

Eskizni yuklaganingizdan so'ng, "port monitori" ni oching va masofadan boshqarish tugmachalarini bosib, olingan ma'lumotlarni ko'ring.

Rasmda televizorning masofadan boshqarish pultidan va pleer masofadan boshqarish pultidagi quvvat tugmasini skanerlash misoli ko'rsatilgan. Endi tugma kodlari uchun jadval yaratamiz.

Men buni yuqoridagi fotosuratda bo'lgani kabi oldim. Yozuv ostida televizor Televizorning masofadan boshqarish pultidagi tugma kodlari; yozuv ostida O'yinchi- media pleerning masofadan boshqarish pultidan kodlar.

Endi biz infraqizil signal qabul qiluvchimizni Arduino platasidan uzamiz va HC-05 Bluetooth moduli va infraqizil LEDni fotosuratdagi diagrammaga muvofiq ulaymiz.

Shundan so'ng biz to'g'ridan-to'g'ri eskizga o'tamiz.

Eskiz

#o'z ichiga oladi IRsend irsend; 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) ( // televizor pulti uchun tugma kodlari if (x == 97) ( irsend.sendNEC(0x807F08F7, 32); kechikish (40) ); ) agar (x == 98) ( irsend.sendNEC(0x807FA857, 32); kechikish (40); ) agar (x == 99) ( irsend.sendNEC(0x807F708F, 32); kechikish (40); ) agar (x == 100) ( irsend.sendNEC(0x807FF00F, 32); kechikish (40); ) agar (x == 101) ( irsend.sendNEC(0x807F30CF, 32); kechikish (40); ) agar (x == 102) ( irsend.sendNEC(0x807FB04F, 32); kechikish (40); ) agar (x == 103) ( irsend.sendNEC(0x807F9867, 32); kechikish (40); ) agar (x == 104) ( irs end .sendNEC(0x807F58A7, 32); kechikish (40); ) agar (x == 105) ( irsend.sendNEC(0x807FD827, 32); kechikish (40); ) agar (x == 106) ( irsend.send7F(0x7C) , 32); kechikish (40); ) agar (x == 107) ( irsend.sendNEC(0x807F48B7, 32); kechikish (40); ) agar (x == 108) ( irsend.sendNEC(0x807FB847, 32); kechikish (40); ) agar (x == 109) ( irsend.sendNEC(0x807F6897, 32); kechikish (40); ) ) if (y == 2) ( //media pleerning masofadan boshqarish tugmalarining kodlari if (x == 97) ( irsend.sendNEC(0xFDC23D, 32); kechikish (40); ) agar (x == 98) ( irsend. sendNEC(0xFDE01F, 32); kechikish (40); ) agar (x == 99) ( irsend.sendNEC(0xFD18E7, 32); kechikish (40); ) agar (x == 100) ( irsend.sendNEC (0xFDE817, 32); kechikish (40); ) agar (x == 101) ( irsend.sendNEC(0xFDA857, 32); kechikish (40); ) agar (x == 102) ( irsend.sendNEC(0xFD6897, 32) ); kechikish (40); ) agar (x == 103) ( irsend.sendNEC(0xFDA857, 32); kechikish (40); ) agar (x == 104) ( irsend.sendNEC(0xFD6897, 32); kechikish ( 40); ) agar (x == 105) ( irsend.sendNEC(0xFDE817, 32); kechikish (40); ) agar (x == 106) ( irsend.sendNEC(0xFD18E7, 32); kechikish (40); ) agar (x == 107) ( irsend.sendNEC(0xFD9867, 32); kechikish (40); ) agar (x == 108) ( irsend.sendNEC(0xFD28D7, 32); kechikish (40); ) agar (x = = 109) ( irsend.sendNEC(0xFD20DF, 32); kechikish (40); ) ) ) )


Eskizda siz tugma kodlarini, xususan, satrlarda tahrirlashingiz kerak bo'ladi:

Agar (x == 97) (irsend.sendNEC(0x807F08F7, 32); kechikish (40);
807F08F7 qiymatini quyidagicha o'zgartiring:

If (y == 1) ( //televizorning masofadan boshqarish pulti uchun tugma kodlari, agar (x == 97) ( irsend.sendNEC(0x12345678, 32); delay(40); )
Bu erda 12345678 tugmangizning kodi.

Eskizni tugma kodlari yordamida tahrir qilgandan so'ng, eskizni Arduino platasiga yuklang va ilovani telefoningizga o'rnatishni davom eting.

Biz telefonda Bluetooth-ni yoqamiz, qurilmamizni qidiramiz, juftlik yaratamiz, so'ngra dasturni ishga tushiramiz Pult telefonda.

Ishga tushgandan so'ng biz pastki o'ng burchakda qizil bluetooth belgisi bo'lgan ekranga ega bo'lamiz, bu bizning qurilmamizga ulanmaganligimiz haqida signal beradi.

Shundan so'ng, ushbu belgini bosing. Biz barcha mavjud bluetooth qurilmalari ro'yxati bilan oynani ko'rishimiz kerak, u erda biz ulanish uchun qurilmamizni tanlaymiz.

Endi biz asosiy ekranga qaytdik va allaqachon televizorni boshqarishimiz mumkin:

Boshqarish rejimiga o'tish uchun biz belgilangan tugmani bosishimiz kerak "O'yinchi". Yuqorida aytib o'tganimdek, "AV" deb nomlangan tugmachamiz "tugmasiga o'zgaradi" ":

Qurilmamizdan uzish uchun “Quvvat” tugmasini bir necha soniya bosib turing.

Xo'sh, mening tayyor qurilmamning bir nechta fotosuratlari.

Bu juda yaxshi chiqdi, shekilli. Men maqola bo'yicha sharhlarni kutaman.

U kodlangan va modulyatsiyalangan ma'lumotlar to'plamini IR LEDga yuboradi va tugmani bosib turganda paketlarni ham takrorlang.

  • IR LEDning ko'rinmas infraqizil nuri Trima IR qabul qiluvchi moduliga tushadi va u erda demodulyatsiya qilingan elektr impulslariga aylanadi.
  • Iarduino_IR kutubxonasi doimiy ravishda IR qabul qilgichdan impulslarni o'qiydi va dekodlaydi (ikkinchi Arduino apparat taymeridan foydalangan holda)
  • Loop kodida biz kutubxona tomonidan dekodlangan ma'lumotlarni qurilmaga (chiroq) tayinlanganlar bilan tekshiramiz va agar ular mos kelsa, biz Trema modulining Solid State kirishidagi holatni ("1"/"0") o'zgartiramiz. Rele, shuning uchun qurilmani (chiroqni) yoqing yoki o'chiring.
  • Agar siz televizorning masofadan boshqarish pultidagi foydalanilmagan tugmalarni (masalan, rangli telematn tugmalari) xonadagi yoritishni boshqarish uchun belgilasangiz, qurilma foydali bo'lishi mumkin.

    Akkor lampalar o'rniga siz 2 A gacha bo'lgan oqim iste'moli bilan har qanday ~ 220 V tarmoq qurilmasini ulashingiz mumkin.

    Bizga kerak bo'ladi:

    • IR masofadan boshqarish pulti x 1 dona (har qanday televizorning IR masofadan boshqarish pulti ishlaydi)
    • Biz boshqaradigan qurilmalar (chiroqlar) x 3 dona.

    Loyihani amalga oshirish uchun kutubxonani o'rnatishimiz kerak:

    • iarduino_IR kutubxonasi IR qabul qiluvchilar bilan ishlash uchun
      MUHIM: kutubxona ikkinchi apparat taymeridan foydalanadi,
      PWM SIGNALINI 3 YOKI 11 CHISHIGA CHIKARMANG!

    Kutubxonalarni qanday o'rnatishni Wiki sahifasida topishingiz mumkin - Arduino IDE-da kutubxonalarni o'rnatish.

    Video:

    Ulanish diagrammasi:

    Ushbu sxema faqat raqamli modullardan foydalanadi, ular har qanday (ham raqamli, ham analog) Arduino pinlariga ulanishi mumkin. Misol uchun, biz barcha modullarni analog chiqishlarga uladik. Arduino analog pinlari oddiy raqamli pinlar sifatida ishlashi mumkinligini hamma ham bilmaydi, bu sizga mantiqiy "0" va "1" ko'rinishidagi raqamli signallarni qabul qilish (IQ qabul qilgichdan) va uzatish (qattiq holat o'rni uchun) imkonini beradi.

    Agar siz qurilmalarni boshqa pinlarga ulasangiz, ularning raqamlari eskizning ikkinchi (IR ob'ekt deklaratsiyasi) va uchinchi (pinRelay massivi deklaratsiyasi) qatorlarida ko'rsatilishi kerak. Dastur kodi shunday yozilganki, siz Arduino-da qancha bo'sh pinlar bo'lsa, shuncha o'rni ulashingiz mumkin, shunchaki eskizning uchinchi qatorida pin raqamlarini ko'rsatish (pinRelay massivi deklaratsiyasi).

    Ish algoritmi:

    • Boshida, eskiz IR masofaviy tugma kodini har bir qattiq holat o'rni uchun ketma-ket ravishda belgilaydi. Birinchidan, LED miltillaydi va qattiq holat o'rni davri yopiladi, uning chiqishi birinchi navbatda ko'rsatiladi. Agar siz IQ masofadan boshqarish pultidagi biron bir tugmani bossangiz, ushbu tugma uchun kod o'sha o'rni uchun tayinlanadi va keyingisi miltillay boshlaydi va shunga o'xshash, barcha relelarga IR masofadan boshqarish pultidagi tugmalar tayinlanmaguncha.
    • Uchrashuvdan keyinTugma funktsiyalari, barcha o'rni o'chirilgan. Agar siz IR masofadan boshqarish tugmachasini bossangiz, ushbu tugmaning kodi tayinlangan o'rni yoqiladi. Agar ko'rsatilgan tugmani yana bossangiz, o'rni o'chadi. Qurilma hech qanday relega kodi tayinlanmagan tugmalarni bosishga javob bermaydi.
    • Agar Agar siz har bir ishga tushirishda tugma kodlarini belgilashni xohlamasangiz, varRelay massivini e'lon qilishda ularni aniq ko'rsating va o'rnatish kodidan for va while davrlarini olib tashlang.
    • Har bir tugma uchun kodni toping quyidagi qatorni yozishingiz mumkin: if(IR.check())(Serial.println(IR.data);)

    Dastur kodi:

    #o'z ichiga oladi // kutubxonani IQ qabul qiluvchi iarduino_IR_RX IR(A5) bilan ishlashga ulang; // IQ qabul qilgich bilan ishlash uchun IQ ob'ektini e'lon qilish (IQ qabul qilgich ulangan har qanday pinni ko'rsatib) const uint8_t pinRelay = (A1,A2,A3); // qattiq holat o'rni ulangan har qanday pinlar (raqamli yoki analog) raqamlarini ko'rsatuvchi massivni e'lon qilish const uint8_t allRelay = sizeof(pinRelay); // pinRelay massividagi elementlar sonini (relelar soni) o'tkazish orqali doimiyni e'lon qilish uint32_t varRelay; // IR-qabul qiluvchining kodlari (buyruqlari) bilan massivni e'lon qilish, shu jumladan bool modRelay o'rni; // o'rni holatlari bilan massivni e'lon qilish uint8_t setRelay; // IR qabul qilgich buyrug'i yoziladigan o'rni soni bilan o'zgaruvchini e'lon qilish void setup())( IR.begin(); // IR qabul qiluvchi bilan ishlashni ishga tushirish for(uint8_t i=0; i) IR qabul qiluvchi moduli IR masofadan boshqarish pulti bilan birgalikda Arduino platasini masofadan boshqarishni osonlik bilan amalga oshirish imkonini beradi.

    Bu ishlab chiqaruvchi tomonidan tavsiya etilgan jabduqlar taxtada o'rnatilgan VS1838B IR qabul qilgichdan boshqa narsa emas.

    Ushbu modul bilan qutidan tashqarida ishlash uchun sizga 38 kHz chastotali masofadan boshqarish pulti kerak bo'ladi.

    Ushbu plataning afzalligi - bu sizning loyihangiz uchun zarur bo'lgan chastotada ishlaydigan IR qabul qilgichni lehimsiz boshqasiga almashtirish imkonini beruvchi surish ulagichi.

    Asosiy texnik xususiyatlar:

    Ta'minot kuchlanishi: 2,7 - 5,5 V

    Modulyatsiya chastotasi: 38 kHz

    Harorat oralig'i: - 20 ... + 80 ° S

    Interfeys: raqamli

    Arduino-ga ulanish

    Modul uch pinli 2,54 mm ulagich bilan jihozlangan

    : GND piniga ulanadi

    : +5V chiqishga ulanadi

    : raqamli pinga ulanadi (misolda D2)

    Arduino muhitida ishlashga misol

    Ushbu modul bilan ishlash uchun IRRemote kutubxonasini o'rnatishingiz kerak

    Yuklab oling, o'ramidan chiqaring va Arduino papkasidagi kutubxonalar jildiga joylashtiring. Kutubxonani qo'shish vaqtida Arduino IDE ochiq bo'lsa, muhitni qayta ishga tushiring.

    Masofadan boshqarish tugmalarini o'qish

    Masofadan boshqarish pultining ko'rsatkichlarini o'qish uchun quyidagi eskizni to'ldiring. U bosilgan tugmalarning kodlanishini portga chiqaradi.

    Misol tariqasida, biz rasmdagi kabi masofadan boshqarish pultini ishlatamiz, chunki Ushbu turdagi masofadan boshqarish pulti to'plamga kiritilgan

    Turli masofadan boshqarish pultlarining ishlash mantiqidagi farqlar haqida asl maqolada bizning hamjamiyatimiz a'zosidan taxallus ostida o'qishingiz mumkin.

    Kod namunasi:

    #o'z ichiga oladi int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); //Muayyan portdan signal qabul qilish uchun ob'ekt yarating decode_results natijalari; //Natijani saqlaydigan o'zgaruvchi bekor sozlash; o'rnatish () { Serial // Qabul qilishni boshlang) bekor halqa() ( agar (irrecv.decode(&natijalar)) // Signal qabul qilinganda... { Serial.println(natijalar.qiymat); //... uning qiymatini ketma-ket portga chiqaring irrecv.resume(); ))

    Port monitorida quyidagilarni ko'rishingiz kerak:

    Har bir tugmani deyarli bir soniya ushlab turish orqali biz 10 ga yaqin kodlarni olamiz. Birinchisi tugma kodi. Va undan keyin standart kod paydo bo'la boshlaydi, bu tugma tiqilib qolganligi haqida xabar beradi.

    Arduino platasini masofadan boshqarish pulti bilan boshqarish

    Keling, Arduino platasidagi (D13) LEDni birinchi tugma kodlanganda yonib, ikkinchi tugma kodlanganda o'chirilsin.

    Kod namunasi:

    // Arduino IDE 1.0.3 da sinovdan o'tgan#o'z ichiga oladi int RECV_PIN = 2; int LED = 13; IRrecv irrecv(RECV_PIN); decode_results natijalari; bekor sozlash; o'rnatish () { Serial.begin(9600); irrecv.enableIRIn(); // Qabul qilgichni ishga tushiring pinMode (LED, OUTPUT); ) bekor halqa() ( if (irrecv.decode(&natijalar)) ( Serial.println(natijalar.qiymat); agar (natijalar.qiymat == 16769565) // Kodlashni olayotganda 1(digitalWrite (LED, YUQORI); // LEDni yoqing) agar (natijalar.qiymat == 16761405) // Kodlashni olayotganda 2(digitalWrite (LED, LOW); // LEDni o'chiring) irrecv.resume(); // Keyingi qiymatni oling } }

    Hammaga xayrli kun (yoki tun, xohlaganingizcha), keling, lirik kirish bilan boshlaylik. Hozirgi kunda ko'pchilikning uylari bor Masofadan boshqarish pulti, tyuner, DVD pleerli televizor . Ko'p odamlar (va oilalar) o'z uy hayotini qo'lida masofadan boshqarish pultisiz tasavvur qila olmaydi. Qabul qiling - maishiy texnika ustasi bo'lish qanchalik ajoyib va ​​har qanday vaqtda ushbu jihozlarga o'z xohishingizni bildiring. Ushbu maqolada biz masofadan boshqarish texnologiyasini chuqurroq ko'rib chiqmoqchimiz va ehtiyojlarimiz uchun qo'llashning ba'zi misollarini keltirmoqchimiz.

    Xo'sh, tajribamiz uchun komponent sifatida bizga nima kerak? Variant sifatida tayyor IR masofadan boshqarish pulti va IR qabul qiluvchi modullar sotiladi. Ammo biz kutishni va pul to'lashni xohlamaymiz, shuning uchun biz qattiqroq harakat qilamiz. Asos sifatida kelib chiqishi noma'lum masofadan boshqarish pultini olaylik, bizda infraqizil qabul qilgich lehimlangan xitoy tyunerining taxtasi ham bor. Quyidagi fotosuratda siz ushbu komponentlarni ko'rishingiz mumkin. Rostini aytsam, masofadan boshqarish pulti ofis stolidagi keraksiz narsalar orasidan topilgan va IQ qabul qiluvchisi bo'lgan taxta eng yaqin radio ta'mirlash ustaxonasidan olingan.

    Xo'sh, men aytganimdek Gannibal - "Karfagenga oldinga" . Biz shunchaki qabul qilgichni echishimiz va uni taxtaga ulashimiz kerak Arduino quyidagi sxema bo'yicha ...

    • IQ qabul qilgichni ulash

    IQ qabul qiluvchi Doskadan lehimlangan hech qanday belgilarga ega emas, bu minglab ishlab chiqarilgan yana bir noma'lum Xitoy radio komponentidir. Muxtasar qilib aytganda, biz aytishimiz mumkin - bitta binoda u birlashadifotodiod, oldindan kuchaytirgich va haydovchi . Chiqish normal tomonidan hosil bo'ladiTTL signali to'ldirishsiz, mikrokontroller tomonidan keyingi ishlov berish uchun mos. Tashuvchi chastotasi, ehtimol (!) 36 kHz, lekin hozir bu unchalik muhim emas... Keling, uni plataga ulashga harakat qilaylik.Arduino , shartli diagramma ushbu qurilmaning kerakli pinoutini beradi. Quyidagi diagrammada qizil rang bilan ta'kidlangan tanamizning shakli ko'rsatilganIQ qabul qiluvchi , yashil rang bilan ta'kidlangan - taxtaga ulangan pinoutArduino .

    Diqqat!!! Internetda bunday paketdagi qurilmalar uchun ko'plab pinout diagrammalari mavjud (TSOP). Ushbu maqolada keltirilgan pinoutlar Internetda topilgan har qanday narsaga to'g'ri kelmasligi mumkin, ammo hamma narsa biz bilan bog'langan. Agar IQ qabul qilgich ulanganda qiziy boshlasa, darhol yig'ilgan sxemani o'chiring; bu ulanish pinouti haqiqiyga mos kelmasligini anglatadi va siz uni deyarli tasodifiy tanlashingiz kerak bo'ladi. Biz aynan shunday qildik, chunki Internetda topilgan sxemalar bizning IR qabul qiluvchimiz uchun mos emas edi. Bu erda, umuman olganda, asosiysi Arduino platasini yoqmaslik, ehtiyotkorlik bilan davom eting!!!

    • IRremote kutubxonasi

    Shunday qilib, hamma narsa bog'langan. Masofadan boshqarish pultidan kodlarni o'qish uchun kutubxona mavjud IRremote.h, uning yordami bilan biz masofadan boshqarish pultimizni, aniqrog'i tugma kodlarini o'rganamiz. Kelajakda biz o'qish kodlarini o'z maqsadlarimiz uchun ishlatamiz. Tugma kodlari o'qilishi mumkin bo'lgan eskiz ushbu kutubxonaning misollarida keltirilgan, deyiladi IRrecvDemo. Diqqat!!! Eskizni kompilyatsiya qilishda xatolik yuz beradi, boshida siz yana ikkita plagin kutubxonasini qo'shishingiz kerak:

    #include "boarddefs.h" //Qo'shimcha kutubxona #include "IRremote.h" #include "IRremoteInt.h" //Qo'shimcha kutubxona int RECV_PIN = 2; //IQ qabul qilgichdan chiqish signalini ulash uchun pin //IRrecv irrecv(RECV_PIN) parametri sifatida IQ qabul qilgichdan signalni ulash uchun pinni uzatib, IRrecv sinfi namunasini yarating; decode_results natijalari; //Bosilgan tugmachaning qabul qilingan kodini saqlash uchun oʻzgaruvchi void setup() ( Serial.begin(9600); irrecv.enableIRIn(); //IQ qabul qilgichning ishlashini yoqish ) void loop() (if (irrecv.decode() &natijalar)) //Agar hodisa ro'y bergan bo'lsa/tugmacha bosilsa ( Serial.println(results.value, HEX); //Bosilgan tugma kodini o'n oltilik shaklda port monitoriga irrecv.resume(); // Keyingi qiymatni o'qing/tugma ) kechikish (100 ); )

    Eskiz doskaga yuklangandan keyinArduino(biz foydalanamiz Arduino Nano qalqon ustida Nano uchun I/U Wireless Shield ), ochilishi mumkin port monitor va masofadan boshqarish pultidagi tugmalarni bosganingizda qanday kodlar paydo bo'lishini ko'ring. Eskizning natijasi quyidagi skrinshotda ko'rsatilgan:

    Aytgancha, kabi port monitor Biz tasdiqlangan dasturiy ta'minotimizni ishlatamiz, agar kimdir qiziqsa, siz maqolani o'qib chiqishingiz va Serial Monitor Pro-ni yuklab olishingiz mumkin.

    #aniqlash KEY_ONOFF 0x807F807F //On/Off tugmasi #aniqlash KEY_MUTE 0x807F48B7 //Ovozni o'chirish tugmasi #aniqlash KEY_1 0x807F00FF //tugma 1 #aniqlash KEY_2 0x807FE01F //Buton 1 KEY_4 0x807F20DF ni aniqlang // Tugma 4 #define KEY_5 0x807FD02F //tugmacha 5 #aniqlash KEY_6 0x807F50AF //tugma 6 #aniqlash KEY_7 0x807F10EF //tugma 7 #aniqlash KEY_8 0x807FF00F //0x807FF08F //7F 08 But8 //08 But 9 #define KEY_0 0x807FC837 // Tugma 0

    Va endi, umuman olganda, hamma narsa yakuniy sinovga tayyor - bu o'rni modullarini yoqish / o'chirishni boshqarishning elementar sinovi bo'ladi. Mana kichik vazifa:

    • Biz ikkita o'rni modulidan foydalanamiz
    • 1-sonli o'rni masofadan boshqarish pultining "1" tugmachasiga bog'laymiz
    • 2-o'rni masofadan boshqarish pultidagi "2" tugmachasiga bog'langan
    • Har qanday o'rni modulini yoqish unga tayinlangan tugmani bosish orqali amalga oshiriladi
    • Har qanday o'rni modulini o'chirish, shuningdek, u tayinlangan tugmani bosish orqali amalga oshiriladi
    • Yoqish/O'chirish tugmasini bosish ikkala o'rni modulini ham so'zsiz o'chiradi (agar ular yoqilgan bo'lsa yoki ulardan biri yoqilgan bo'lsa)

    Yuqoridagi vazifani bajaradigan eskiz:

    #include "boarddefs.h" //Qo'shimcha kutubxona #include "IRremote.h" #include "IRremoteInt.h" //Qo'shimcha kutubxona #aniqlash KEY_ONOFF 0x807F807F //On/Off tugmasi #aniqlash KEY_1 0x807F00FF1 //Buine_t 0x807FE01F //tugma 2 #define RELOUT1 3 //Rele 1 uchun chiqish porti #define RELOUT2 4 //Rele 2 uchun chiqish porti int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results natijalari; statik mantiqiy REL1_ONOFF = noto'g'ri; statik mantiqiy REL2_ONOFF = noto'g'ri; void setup() ( pinMode(RELOUT1, OUTPUT); pinMode(RELOUT2, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // Qabul qilgichni ishga tushirish ) void loop() ( if (irrecv.decode(&results) )) ( switch(results.value) (case(KEY_ONOFF): REL1_ONOFF = noto'g'ri; REL2_ONOFF = noto'g'ri; break; case(KEY_1): if(REL1_ONOFF) REL1_ONOFF = noto'g'ri; aks holda REL1_ONOFF = rost; break; case(KEY_2) ): agar(REL2_ONOFF) REL2_ONOFF = noto'g'ri; aks holda REL2_ONOFF = rost; break; ) irrecv.resume(); ) digitalWrite(RELOUT1, REL1_ONOFF); digitalWrite(RELOUT2, REL2_ONOFF); kechikish(100); )

    Va maqolaning oxirida ikkala eskizning ishini ko'rsatadigan video mavjud. Agar xohlasangiz va ijodiy tasavvurga ega bo'lsangiz, plaginlar parkini kengaytirishingiz va hamma narsani yanada rivojlangan usulda boshqarishingiz mumkin. Bizning maqolamizda biz ushbu texnologiyadan foydalanishning asosiy misolini berishga harakat qildik. E'tiboringiz uchun rahmat va zavq bilan tomosha qiling!!!

    Iltimos, sharhlar ishlashi uchun javascriptni yoqing.

    Internetda Arduino yordamida televizorni masofadan boshqarish pultini qanday qilish haqida ko'plab maqolalar mavjud, ammo televizor va media pleerni boshqarish uchun menga universal masofadan boshqarish pulti kerak edi. Mening universal masofadan boshqarish pultimning asosiy afzalligi shundaki, Android telefon ilovasidagi tugmalar ikki maqsadli, lekin videoga qarang.



    Masofadan boshqarish pulti juda qulay, chunki televizor va pleerni boshqarish uchun ekrandagi deyarli bir xil tugmalar ishlatiladi. Bir farq shundaki, " AV"televizorni boshqarish rejimida tugmachaga o'zgaradi" Pleyerni boshqarish rejimiga o'tishda " (to'xtatish). Rasmlar ikkita rejimni ko'rsatadi, chapda televizorni boshqarish rejimi, o'ngda pleerni boshqarish rejimi.

    Xo'sh, endi men sizga bunday masofadan boshqarish pultini yaratish haqida bir oz aytib beraman. Qurilma uchun men ERGO TV uchun masofadan boshqarish pulti va DUNE HD TV101W media pleer uchun masofadan boshqarish pultini ishlatganman.

    Masofadan boshqarish pultidan ma'lumotlarni olish uchun men 38 kHz ish chastotasida TSOP1138 (TSOP4838 ga o'xshash) infraqizil sensordan foydalandim va uni sxema bo'yicha Arduino platasiga uladim:

    Ushbu eskiz ma'lumotlarni uzatishni kodlashni aniqlash va masofadan boshqarish tugmalari kodini o'qish uchun kerak bo'lmaydi.

    Chiziqdagi eskizda int RECV_PIN = 11; 4-pin raqamimizni ko'rsating

    Eskizni yuklaganingizdan so'ng, "port monitori" ni oching va masofadan boshqarish tugmachalarini bosib, olingan ma'lumotlarni ko'ring.

    Rasmda televizorning masofadan boshqarish pultidan va pleer masofadan boshqarish pultidagi quvvat tugmasini skanerlash misoli ko'rsatilgan. Endi tugma kodlari uchun jadval yaratamiz.

    Men buni yuqoridagi fotosuratda bo'lgani kabi oldim. Yozuv ostida televizor Televizorning masofadan boshqarish pultidagi tugma kodlari; yozuv ostida O'yinchi- media pleerning masofadan boshqarish pultidan kodlar.

    Endi biz infraqizil signal qabul qiluvchimizni Arduino platasidan uzamiz va HC-05 Bluetooth moduli va infraqizil LEDni fotosuratdagi diagrammaga muvofiq ulaymiz.

    Shundan so'ng biz to'g'ridan-to'g'ri eskizga o'tamiz.

    Eskiz

    #o'z ichiga oladi IRsend irsend; 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) ( // televizor pulti uchun tugma kodlari if (x == 97) ( irsend.sendNEC(0x807F08F7, 32); kechikish (40) ); ) agar (x == 98) ( irsend.sendNEC(0x807FA857, 32); kechikish (40); ) agar (x == 99) ( irsend.sendNEC(0x807F708F, 32); kechikish (40); ) agar (x == 100) ( irsend.sendNEC(0x807FF00F, 32); kechikish (40); ) agar (x == 101) ( irsend.sendNEC(0x807F30CF, 32); kechikish (40); ) agar (x == 102) ( irsend.sendNEC(0x807FB04F, 32); kechikish (40); ) agar (x == 103) ( irsend.sendNEC(0x807F9867, 32); kechikish (40); ) agar (x == 104) ( irs end .sendNEC(0x807F58A7, 32); kechikish (40); ) agar (x == 105) ( irsend.sendNEC(0x807FD827, 32); kechikish (40); ) agar (x == 106) ( irsend.send7F(0x7C) , 32); kechikish (40); ) agar (x == 107) ( irsend.sendNEC(0x807F48B7, 32); kechikish (40); ) agar (x == 108) ( irsend.sendNEC(0x807FB847, 32); kechikish (40); ) agar (x == 109) ( irsend.sendNEC(0x807F6897, 32); kechikish (40); ) ) if (y == 2) ( //media pleerning masofadan boshqarish tugmalarining kodlari if (x == 97) ( irsend.sendNEC(0xFDC23D, 32); kechikish (40); ) agar (x == 98) ( irsend. sendNEC(0xFDE01F, 32); kechikish (40); ) agar (x == 99) ( irsend.sendNEC(0xFD18E7, 32); kechikish (40); ) agar (x == 100) ( irsend.sendNEC (0xFDE817, 32); kechikish (40); ) agar (x == 101) ( irsend.sendNEC(0xFDA857, 32); kechikish (40); ) agar (x == 102) ( irsend.sendNEC(0xFD6897, 32) ); kechikish (40); ) agar (x == 103) ( irsend.sendNEC(0xFDA857, 32); kechikish (40); ) agar (x == 104) ( irsend.sendNEC(0xFD6897, 32); kechikish ( 40); ) agar (x == 105) ( irsend.sendNEC(0xFDE817, 32); kechikish (40); ) agar (x == 106) ( irsend.sendNEC(0xFD18E7, 32); kechikish (40); ) agar (x == 107) ( irsend.sendNEC(0xFD9867, 32); kechikish (40); ) agar (x == 108) ( irsend.sendNEC(0xFD28D7, 32); kechikish (40); ) agar (x = = 109) ( irsend.sendNEC(0xFD20DF, 32); kechikish (40); ) ) ) )


    Eskizda siz tugma kodlarini, xususan, satrlarda tahrirlashingiz kerak bo'ladi:

    Agar (x == 97) (irsend.sendNEC(0x807F08F7, 32); kechikish (40);
    807F08F7 qiymatini quyidagicha o'zgartiring:

    If (y == 1) ( //televizorning masofadan boshqarish pulti uchun tugma kodlari, agar (x == 97) ( irsend.sendNEC(0x12345678, 32); delay(40); )
    Bu erda 12345678 tugmangizning kodi.

    Eskizni tugma kodlari yordamida tahrir qilgandan so'ng, eskizni Arduino platasiga yuklang va ilovani telefoningizga o'rnatishni davom eting.

    Biz telefonda Bluetooth-ni yoqamiz, qurilmamizni qidiramiz, juftlik yaratamiz, so'ngra dasturni ishga tushiramiz Pult telefonda.

    Ishga tushgandan so'ng biz pastki o'ng burchakda qizil bluetooth belgisi bo'lgan ekranga ega bo'lamiz, bu bizning qurilmamizga ulanmaganligimiz haqida signal beradi.

    Shundan so'ng, ushbu belgini bosing. Biz barcha mavjud bluetooth qurilmalari ro'yxati bilan oynani ko'rishimiz kerak, u erda biz ulanish uchun qurilmamizni tanlaymiz.

    Endi biz asosiy ekranga qaytdik va allaqachon televizorni boshqarishimiz mumkin:

    Boshqarish rejimiga o'tish uchun biz belgilangan tugmani bosishimiz kerak "O'yinchi". Yuqorida aytib o'tganimdek, "AV" deb nomlangan tugmachamiz "tugmasiga o'zgaradi" ":

    Qurilmamizdan uzish uchun “Quvvat” tugmasini bir necha soniya bosib turing.

    Xo'sh, mening tayyor qurilmamning bir nechta fotosuratlari.

    Bu juda yaxshi chiqdi, shekilli. Men maqola bo'yicha sharhlarni kutaman.