Infraqizil qabul qilgichni arduinoga ulash. Arduino: infraqizil masofadan boshqarish pulti va qabul qiluvchi. IR bilan ishlash uchun kutubxonalar

Infraqizil qabul qilgichni arduinoga ulash. Arduino: infraqizil masofadan boshqarish pulti va qabul qiluvchi. IR bilan ishlash uchun kutubxonalar

  • Kirish kuchlanishi: 4,0 ... 5,5 V (5 V nominal)
  • Joriy iste'mol: impuls rejimida 100 mA gacha (Vcc = 5 V da)
  • Yorug'lik to'lqin uzunligi: 940 nm (tepalik qiymati)
  • Maksimal signal chastotasi: 10 MGts gacha
  • Etkazish masofasi: 10 m gacha (Vcc = 5V da)
  • Ishlash harorati: -25 … 85 °C
  • Yo'nalish burchagi: 120 ° (quvvat yo'qolishi bilan< 50%)

"Trema" liniyasining barcha modullari bir xil formatda qilingan

Ulanish:

Vaziyatga qarab modulni 3 usulda ulash qulay:

Usul - 1: Simli kabel va Piranha UNO dan foydalanish

Kutubxona ikkinchi apparat taymeridan foydalanadi,

PWM SIGNALINI 3 YOKI 11 CHISHIGA CHIKARMANG!

Kutubxonani o'rnatish haqida batafsil ma'lumotni bizning...

Modul bilan ishlash bo'yicha qo'shimcha ma'lumotlar:

Paketlar: Deyarli barcha masofadan boshqarish pultlari nafaqat ma'lumot paketini (qurilma turini va bosilgan tugma kodini ko'rsatadigan) yuboradi, balki tugmani bosib ushlab turish haqida qurilmaga xabar beruvchi paketlarni takrorlaydi. Shunday qilib, qabul qiluvchi qurilma tugmani bir marta yoki butun ushlab turgan vaqt davomida bosishga javob berishi mumkin.
Masalan: telekanal raqami ko'rsatilgan tugmani bosib ushlab turish orqali televizor o'sha kanalga faqat bir marta o'tadi. Ovozni ko'tarish tugmachasini bosib ushlab turganda, televizor uni butun tugma ushlab turganda oshiradi.

Axborot paketlari soni Ko'pgina masofadan boshqarish pultlarida bitta, lekin ba'zi qurilmalar, masalan, konditsionerlar 2, 3 yoki undan ko'p ma'lumot paketlaridan foydalanadi.

Paket tarkibi: Ma'lumot to'plami ishlab chiqaruvchining kodi, qurilma turi, bosilgan tugma kodi va boshqalar haqida ma'lumotlarni o'z ichiga oladi. Takroriy paketlar qisman yoki to'liq ma'lumot paketiga to'g'ri kelishi, uning bitlarini inversiya bilan nusxalashi yoki har bir takroriy paket uchun bir nechta bir xil bitlar ketma-ketligini ifodalovchi hech qanday ma'lumotni olib ketmasligi mumkin.

Paketlar orasidagi pauza davomiyligi: odatda 200 ms dan oshmaydi.

Ma'lumotlarni uzatish protokollari: quyidagi asosiy parametrlarni aniqlang:

Tashuvchi chastotasi: ko'pgina masofadan boshqarish pultlari uchun u 38 kHz ni tashkil qiladi, bu Trema IR qabul qiluvchisi sozlangan.

Axborot kodlash: Bu ma'lumotlar bitlarini uzatish printsipi. Keling, har bir bit bir impuls va bir pauza ketma-ketligida uzatiladigan uchta asosiy kodlash turini ajratib ko'rsatamiz:

Ishga tushirish, to'xtatish va o'tish signallari: ularning nomiga ko'ra, ular paketning boshida, oxirida yoki o'rtasida joylashgan.

STOP: Uzoq pauzani kodlashda paketdagi oxirgi bitning qiymatini aniqlab bo'lmaydi, chunki paketdan keyin uzoq pauza bo'ladi va oxirgi bit har doim "1" sifatida belgilanadi, shuning uchun To'xtash signali qo'shiladi. paketga, bu hech qanday ma'lumotni olib o'tmaydigan pulsdir.

Boshlash: Ikki fazali kodlashda Start signali talab qilinadi, chunki pauzadan paketni uzatishni boshlash mumkin emas.

Oʻchirish: Bu RS5, RS5X, RS6 (Philips) protokollarida qo'llaniladigan har bir yangi tugmani bosish bilan o'z qiymatini biroz o'zgartiradi, bu erda takroriy paketlar ma'lumotlar paketining ma'lumotlarini to'liq takrorlaydi. Shunday qilib, qabul qiluvchi qurilma tugmani ushlab turish va uni qayta bosish o'rtasidagi farqni aniqlay oladi.

