Mundarija:

Universal masofadan boshqarish pulti - Ardiuino, infraqizil: 5 qadam
Universal masofadan boshqarish pulti - Ardiuino, infraqizil: 5 qadam

Video: Universal masofadan boshqarish pulti - Ardiuino, infraqizil: 5 qadam

Video: Universal masofadan boshqarish pulti - Ardiuino, infraqizil: 5 qadam
Video: How to use Arduino as TV Remote Controller with Infrared 2024, Noyabr
Anonim
Universal masofadan boshqarish pulti - Ardiuino, infraqizil
Universal masofadan boshqarish pulti - Ardiuino, infraqizil

Salom! Bu ko'rsatmada men sizga infraqizil masofadan boshqarish pultidan foydalanadigan ko'p narsalar bilan ishlaydigan, shuningdek, boshqa masofadan boshqarish pultlari yuborgan infraqizil signalni "eshitadigan" va dekodlaydigan universal universal masofadan boshqarish pultini qanday qurish va dasturlashni ko'rsataman.

Menga masofadan boshqarish pultini yaratishga nima ilhom bergani haqida bir oz ma'lumot - men ham ko'pchiligim kabi masofadan boshqarish pultimni doimo yo'qotaman va bu falokat juda asabiylashadi, shuning uchun men buni hal qilishga imkon beraman! Men bu masofadan boshqarish pultini qurdim va ehtiyotkorlik bilan o'zimning karavotimga o'rnatdim (men ham yog'ochdan ishlayman) - agar u karavotning bir qismi bo'lsa, men masofadan boshqarish pultini yo'qotolmayman!

Ta'minotlar

Sizga kerak bo'lgan narsalar: -Arduino UNO yoki Nano - masofa boshqa taxtalarda farq qilishi mumkin

-Lehimsiz non paneli (yoki agar siz uni doimiyroq qilishni xohlasangiz, lehimli plastinka)

-Har xil rang va uzunlikdagi simlar

- Lahzali tugmalar (5) (siz boshqa tugmachalarni qo'shishingiz mumkin, lekin siz analog pinlardan bittasi ishlatilgani uchun raqamli pinlardan foydalanishingiz kerak bo'ladi - siz tortish rezistorlarini to'g'ri ishlatganingizga ishonch hosil qilishingiz kerak. yoki rezistorlarni pastga tushiring va tugmachalarni chiqarib oling)

-10K Ohm qarshilik (5) (agar siz ko'proq tugmachalarga ega bo'lishni xohlasangiz, sizga ko'proq kerak bo'ladi)

-470 Ohm qarshilik (2)

-Infraqizil LED

-Qizil LED

-Infraqizil sensor (men VS1838B raqamini ishlatardim, siz boshqasini ishlatishingiz mumkin, faqat pinni tekshiring)

(Majburiy emas) lehimlantiruvchi temir, lehim, lehim oqimi.

1 -qadam: O'chirish sxemasi:

O'chirish davri
O'chirish davri

1). Men har doim o'z komponentlarimni joylashtirishdan boshlashni yaxshi ko'raman, chunki bu har doim non panelidagi tartibni boshqaradi.

-tugmachalarni bosing

-LEDS: Qizil LED va IQ LED tandemda ulangan, shuning uchun siz IR LED nima qilayotganini ko'rishingiz mumkin.

-Sensor

2). Rezistorlar

- Biz tugmachalarga biriktirilgan beshta 10K rezistorlar "pastga tushirish" rezistorlari deb ataladi. Rezistorlarni pastga tushiring, agar tugma bosilmasa, tegishli Arduino piniga 0 volt (yoki hech bo'lmaganda unga yaqin) tushadi. Rezistorlarni tushirish (yoki tortish) haqida qo'shimcha ma'lumot olish uchun bu erda chuqur qo'llanma:

www.electronics-tutorials.ws/logic/pull-up…

Bu rezistorlar umuman zarur bo'lmasligi mumkin, lekin agar siz "arvoh" surishlarini boshdan kechirayotgan bo'lsangiz, bu, ehtimol, sig'imli biriktirma va rezistorlarni pastga tushirishining oldini oladi.

3). O'chirish simlari

4). 5V va er simlari

Ma'lumot uchun taqdim etilgan rasmdan foydalaning! uni sizning ehtiyojlaringiz uchun o'zgartirishdan qo'rqmang!

2 -qadam: Kod:

#inc conste RECV_PIN = 7; // IQ sensori o'qilgan pin int Button1 = A4; // Eng chapdagi int tugmasi2 = A3; // chapdan 2 -chi int Button3 = A2; // O'rta int tugmasi4 = A1; // 2 -chi o'ngga int tugmachasi5 = A0; // O'ng tomonga int LED = 3; // IQ LED va qizil LED int val = 0; // Qiymatni o'zgartirish IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results natijalari;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pin rejimi (LED, OUTPUT); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (rost);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // sig'im bilan bog'liq muammolarni oldini olish uchun raqamli o'qish o'rniga analog o'qishdan foydalanish. shuningdek, tugmachalarni o'chirishga yordam beradi. // 900 -da analog o'qish bo'lishi mumkin, bu qiymatlarda bir oz tebranish xonasiga ruxsat beradi, demak, pin uchun to'liq 5V qo'llanilmasa ham, infraqizil yuboriladi. // lekin 900, kapasitif ulanish kechikishi tufayli xato o'qilmasligi uchun etarli darajada yuqori (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // "i <3" dagi qiymatni o'zgartirish signalning darhol takrorlanish sonini o'zgartiradi. shuning uchun "i <2" signalni ikki marta takrorlaydi. // agar sizning televizoringiz javob bermasa, bu raqam bilan o'ynashingiz kerak bo'lishi mumkin, odatda 1 yoki 3 tasi ko'p ishlaydi, agar ular javob bermasa, g'alati raqamlarni sinab ko'ring. // shuningdek, signalni kechiktirish vaqtining ichki qiymatlari bilan o'ynash kerak bo'lishi mumkin, masalan, mening TV 10 -da ishlaydi, lekin 30 -da emas. {irsend.sendSony (0xa90, 12); // Sony TV quvvat kodi, mening televizorim uchun kod 3x3 yuborilishi kerak, shuning uchun 3 ta puls, uch marta kechiktirish (10); // "ichki signal kechikishi" uchun (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" - bit raqami, turli protokollar har xil bit raqamlarini chaqiradi. NEC 32 yoshda, Sony 12 yoshda, siz boshqalarni kechiktirishni qidirishingiz mumkin (10); uchun (int i = 0; i 900) {uchun (int i = 0; i 900) {uchun (int i = 0; i 900) {uchun (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Sony TV quvvatini pasaytirishni kechiktirish (100);}}} kechiktirish (100);} if (irrecv.decode (& natijalar)) // kodning quyi qismi infraqizil signallarni turli masofadan boshqarish pultlaridan izohlashga imkon beradi. {Serial.println (results.value, HEX); // u "NEC, Sony, Etc.." protsedurasini va "c90, a90, FF02FD" televizor kodini yaratadi, siz TV kodi kalitining old qismiga 0x qo'shishingiz kerak bo'ladi (results.decode_type) {case DENON: Serial.println ("DENON"); tanaffus; ish NEC: Serial.println ("NEC"); tanaffus; ish PANASONIC: Serial.println ("PANASONIC"); tanaffus; SONY holati: Serial.println ("SONY"); tanaffus; holat RC5: Serial.println ("RC5"); tanaffus; ish JVC: Serial.println ("JVC"); tanaffus; holat SANYO: Serial.println ("SANYO"); tanaffus; MITSUBISHI holati: Serial.println ("MITSUBISHI"); tanaffus; holat SAMSUNG: Serial.println ("SAMSUNG"); tanaffus; LG korpusi: Serial.println ("LG"); tanaffus; holat RC6: Serial.println ("RC6"); tanaffus; ish DISH: Serial.println ("TOSH"); tanaffus; ish SHARP: Serial.println ("SHARP"); tanaffus; ish WHYNTER: Serial.println ("WHYNTER"); tanaffus; ish AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); tanaffus; standart: ish BILMAS: Serial.println ("BILMAYDI"); tanaffus;} irrecv.resume ();}}

3 -qadam: Chuqurlikdagi kod: IR signallarini yuborish

Men kod satrlariga ularning satr raqami bilan murojaat qilaman - davom etish uchun ushbu havoladan foydalaning:

pastebin.com/AQr0fBLg

Birinchidan, z3t0 bo'yicha IR masofaviy kutubxonasini kiritishimiz kerak.

Mana kutubxonaga havola:

github.com/z3t0/Arduino-IRremote

Agar sizga kutubxonani to'g'ri yuklab olish va uni IDE -ga o'rnatish bo'yicha qo'llanma kerak bo'lsa:

www.arduino.cc/en/guide/libraries

1 -qatorga kutubxona kiradi.

Keyinchalik, biz bir nechta o'zgaruvchilarni e'lon qilishimiz kerak, 2-12-qatorlar buni amalga oshiradi.