impuls uzunligini kodlash- birinchi navbatda uzunligi uzatiladigan bitning qiymatiga bog'liq bo'lgan impuls uzatiladi, keyin pauza keladi, uning uzunligi bit qiymatiga bog'liq emas. Masalan: SIRC protokolida (Sony) “1” biti uchun impuls uzunligi = 1200 mks va “0” biti uchun = 600 mks, pauza uzunligi har doim 600 mks ni tashkil qiladi. Shunday qilib, puls uzunligi bo'yicha "1" ni "0" dan ajrata olasiz.

pauza uzunligi kodlash- birinchi navbatda puls uzatiladi, uning uzunligi uzatilgan bitning qiymatiga bog'liq emas, keyin pauza, uzunligi bitning qiymatiga bog'liq. Masalan: NEC protokolida “1” biti uchun pauza uzunligi = 1687,5 mks va “0” biti uchun = 562,5 mks, impuls uzunligi har doim 562,5 mks. Shunday qilib, siz pauza uzunligi bo'yicha "1" ni "0" dan ajrata olasiz.

ikki fazali kodlash- pulsning uzunligi pauza uzunligiga teng bo'lib, ularning ketma-ketligi uzatilgan bitning turini aniqlaydi. Masalan: RS5 protokolida (Philips) “1” bit uchun puls pauzadan keyin, “0” bit uchun esa pauza impulsdan keyin keladi. NRC protokoli (Nokia) uchun aksincha, “1” bit uchun pulsdan keyin pauza, “0” biti uchun esa pauzadan keyin puls keladi.

Misollar:

Bir martalik ma'lumotlarni uzatish:

#o'z ichiga oladi // Kutubxonani IQ transmitter iarduino_IR_TX VD(10) bilan ishlash uchun ulang; // IR-uzatuvchi ulangan PINni ko'rsatuvchi VD ob'ektini e'lon qilish void setup())( VD.begin(); // IR transmitter bilan ishlashni boshlash VD.send(0x00FFA25D); // 0x00FFA25D kodini bir marta yuborish , paketlar takrorlanmasdan ) void loop()() // Arduino yoqilganligini bildiruvchi 0x00FFA25D kodini yuboradi.

Qayta urinish paketlari bilan ma'lumotlarni uzatish:

#o'z ichiga oladi // Kutubxonani IQ transmitter iarduino_IR_TX VD(2) bilan ishlash uchun ulang; // IR-uzatuvchi ulangan PINni ko'rsatgan holda VD ob'ektini e'lon qiling void setup())( pinMode(3,INPUT); // Tugma ulangan 3-pinni pinMode(4) sifatida sozlang. INPUT); // Tugma ulangan 4 pinni, kirish pinMode(5,INPUT) sifatida sozlash; IQ uzatgich bilan ishlashni boshlang ) void loop())( if(digitalRead(3))(VD.send(0x00FFA25D, true);) // Agar 3-pinga ulangan tugma bosilsa, biz 0x00FFA25D kodini yuboramiz va u bosilganda, biz takroriy paketlarni yuboramiz, chunki funksiya haqiqiy parametr bilan chaqirilgan if(digitalRead(4))(VD.send(0x00FF629D, true);) // Agar 4-pinga ulangan tugma bosilsa, keyin biz 0x00FF629D kodini yuboramiz va uni bosib turganda biz takroriy paketlarni yuboramiz, chunki funktsiya true parametri bilan chaqirilgan if(digitalRead(5))(VD.send(0x00FFE21D, true);) // Agar tugma pin 5 ga ulangan bo'lsa, biz 0x00FFE21D kodini yuboramiz va uni bosib ushlab turganda, biz takroriy paketlarni yuboramiz, chunki funktsiya haqiqiy parametr bilan chaqirilgan )

Protokolni ko'rsatuvchi ma'lumotlarni uzatish:

#o'z ichiga oladi // Kutubxonani IQ transmitter iarduino_IR_TX VD(5) bilan ishlash uchun ulang; // IR uzatuvchi ulangan PINni ko'rsatgan holda VD ob'ektini e'lon qilish void setup() ( VD.begin(); // pinMode(6,INPUT) bilan ishlashni boshlash); // 6-pinni sozlang. tugmani kirish pinMode(7,INPUT); // Tugma ulangan 7-pinni, kirish pinMode(8,INPUT) sifatida sozlash; kirish sifatida VD.protocol("AeQQV) ~zK]Kp^KJp[@@@@@@@Bp"); // ELENBERG masofadan boshqarish pultidan ma'lumotlarni uzatish protokolini belgilang) // Protokol qatorini quyidagi orqali olishingiz mumkin. televizor pultidagi istalgan tugmani bosish // va bir xil nomdagi qabul qiluvchi funksiyasini parametrlarsiz chaqirish void loop())( if(digitalRead(4))(VD.send(0x417, true);) // yuborish ON/OFF signali (takrorlash paketlari bilan paketlar protokolda belgilangan vaqt oralig'idan keyin takrorlanadi) if(digitalRead(5) )(VD.send(0x425, true);) // VOL- signalini yuboring (takrorlash bilan). paketlar, paketlar protokolda ko'rsatilgan vaqt oralig'idan keyin takrorlanadi) if(digitalRead(6))(VD.send(0x427);) // VOL+ signalini yuboring (takroriy paketlarsiz ovoz balandligi tezroq ortadi, chunki funktsiya intervalsiz tsiklda chaqiriladi)