Biz o'zgarmaydigan o'zgaruvchilarni aniqlash uchun "cost int" dan foydalanamiz, faqat shu toifaga kiradi.

O'zgaruvchan o'zgaruvchilarni aniqlash uchun "int" dan foydalanamiz.

Biz LED pin uchun modulyatsiyali (PWM) pulsli pinni ishlatishimiz kerak - uning yonida "~" bo'lgan har qanday pin etarli bo'ladi, mening kodimda - biz raqamli pin 3 dan foydalanamiz.

Keyinchalik, biz sozlashimiz kerak - bu kod Arduino yoqilganda yoki qayta o'rnatilganda faqat bir marta ishlaydi.

E'tibor bering, biz kirish va chiqishlarni belgilaymiz (15-20), ketma-ket monitorni (21) ishga tushiramiz, IQ sensori (22) va Arduino-ga sensordan signal kelganda bortdagi LEDni yonib turishini aytamiz. 23).

Keyin, biz o'z tsiklimizni tuzamiz - bu kod bir necha marta ishlaydi, yuqoridan pastgacha bir necha marta sekundiga.

25 -qatorda biz if iborasini ishlatamiz, bu Arduino -ga "aniq mezonlarni qidiring, agar bu mezonlarga javob bersa, aynan shu ishni bajaring" deb aytadi. Bunday holda, mezonlar analogRead (Button1)> 900 yoki boshqacha aytganda - "Arduino, biz ilgari A4 pin deb belgilagan tugma1 ga qarang, agar qabul qilingan analog signal 900 dan katta bo'lsa, iltimos, keyingi ko'rsatmalarimizga o'ting., agar bo'lmasa, iltimos, davom eting ". Bu erda ochish uchun ozgina narsa bor, shuning uchun sho'ng'iymiz: Arduino -dagi analog signal 5V ga teng yoki undan kam, 5V 1023 ga teng, 0V esa 0 ga teng. son va matematikadan foydalanib, biz bu raqamni yoki aksincha, kuchlanishni aniqlay olamiz. 1024ni (biz 0 birlikni o'z ichiga olamiz) 5 ga bo'ling, bu bizga 204,8 ni beradi. Masalan, biz 900 raqamini ishlatamiz, uni kuchlanishga aylantirish uchun biz 900 ~ 204,8 ga bo'linib, bizga ~ 4,4V beradi. Biz Arduino -ga ~ 4,4 voltdan yuqori kuchlanishni qidirishni aytamiz va agar shunday bo'lsa, keyingi ko'rsatmamizni bajaring.

Keyingi ko'rsatmalar haqida gapirganda (25 -qator), biz irsend.sendNEC (0xFF02FD, 32) ni ko'ramiz. Bu shunday deydi: "Arduino, NEC protokoliga, xususan FF02FD signaliga mos keladigan modulyatsiyalangan pulsni yuboring va uning 32 bitli uzunligiga ishonch hosil qiling". Bu bizning IR LED -ni boshqa qurilmalar tushunadigan tarzda miltillaydi. Biroz o'ylab ko'ring, Morze kodiga o'xshaydi, lekin ko'rinmas yorug'lik bilan! U erda juda ko'p turli xil protokollar mavjud, ularning har birida yuzlab, minglab individual signallar va har birining o'ziga xos bit raqami bor - bizning qurilmamiz bu signallarning katta miqdorini taniy oladi, lekin biz keyinroq sho'ng'iymiz!

28 -qatorda bizda birinchi kechikish bor - bu tasodifan takrorlanmagan signallarning oldini olish uchun, tugma bosilgandan va IQ signal yuborilgandan so'ng, barmog'imizni tugmachadan chiqarish uchun bizda 100 millisekund bor. Bu ko'p vaqtni talab qilmaydi, lekin amalda u yaxshi ishlayotganga o'xshaydi. kechiktirish funktsiyasi Arduinoga "X millisekund uchun hech narsa qilmasligini" aytadi va ma'lumot uchun ularning soniyasi 1000 millisekundni tashkil qiladi.

Keyingi 29 tugmachasi, 5 -tugmachaga o'tish (menda bu pultda 4 ta tugma bor edi, beshinchisi qo'shilgan, shuning uchun biz ishlamaymiz). Bu, ruhiy jihatdan, 1 -tugma bilan bir xil, lekin bir nechta asosiy farqlar bilan. Siz ko'radigan birinchi farq - bu for -iborasi - bu aslida boshqa tsikl - boshqa katta loopli loopception bo'lgan loop. Xususan, bizda "for (int i = 0; i <3; i ++)" bor, buni "Arduino, 0dan boshlaylik, 3 marta bo'lguncha quyidagi ko'rsatmalarni takrorlang" deb o'qing. For funktsiyasi ishlatiladi, chunki ko'plab qurilmalar takrorlangan signalni qidirish uchun dasturlashtirilgan va bu holda bu erda 3 marta. Agar qurilmangiz boshqa takrorlash jadvalini talab qilsa, 3 raqamini boshqa raqamga o'zgartirishingiz mumkin. 5 tugmachasining yana bir muhim farqi shundaki, u yana 3 marta yoki 3x3 marta takrorlanadi. Boshqacha aytganda, biz signalni 3 marta yuboramiz, 10 millisekund kutamiz, yana 3 marta yuboramiz, yana 10 millisekund kutamiz, keyin yana 3 marta yuboramiz. Ushbu turdagi aloqa qurilmalarni yoqish va o'chirish uchun odatiy holdir va bu sizning televizoringiz yoki qurilmangiz xohlaganidek bo'lishi mumkin - buning kaliti kerakli natijaga erishmaguningizcha hamma o'zgaruvchilar bilan o'ynashdir. Qisqa kechikish qiymatini o'zgartiring, takroriy qiymatni o'zgartiring, 3 ta o'rniga 6 ta partiya yuboring va hokazo. Qurilmalar o'zboshimchalik bilan signal berish qoidalari bilan dasturlashtirilgan, tasavvur qiling -a, televizorning masofadan boshqarish pulti sizning ovoz paneli bilan bir xil signal yuborganmi? har safar televizoringizdagi kanalni o'zgartirganingizda, ovozli panelingiz o'chadi - shuning uchun ham signalning har xil qoidalari mavjud.