Ushbu misol transmitter boshqa IR masofadan boshqarish pultlarining signallarini qanday qilib to'liq taqlid qilishi mumkinligini ko'rsatadi.

Olingan protokol qatori protokol() funksiyasiga parametr sifatida uzatilishi kerak, shundan so‘ng send() funksiyasi yordamida tugma kodlarini yuborishingiz mumkin. Natijada, qurilmalar IR uzatgichga xuddi o'zlarining IR masofadan boshqarish pultiga javob bergandek javob beradi.

Kutubxonaning asosiy funktsiyalari tavsifi:

Kutubxonani ulash:

#o'z ichiga oladi // IR transmitter bilan ishlash uchun kutubxonani ulang. iarduino_IR_TX VD(PIN_NO[,INVERSION]); // IR uzatuvchi ulangan PIN raqamini ko'rsatuvchi VD ob'ektini e'lon qilish. // Bool tipidagi ikkinchi parametr transmitterga ma'lumotlarni teskari aylantirish kerakligini ko'rsatishi mumkin.

Funktsiya start();

  • Maqsad: IQ transmitter bilan ishlashni boshlash
  • Sintaksis: begin();
  • Variantlar: Yo'q.
  • Qaytish qiymatlari: Yo'q.
  • Eslatma: O'rnatish kodida bir marta chaqiriladi.
  • Misol:
VD.begin(); // IR transmitter bilan ishlashni boshlash

Funktsiya send();

  • Maqsad: ma'lumotlarni uzatish.
  • Sintaksis: yuborish(DATA [, HOLD ]);
  • Variantlar:
    • DATA - o'tkazilishi kerak bo'lgan uint32_t kabi kod;
    • HOLD - ixtiyoriy parametr, bool turi - bu nafaqat kodni uzatish, balki paketlarni qayta urinib ko'rish zarurligini ko'rsatadi. Tugmani bosib ushlab turganda funktsiya chaqirilsa, parametr mantiqiy bo'ladi.
  • Qaytish qiymatlari: Yo'q.
  • Eslatma: Agar funktsiya HOLD parametrisiz chaqirilsa yoki u yolg'onga teng bo'lsa, u holda funktsiya har safar chaqirilganda ko'rsatilgan kodni bir marta uzatadi. Agar funktsiya HOLD parametri rost ga teng bo'lgan holda chaqirilsa, u holda funksiya tugmani bekor qiladi va ushlab turganda qayta urinish paketlarini yuboradi (protokolda ko'rsatilgan intervalda).
  • Misol:
VD.send(0xCCDDEEFF); // 0xCCDDEEFF kodini yuboring. Agar funktsiya doimiy ravishda, tsiklda chaqirilsa, u har safar ushbu kodni yuboradi. VD.send(0xCCDDEEFF, rost); // 0xCCDDEEFF kodini yuboring. Agar funktsiya doimiy ravishda, tsiklda chaqirilsa, u kodni faqat birinchi marta yuboradi va keyin belgilangan ma'lumotlarni uzatish protokoliga muvofiq takroriy paketlarni yuboradi.

Funktsiya protokoli();

  • Maqsad: Ma'lumotlarni uzatish protokolini o'rnatish.
  • Sintaksis: protokol (STRING);
  • Variantlar:
    • LINE - 25 ta protokol belgilaridan + satr oxiri belgisidan iborat. Ushbu qatorni qabul qiluvchi uchun parametrlarsiz bir xil nomdagi funksiyani chaqirish orqali olish mumkin.
  • Qaytish qiymatlari: bool - satr to'g'ri protokol ma'lumotlarini o'z ichiga oladi yoki yo'q.
  • Eslatma: Funktsiya ma'lumotlarni uzatish protokolini o'rnatadi, shuning uchun IR uzatuvchi an'anaviy masofadan boshqarish pultlarining signallarini taqlid qilishi mumkin. Ushbu funktsiyani chaqirgandan so'ng, send() funksiyasi yordamida ma'lumotlarni uzatish yangi protokol yordamida amalga oshiriladi. Standart ma'lumotlarni uzatish protokoli "Avtomobil mp3" masofadan boshqarish pultiga mos keladi.
  • Misol:
VD.protocol("AeQQV~zK]Kp^KJp[@@@@@@@Bp"); // ELENBERG masofadan boshqarish pultidan ma'lumotlarni uzatish protokolini belgilang. // Endi transmitter belgilangan protokolga muvofiq ma'lumotlarni kodlash orqali yuboradi. // Televizorning masofadan boshqarish pultidagi istalgan tugmani bosish va parametrlarsiz IQ qabul qilgich uchun bir xil nomdagi funksiyani chaqirish orqali protokol qatorini olishingiz mumkin.

Chastota o'zgaruvchisi:

  • Qiymat: kHzda ma'lumot uzatishning tashuvchi chastotasini o'rnatadi;
  • Ma'lumotlar turi: uint8_t;
  • Eslatma: Agar o'zgaruvchiga qiymat berilmagan bo'lsa, u holda uzatish protokolda ko'rsatilgan chastotada amalga oshiriladi. Agar siz 0 qiymatini belgilasangiz, u holda ma'lumotlar modulyatsiyasiz uzatiladi.
VD.frequency=36; // Ma'lumot uzatish uchun tashuvchi chastotasini 36 kHz ga o'rnating. VD.send(0xCCDDEEFF); // 36 kHz tashuvchi chastotasi bilan ma'lumotlarni yuborish. VD.send(0xABCDEF); // 36 kHz tashuvchi chastotasi bilan ma'lumotlarni yuborish. // Agar siz chastota o'zgaruvchisi uchun yangi qiymat o'rnatsangiz yoki protocol() funksiyasini chaqirish orqali yangi ma'lumotlarni uzatish protokolini o'rnatsangiz, tashuvchi chastotasi o'zgaradi.

Ilova:

  • robotlarni, harakatlanuvchi, uchuvchi va suzuvchi modellarni, maishiy va maxsus jihozlarni boshqarish.
  • yoritishni yoqish / o'chirish, isitish, shamollatish, sug'orish va h.k.
  • eshiklarni ochish/yopish, panjurlar, tom oynalari, shamollatish teshiklari va boshqalar.

Har bir uyda televizor yoki boshqa masofadan boshqarish pulti mavjud. Ushbu qurilma istalgan qurilmani masofadan turib boshqarish imkonini beradi, bu juda qulay. Qimmatbaho kaloriyalarni isrof qilish va keraksiz harakatlar qilishning hojati yo'q. Agar sizda qurilmangiz bo'lsa va uni uzoqdan boshqarmoqchi bo'lsangiz, ushbu qurilmani masofadan boshqarishingiz mumkin. Agar xohlasangiz, o'z qo'llaringiz bilan masofadan boshqarish pultini yasashingiz mumkin, ammo bunga ehtiyoj yo'q va bu boshqa hikoya. Nega sizga masofadan boshqarish pulti kerak bo'lishi mumkin? - hammasi oddiy:

Dangasalik bizni umumiy energiya xarajatlarini kamaytirish uchun katta kuch sarflashga majbur qiladigan sifatdir.

Birinchi marta masofadan boshqarish pulti ixtirochi Nikola Tesla tomonidan 1898 yilda Madison Square Gardendagi ko'rgazmada "teleavtomatik" deb nomlangan radio boshqariladigan qayiqni taqdim etdi. Bugungi kunda ushbu texnologiya keng tarqaldi, faqat buyruqlarni uzatishning turli usullari (aloqa kanali) qo'shildi.

Asosiy aloqa kanallariga quyidagilar kiradi:

  • Radio kanali
  • Ultrasonik
  • Infraqizil

Ushbu maqolada biz qurilmani infraqizil masofadan boshqarish pulti bilan boshqarish haqida gapiramiz. Infraqizil nurlanish - bu ko'rinadigan yorug'likning qizil uchi va mikroto'lqinli nurlanish o'rtasidagi spektral hududni egallagan elektromagnit nurlanish. Infraqizil nurlanish inson ko'ziga ko'rinmaydi, lekin kamera yoki videokamera orqali ko'rish mumkin. Ko'pincha ular uyda televizorning masofadan boshqarish pultining funksionalligini tekshirishadi.

Bir vaqtlar eski ishimda men pultni va o'chirilayotgan xavfsizlik tizimidan "ko'zdan kechirish teshigi" (IR qabul qiluvchi) oldim, u uzoq vaqt ishlamay qoldi va nihoyat uni tekshirishga keldim. operatsiya.

Ushbu qabul qilgichni qismlarga ajratgandan so'ng, men ushbu "ko'z" da 4 ta IR qabul qiluvchisi bir-biriga lehimlanganligini ko'rdim. Bu to'rt tomondan IQ to'lqinlarini qabul qilish uchun qilingan. Va bu qulay, siz o'zingizni ma'lum bir qabul qilish burchagi bilan cheklashingiz shart emas.

Agar kerak bo'lsa, men to'rtta qabul qiluvchiga o'xshash sxemani ham chizdim. Men TSOP1836 IR qabul qiluvchilardan foydalandim, lekin siz boshqalardan foydalanishingiz mumkin. 360 graduslik qabul qilishni ta'minlash uchun siz tegishli IR qabul qiluvchilarni (keng qabul qilish burchagi bilan) tanlashingiz va ularni bir-biriga iloji boricha yaqinroq joylashtirishingiz kerak. Men qabul qiluvchilar bilan hech qanday muammoni sezmadim. Men shuningdek, bosilgan elektron platani va elementlarning joylashuvini ilovaga kiritdim.

Buyruqlarni qayta ishlash uchun men tabiiy ravishda arduino uno dan foydalanaman;
TSOP34836 (qabul qilish diapazoni yuqori, lekin qimmatroq) yoki TL1838. Har qanday IR masofadan boshqarish pultini, hatto televizordan ham olishingiz mumkin. Xo'sh, agar sizga masofadan boshqarish pulti kerak bo'lsa, siz arduino uchun to'plam sotib olishingiz mumkin.

Ish printsipi:
Masofadan boshqarish pultidagi tugmani bosganingizda, u tugma kodini infraqizil nurda yuboradi, shundan so'ng qabul qiluvchi ushbu tugma kodini oladi va uni tugmachaga qarab ma'lum bir harakatni bajaradigan aktuatorga yuboradi.

Shuningdek, siz IR to'lqinlari yordamida ma'lumotni qisqa masofaga uzatishingiz mumkin. Buyruqlar yoki ma'lumotni uzatish uchun siz IR transmitterli ikkinchi arduinodan foydalanishingiz mumkin. Ammo bunday uzatish tezligi juda sekin. Infraqizil kanalning afzalliklari elektromagnit parazitlarga befarqlikni o'z ichiga oladi.

Arduino IR signallarini qabul qilish uchun biz IR qabul qilgichni quyidagicha ulaymiz:

E'tibor bering, qabul qiluvchi oyoqlarning joylashuvi har xil bo'lishi mumkin.


Qabul qilgichning 3 ta oyoqlari bor, "+" va "-" quvvat manbai (asosan kuchlanish 3,3-5V) va ma'lumot oyog'i ma'lumotni qurilmaga uzatadi (bizning holatda, arduino). TSOP34836 uchun besleme kuchlanishi 2,7-5,5 voltni tashkil qiladi. Men standart arduino chiqishidan 5 voltdan foydalanaman.

Albatta, arduino uchun proshivka kerak. Ishlash algoritmi quyidagicha bo'ladi: masofadan boshqarish pultining yuqori tugmachasini bosganingizda arduino o'rni yoqadi va uni yana bosganingizda uni o'chiradi. Ushbu o'rni yordamida siz, masalan, orqa yorug'likni yoqishingiz mumkin, lekin o'rni ustidagi tugmachani bosishni dasturlash shart emas, siz kompyuterga buyruq chiqarishingiz yoki arduino-da ma'lum bir operatsiyani bajarishingiz mumkin va hokazo.
Ishni soddalashtirish uchun biz tayyor kutubxonadan foydalanamiz. Mikrodastur kodi:

#o'z ichiga oladi int RECEIVE_PIN = 11;//qabul qiluvchi kontakti int RELAY_PIN = 3;//o‘rni kontakti IRrecv irrecv(RECEIVE_PIN);//qabul qiluvchining pin kodini dekodlash natijalarini tayinlash;//qabul qilingan ma’lumotlar

bekor o'rnatish() (
Serial.begin(9600);
irrecv.enableIRIn(); // qabul qilgichni yoqing
pinMode(RELAY_PIN, OUTPUT); // chiqish uchun o'rni sozlang
digitalWrite (RELAY_PIN, HIGH); // yuqori qiymatni o'rnating
}

void loop() (
agar (irrecv.decode(&results)) (//agar ma'lumotlar olinsa
Serial.print("0x");
Serial.println(results.value, HEX);//qabul qilingan xabarni terminalga chiqarish
agar ((natijalar.qiymat == 0x8FF40BF) ||(natijalar.qiymat == 0xD72040BF)) digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));//agar tugma kodi 0x8FF40BF yoki 0xD7204 boʻlsa, sayt oʻzgartirilsa oʻzgartiriladi.
kechikish (200) // ikki marta tetiklashdan kechikish
irrecv.resume();// Keyingi qiymatni oling
}
}

Eskiz bilan bir oz tushuntirib beraman:



agar ((natijalar.qiymat == 0x8FF40BF) ||(natijalar.qiymat == 0xD72040BF))

Olingan qiymat "0x8FF40BF" va "0xD72040BF" bilan taqqoslanadi - bular o'n oltilik yozuvdagi tugma kodlari. Faqat ikkita ma'no, chunki men noyob kodlarga ega ikkita masofadan boshqarish pultini ishlataman.



digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));

"!digitalRead(RELAY_PIN)" dan tashqari raqamli pinni yozish uchun standart protsedura. Belgisi "!" inversiyani bildiradi, bizning holatlarimizda "RELAY_PIN" raqamli chiqish holatining inversiyasi.



Serial.print("0x");
Serial.println(results.value, HEX);//qabul qilingan xabarni terminalga chiqarish

Ushbu chiziqlar barcha qabul qilingan kodlarni terminalga chiqaradi. Ishchi dasturda bu shart emas, lekin ma'lum bir tugma uchun kerakli kodni topish kerak. Ya'ni, avval biz eskizni Arduino-ga yuklaymiz, terminalga o'tamiz va tugmani bosish orqali biz kerakli kodni olamiz.


IRremote kutubxonasida foydali bo'lishi mumkin bo'lgan bir nechta turli misollar ham mavjud.


Maqola ilovasida:


  • Arduino uchun eskiz

  • 4 datchik uchun PCB

Yaqinda men kichik loyiha uchun televizorning masofadan boshqarish pultini boshqarishim kerak edi arduino. G'oya konditsionerni boshqaruvchi orqali boshqarish edi arduino harorat sensori bilan. Mening konditsionerim juda qulay masofadan boshqarish pulti bilan birga keladi, lekin biz uni yoqish, haroratni sozlash va o'chirishni avtomatlashtirishimiz kerak. Uzoq izlanishlar natijasida o‘zimga yechim topa oldim. Kesish ostida u haqida batafsil ma'lumot.

U qanday ishlaydi

Ulanmoqda IQ qabul qiluvchi, yo'naltiramiz masofaviy boshqarish qabul qiluvchiga, signalni yozib oling va uni chiqaring Serial. (bu maqolaning birinchi qismi bo'lgani uchun biz signal yuborishni o'ylamaymiz. Biz ikkinchi qismda yuborish haqida gaplashamiz).

Bizga nima kerak

  • Arduino(yoki analoglar, men foydalanaman Tosduino- 2 baravar arzon, oddiy arduino bilan to'liq mos keladi)
  • yorug'lik chiqaradigan diod ( LED)
  • 220 kOhm qarshilik
  • Seriyadan IR qabul qiluvchi

Ulanish

IR qabul qiluvchi

LED

Arduino Non taxtasi Arduino
pin raqami 11 qarshilik 220 kOhm GND (GrouND)

IR texnologiyasi

Infraqizil nurlanish yordamida qurilmani ko'rinadigan masofada boshqarishning eng arzon usuli. Deyarli barcha audio va video uskunalarni shu tarzda boshqarish mumkin. Keng tarqalganligi tufayli talab qilinadigan komponentlar ancha arzon bo'lib, bu texnologiyani o'z loyihalarimiz uchun IR masofadan boshqarish pultini ishlatishni yoqtiradigan biz uchun ideal qiladi.

Infraqizil nurlanish aslida ma'lum bir rangga ega oddiy yorug'likdir. Biz odamlar bu rangni ko'ra olmaymiz, chunki uning to'lqin uzunligi 950 nm, bu ko'rinadigan spektrdan pastroqdir. Bu telemexanika ehtiyojlari uchun IR tanlanishining sabablaridan biri, biz undan foydalanmoqchimiz, lekin biz uni ko'rishdan manfaatdor emasmiz. Masofadan boshqarish pultidan chiqadigan infraqizil nurni ko'ra olmasak-da, bu biz uni ko'rinadigan qilib ko'ra olmaymiz degani emas.

Quyidagi videoda ko'rib turganingizdek, videokamera yoki raqamli kamera infraqizil nurni "ko'radi". Hatto eng arzon uyali telefonlarda ham o'rnatilgan kameralar mavjud. Shunchaki masofadan boshqarish pultini bunday kameraga qarating, istalgan tugmani bosing va siz LED miltillayotganini ko'rasiz.

Infraqizil masofadan boshqarish tizimlari uchun miniatyura qabul qiluvchilar seriyasi. PIN-diod va preamplifikator qo'rg'oshin ramkasida yig'ilgan va ular sifatida yaratilgan IQ filtri. Demodulyatsiya qilingan chiqish signali to'g'ridan-to'g'ri mikroprotsessor tomonidan dekodlanishi mumkin. - Bu standart qabul qilgich bo'lib, barcha asosiy uzatish kodlarini qo'llab-quvvatlaydi.

Qism Tashuvchi chastotasi
30 kHz
33 kHz
36 kHz
36,7 kHz
38 kHz
40 kHz
56 kHz

IRremote.h

Kutubxona yuklab olish IR masofaviy Github.com saytidagi mening omborimdan olishingiz mumkin

Ushbu kutubxonani o'rnatish uchun arxiv tarkibini quyidagi manzilga ko'chiring: arduino-1.x/libraries/IRremote Bu erda arduino-1.x - Arduino IDE o'rnatilgan papka, keyin arduino-1.x/libraries/IRremote fayli /IRremote.cpp mavjud va IRremote.h bo'lishi kerak

1-misol - masofadan boshqarish tugmasi uchun kodni olish

Ushbu eskiz masofadan boshqarish pultidagi bosilgan tugma kodini o'qiydi va biz ushbu koddan foydalanishimiz uchun ushbu tugma haqida ma'lumotni Serial portga yuboradi.

#o'z ichiga oladi int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); decode_results natijalari; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); // Qabul qilgichni ishga tushirish ) void loop() (if (irrecv.decode(&results)) ( Serial.print("0x"); Serial. println(results.value, HEX delay(50) irrecv.resume();// Keyingi qiymatni olish ) )

Men ushbu tugma kodlarini quyidagi misollarning barchasida ishlataman:

2-misol - masofadan boshqarish pultiga nom berish

Tugmalarning nomlarini Serial portga yuboramiz. (avval biz ushbu tugmalarning kodlarini ushlashimiz va ularga nom berishimiz kerak, kodga qarang, menimcha, u erda hamma narsa aniq bo'ladi).

#o'z ichiga oladi int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); decode_results natijalari; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() ( if (irrecv.decode(&results)) ( switch (results.value) (holat 0x77E1A0CB: Serial.println() "Center "); case 0x77E160CB: case 0x77E130CB: Serial.println("Pastga") irrecv.resume();

3-misol - masofadan boshqarish tugmasi yordamida LEDni yoqing

Endi o'zimizni o'rgataylik Arduino masofadan boshqarish pultidagi tugma orqali PIN 11 da LEDni yoqing

#o'z ichiga oladi int LED = 11; int holati = 0; // 0 = LED o'chirilgan, 1 = LED yoqilgan int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); decode_results natijalari; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED, OUTPUT); ) void loop() (if ((irrecv.decode(&natijalar)) && (results.value==0x77E1A0CB) ) ( agar (holat == 0) (holat = 1; digitalWrite(LED, YUQORI); Serial.println("Markaz - YUQORI"); ) else (holat = 0; digitalWrite(LED, LOW); Serial.println( "Center - LOW" kechikish (50);

Misol No 4 - masofadan boshqarish pulti bilan PWM

Keling, LED yorug'ligini nazorat qilaylik (chunki u PWM-ga ega 11-portga ulangan, hech qanday muammo bo'lmasligi kerak). Masofadan boshqarish pultidagi yuqoriga va pastga tugmalari yorqinlikni boshqarish uchun ishlatiladi.

#o'z ichiga oladi int RECEIVE_PIN = 2; int yorqinligi = 0; int LED = 11; IRrecv irrecv(RECEIVE_PIN); decode_results natijalari; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() ( if (irrecv.decode(&results)) ( switch (results.value) (holat 0x77E150CB: if(yorqinlik)< 255) { brightness+=15; Serial.println(brightness); } break; case 0x77E130CB: if(brightness >0) ( yorqinlik-=15; Serial.println(yorqinlik); ) uzilish; ) analogWrite(LED, yorqinlik); irrecv.resume(); ))

Qandaydir tarzda shunday. Maqolaning ikkinchi qismida qabul qilingan signalni uskunamizga qanday yuborishimiz mumkinligi muhokama qilinadi. Mening holimda bu konditsioner edi. Shuningdek, ikkinchi qismda boshidan oxirigacha kalitni yig'ish + ish namunasi ko'rsatiladigan video bo'ladi.

Ushbu darsda biz IR qabul qilgichni Arduino-ga ulashni ko'rib chiqamiz. Biz sizga IQ qabul qilgich uchun qaysi kutubxonadan foydalanish kerakligini aytamiz, masofadan boshqarish pultidan infraqizil qabul qilgichning ishlashini sinash uchun eskizni namoyish qilamiz va signalni qabul qilish uchun C++ tilidagi buyruqlarni tahlil qilamiz. Darhol ta'kidlaymizki, Arduino IR sensori har bir masofadan boshqarish pulti uchun mos emas, signal chastotasi farq qilishi mumkin;

IQ qabul qiluvchi qurilma. Ish printsipi

Infraqizil nurlanish qabul qilgichlari arzonligi, soddaligi va foydalanish qulayligi tufayli bugungi kunda maishiy texnikada keng qo'llaniladi. Ushbu qurilmalar sizga masofadan boshqarish pulti yordamida qurilmalarni boshqarish imkonini beradi va ularni deyarli har qanday turdagi uskunalarda topish mumkin. Ammo shunga qaramay, Bluetooth moduli asta-sekin tobora ommalashib bormoqda.

IQ qabul qiluvchining ishlash printsipi. Masofadan boshqarish pultidagi signalni qayta ishlash

Arduino-dagi IR qabul qilgich ma'lum bir vaqt va chastotadagi impulslar ko'rinishidagi infraqizil signalni qabul qilish va qayta ishlashga qodir. Arduino uchun to'siqlar sensori va masofa o'lchagich ishlab chiqarishda foydalaniladi. Odatda, IQ qabul qiluvchining uchta oyog'i bor va quyidagi elementlardan iborat: PIN-fotodiod, kuchaytirgich, tarmoqli o'tkazgich filtri, amplituda detektori, integratsiya filtri va chiqish tranzistori.

O'rtasida bo'lgan fotodiodda infraqizil nurlanish ta'siri ostida p Va n hududlar yarimo'tkazgichning qo'shimcha hududini yaratdi ( i-mintaqa), oqim oqa boshlaydi. Signal kuchaytirgichga, keyin esa belgilangan chastotaga sozlangan tarmoqli o'tkazgich filtriga o'tadi: 30; 33; 36; 38; 40 va 56 kilogerts va qabul qiluvchini shovqinlardan himoya qiladi. Interferentsiya har qanday uy jihozlaridan kelib chiqishi mumkin.

Masofadan boshqarish pultidan signal Arduino IR qabul qilgich tomonidan qabul qilinishi uchun masofadan boshqarish pulti IQ qabul qilgichdagi filtr o'rnatilgan chastotada bo'lishi kerak. Shuning uchun har bir masofadan boshqarish pulti ishlamaydi. Siz bir xil chastotali IR qabul qilgich va IR uzatuvchini tanlashingiz kerak. Filtrdan keyin signal filtr va chiqish tranzistorini birlashtirgan amplitudali detektorga o'tadi.

IR qabul qilgichni Arduino-ga qanday ulash mumkin

Infraqizil qabul qiluvchilarning korpuslarida qurilmani tashqi elektromagnit maydonlardan himoya qilish uchun optik filtr mavjud, ular qabul qilingan nurlanishni fotodiodga qaratish uchun maxsus shakldan qilingan; IQ qabul qilgichni Arduino UNO ga ulash uchun uchta oyoq ishlatiladi, ular GND, 5V va A0 ga ulanadi. O'rnatish vaqtida IR sensori yoqilmasligi uchun boshlash uchun 3,3 voltdan foydalanishni tavsiya etamiz.

Ushbu dars uchun bizga quyidagi ma'lumotlar kerak bo'ladi:

  • Arduino Uno / Arduino Nano / Arduino Mega taxtasi;
  • non taxtasi;
  • IR qabul qiluvchi;
  • masofaviy boshqarish;
  • 1 LED va 220 Ohm qarshilik;
  • erkak-erkak va erkak-ayol simlar.


IQ qabul qilgichning Arduino analog portiga ulanish diagrammasi

Yuqorida ko'rsatilgan diagramma bo'yicha IR qabul qilgichni ulang va LEDlarni 12 va 13-pinlarga ulang. Dasturni yuklab olishdan oldin, agar u hali o'rnatilmagan bo'lsa, IRremote.h kutubxonasini o'rnatishingiz kerak bo'ladi. Bu kutubxona Arduino IDE dasturlash muhitining standart kutubxonalariga tegishli emas. IRremote.h kutubxonasi va tayyor eskizni bitta arxivda Google Drive-dan havola orqali yuklab olishingiz mumkin.

Arduino IR qabul qiluvchisi uchun eskiz:

#o'z ichiga oladi // IR qabul qilgich uchun kutubxonani ulang IRrecv irrecv(A0); // IR qabul qilgich ulangan pinni ko'rsating decode_results natijalari; bekor o'rnatish () // protsedurani o'rnatish ( irrecv.enableIRIn (); // infraqizil signalni olishni boshlash pinMode (13, OUTPUT); // pin 13 chiqish bo'ladi pinMode(12, OUTPUT); // pin 12 chiqish bo'ladi pinMode (A0, INPUT); // PIN A0 kirish bo'ladi (ing. “input”) Serial.begin(9600); // port monitorini ulang) bekor sikl () // protsedura sikli ( if (irrecv.decode (& natijalar)) // agar ma'lumotlar kelgan bo'lsa, buyruqlarni bajaring( Serial.println(natijalar.qiymat); // qabul qilingan ma'lumotlarni portga yuboring // qabul qilingan signalga qarab LEDlarni yoqing va o'chiring agar (natijalar.qiymat == 16754775) ( digitalWrite (13, YUQORI); ) if (natijalar.qiymati == 16769055) ( digitalWrite (13, LOW); ) if (results.value == 16718055) ( digitalWrite (12,) YUQORI ) agar (results.value == 16724175) ( digitalWrite (12, LOW ); ) irrecv.resume (); // IR qabul qilgichda keyingi signalni qabul qilish } }

Kod uchun tushuntirishlar:

  1. IRremote.h kutubxonasi buyruqlar to'plamini o'z ichiga oladi va eskizni soddalashtirishga imkon beradi;
  2. Decode_results bayonoti o'zgaruvchan nomi natijalarini masofadan boshqarish pultidan olingan signallarga tayinlaydi.

IQ sensori Arduino mikrokontrolleridagi ko'plab qurilmalarda, jumladan, Arduino-dagi servo drayverni IR qabul qilgichdan masofadan boshqarishda ishlatilishi mumkin. Sozlashda siz Arduino IDE port monitorini yoqishingiz va masofadan boshqarish pultidagi u yoki bu tugma orqali qanday signal yuborilishini bilib olishingiz kerak. Olingan kodlar eskizda if() shartlarida juft tenglik belgisidan keyin ishlatilishi kerak.

Ushbu mavzu bo'yicha xabarlar:


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 turaylik va ikkinchi tugma kodlanganda o'chadi.

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, HIGH); // LEDni yoqing) agar (natijalar.qiymat == 16761405) // Kodlashni olayotganda 2(digitalWrite (LED, LOW); // LEDni o'chiring) irrecv.resume(); // Keyingi qiymatni oling } }
qarashlar