Keyingi uchta tugma, yuqorida aytib o'tilganidek, hech bo'lmaganda bir xil printsiplar bilan dasturlashtirilgan - shuning uchun biz 55 -qatorga o'tishimiz mumkin.

4 -qadam: Chuqurlikdagi kod: IR signallarini qabul qilish

Chuqurlikdagi kod: IR signallarini qabul qilish
Chuqurlikdagi kod: IR signallarini qabul qilish

55 -qatorda biz Arduino -ni boshqa masofadan boshqarish pultlari tomonidan yuborilgan IQ signallarini talqin qilish uchun dasturlashni boshlaymiz - bu sizning masofadan boshqarish pultlari ishlatadigan protokollar va signallarni aniqlash uchun kerak. 55 -satrdagi birinchi kod satri, agar (irrecv.decode (& natijalar) buni "Arduino, IR kodini qidiring, agar topsangiz, haqiqiy qiymatni qaytaring, agar hech narsa topilmasa, yolg'onni qaytaring. To'g'ri bo'lsa, yozib oling") ma'lumotlarni "natijalar" ga aylantiring.

56 -qatorga o'tishda bizda Serial.println (results.value, HEX) bor, unda "Ardunio, natijalarni ketma -ket monitorda HEX formatida chop eting" yozilgan. "O'n oltilik" degan ma'noni anglatuvchi o'n oltilik - bu ikkilik qatorni (faqat 0 va 1 -chi) qisqartirish usuli. Masalan, 101010010000 - "a90", televizorni o'chirish va yoqish uchun ishlatiladigan kod, va 111111110000001011111101 - bu RGB tasmasini boshqaradigan 0xFF02FD. Siz ikkilikni oltilikka aylantirish uchun yuqoridagi jadvaldan foydalanishingiz mumkin va aksincha yoki quyidagi havoladan foydalanishingiz mumkin:

www.rapidtables.com/convert/number/hex-to-…

57 -qatorda bizda kommutator korpusi deb nomlangan yangi funksiya mavjud.

Asosan, kommutator korpusi bizga ma'lum bir o'zgaruvchining natijasi bo'yicha har xil ko'rsatmalarni ko'rsatishga imkon beradi. tanaffus switch iborasidan chiqadi va har bir bayonot oxirida ishlatiladi.

Biz Arduino -ning har xil masofadan boshqarish pultlari protokollari asosida ketma -ket monitorda chop etish usulini o'zgartirish uchun bu erdan foydalanamiz.

5 -qadam: Xulosa

Agar sizda biron bir savol bo'lsa - iltimos, bu erda menga murojaat qiling! Sizga qo'limdan kelganicha yordam berishga harakat qilishdan baxtiyorman.

Umid qilamanki, siz hayotingizni biroz yaxshilash uchun foydalanishingiz mumkin bo'lgan narsani o'rgandingiz!

-RB

Tavsiya: