Mündəricat:
- Təchizat
- Addım 1: Dövrün qurulması:
- Addım 2: Kod:
- Addım 3: Dərinlikdəki Kod: IR Siqnallarının Göndərilməsi
- Addım 4: Dərinlikdəki Kod: IR Siqnallarının Alınması
- Addım 5: Nəticə
Video: Universal TV Uzaqdan - Ardiuino, İnfraqırmızı: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Salam! Bu təlimatda, sizə infraqırmızı uzaqdan istifadə edən bir çox şeylə işləyəcək və eyni zamanda digər müxtəlif uzaqdan idarəetmə vasitələri ilə göndərilən bir infraqırmızı siqnalın "qulaq asması" və deşifr etməsi üçün öz universal pultunuzu necə quracağınızı və proqramlaşdıracağınızı göstərəcəyəm.
Bu pultu qurmağım üçün mənə ilham verən bir az məlumat - mən də çoxunuz kimi pultlarımı daim itirirəm və bu fəlakət olduqca sinir bozucudur, ona görə də onu həll etməyə imkan verirəm! Mən bu pultu düzəltmişəm və ehtiyatla özümün hazırladığım yataq çərçivəsinə yerləşdirmişəm (mən də ağac emalı işçisiyəm) - yataq çərçivəmin bir hissəsidirsə pultu itirə bilmərəm!
Təchizat
Ehtiyac duyacağınız şeylər: -Arduino UNO və ya Nano - yürüş digər lövhələrə görə dəyişə bilər
-Lehimsiz çörək taxtası (və ya daha daimi etmək istəyirsinizsə lehimlənə bilən lövhə)
-Fərqli rəng və uzunluqdakı tellər
-Minariya düymələri (5) (daha çox düymə əlavə edə bilərsiniz, ancaq analog pinlərdən 1 -dən başqa hamısı istifadə edildiyi üçün rəqəmsal sancaqlar istifadə etməlisiniz - çəkmə rezistorlarından düzgün istifadə etdiyinizə əmin olmalısınız. və ya rezistorları aşağı çəkin və düymələri çıxarın)
-10K Ohm rezistor (5) (daha çox düymə istəyirsinizsə, bunlardan daha çoxuna ehtiyacınız olacaq)
-470 Ohm müqavimət (2)
-İnfraqırmızı LED
-Qırmızı LED
-İnfraqırmızı Sensor (VS1838B hissə nömrəsini istifadə etdim, başqa birini istifadə edə bilərsiniz, sadəcə çıxışı yoxlayın)
(İsteğe bağlı) Havya, Lehim, Lehim Akısı.
Addım 1: Dövrün qurulması:
1). Həmişə komponentlərimi yerləşdirməklə başlamağı sevirəm, çünki bu həmişə çörək taxtasındakı düzeni idarə edir.
-Düymələri basın
-LEDS: Qırmızı LED və İQ LED tandemdə bağlanır, buna görə də IR LED -in nə etdiyini görə bilərsiniz.
-Sensor
2). Rezistorlar
- Düymələrə bağladığımız beş ədəd 10K rezistora "aşağı çək" dirənçləri deyilir. Rezistorları aşağı çəkin, bir düyməyə basılmadıqda, müvafiq Arduino pininin 0 Volt (və ya ən azından ona yaxın) əldə etdiyinə əmin olun. Rezistorların aşağı salınması (və ya çəkilməsi) haqqında daha çox məlumat üçün burada dərin bir bələdçi var:
www.electronics-tutorials.ws/logic/pull-up…
Bu rezistorlar tamamilə lazım olmaya bilər, ancaq "xəyal" itələmələri alırsınızsa, ehtimal ki, kapasitiv birləşmə və müqavimətçilərin aşağı salınması bunun qarşısını alır.
3). Dövrə telləri
4). 5V və Topraklama Telləri
İstinad üçün təqdim olunan şəkildən istifadə edin! ehtiyaclarınız üçün dəyişdirməkdən qorxmayın!
Addım 2: Kod:
#daxil edin const int RECV_PIN = 7; // IR sensoru ox pin pin But Button1 = A4; // En Uzaq Sol int Button2 = A3; // soldan 2 -ci int Button3 = A2; // Orta int Button4 = A1; // sağda 2 -ci int Button5 = A0; // Sağdan ən uzaqda int LED = 3; // IR LED və Qırmızı LED int val = 0; // Dəyişən dəyər IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results nəticələri;
void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, Çıxış); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (doğru);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // əsir tutum problemlərinin qarşısını almaq üçün rəqəmsal oxumaq əvəzinə analoji oxumadan istifadə etmək. həmçinin düymələri çıxarmağa kömək edir. // 900 -də analoqun oxunması, dəyərlərdə bir az tərpənmə otağına imkan verir, yəni pinə tam 5V tətbiq olunmasa belə infra siqnalı göndəriləcək. // lakin 900, kapasitif bağlama gecikməsi səbəbindən səhv oxunmayacaq qədər yüksəkdir (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // "i <3" dəki dəyəri dəyişdirmək, siqnalın dərhal təkrarlanma sayını dəyişəcək. buna görə "i <2" siqnalı iki dəfə təkrarlayacaq. // Televizorunuz cavab vermirsə, ümumiyyətlə bu nömrə ilə oynamağınız lazım ola bilər, ümumiyyətlə ən çox 1 və ya 3 işləyir, əgər cavab vermirsə, tək ədədləri sınayın. // intra siqnal gecikmə vaxtı dəyərləri ilə də oynamağınız lazım ola bilər, məsələn, mənim TV 10 -da işləyir, amma 30 yox. {irsend.sendSony (0xa90, 12); // Sony TV -nin güc kodu, televizorum üçün kodun 3x3 göndərilməsi lazımdır, buna görə 3 zərbə, üç ayrı dəfə gecikmə (10); // "int siqnal gecikməsi" üçün (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" bit nömrəsidir, fərqli protokollar fərqli bit nömrələri tələb edir. NEC 32, Sony 12, digərlərinə baxa bilərsiniz gecikmə (10); for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Sony TV gücü Səs Azaltma gecikməsi (100);}}} gecikmə (100);} if (irrecv.decode (& nəticələr)) // kodun aşağı hissəsi müxtəlif uzaqdan idarə olunan infraqırmızı siqnalları şərh etməyə imkan verir. {Serial.println (results.value, HEX); // "NEC, Sony, Etc.." prosedurunu və "c90, a90, FF02FD" televiziya kodunu yaradacaq, TV Kod açarının önünə 0x əlavə etməlisiniz (results.decode_type) {case DENON: Serial.println ("DENON"); fasilə; iş NEC: Serial.println ("NEC"); fasilə; hal PANASONIC: Serial.println ("PANASONIC"); fasilə; hal SONY: Serial.println ("SONY"); fasilə; halda RC5: Serial.println ("RC5"); fasilə; halda JVC: Serial.println ("JVC"); fasilə; halda SANYO: Serial.println ("SANYO"); fasilə; halda MITSUBISHI: Serial.println ("MITSUBISHI"); fasilə; hal SAMSUNG: Serial.println ("SAMSUNG"); fasilə; korpus LG: Serial.println ("LG"); fasilə; halda RC6: Serial.println ("RC6"); fasilə; halda YEMƏK: Serial.println ("DISH"); fasilə; hal SHARP: Serial.println ("SHARP"); fasilə; hal WHYNTER: Serial.println ("WHYNTER"); fasilə; iş AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); fasilə; standart: hal BİLİNMƏZ: Serial.println ("BİLİNMƏZ"); fasilə;} irrecv. resume ();}}
Addım 3: Dərinlikdəki Kod: IR Siqnallarının Göndərilməsi
Kod nömrələrini satır nömrələrinə görə istinad edəcəyəm - davam etmək üçün bu linki istifadə edin:
pastebin.com/AQr0fBLg
Birincisi, IR Uzaq Kitabxanasını z3t0 ilə daxil etməliyik.
Kitabxanaya keçid budur:
github.com/z3t0/Arduino-IRremote
Kitabxananı düzgün yükləmək və IDE -yə necə yükləmək barədə bələdçiyə ehtiyacınız varsa:
www.arduino.cc/az/guide/libraries
1 -ci sətirə kitabxana daxildir.
Sonra, bir neçə dəyişən elan etməliyik, 2-12-ci sətirlər bunu edir.
Dəyişməyəcək dəyişənləri təyin etmək üçün "cost int" istifadə edirik, hamısı bu kateqoriyaya aiddir.
Dəyişəcək dəyişənləri təyin etmək üçün "int" istifadə edirik.
LED pinimiz üçün modulyasiya (PWM) olan nəbzli bir pin istifadə etməliyik - yanında "~" olan hər hansı bir pin kifayətdir, kodumda - rəqəmsal pin 3 istifadə edirik.
Sonra, bir az qurma etməliyik - bu kod Arduino işə salındıqda və ya sıfırlandıqda yalnız bir dəfə işləyəcək.
Diqqət yetirin ki, giriş və çıxışlarımızı (15-20) müəyyənləşdiririk, seriyalı monitoru (21) işə salırıq, İQ sensoru işə salırıq (22) və sensora siqnal gəldiyimiz zaman Arduinoya göyərtədəki LED-in yanıb-sönməsini söyləyirik (23).
Sonra, döngümüzü quracağıq - bu kod dəfələrlə işləyəcək, saniyədə bir neçə dəfə yuxarıdan aşağıya doğru gedəcək.
25 -ci sətirdə bir if ifadəsini istifadə edirik, bu Arduinoya "bu xüsusi meyarları axtarın, əgər bu meyarlar yerinə yetirilirsə, bu xüsusi işi edin" deyir. Bu halda, meyarlar analogRead (Button1)> 900 və ya başqa sözlə - "Arduino, əvvəllər A4 pin olaraq təyin etdiyimiz düymə1 -ə baxın, alınan analoq siqnal 900 -dən böyükdürsə, növbəti təlimatlarımıza keçin., yoxsa, irəliləyin ". Buradan açmaq üçün bir az şey var, buna görə də dalmağa icazə verin: Arduino -dakı analoq siqnal 5V -ə bərabər və ya ondan az olan bir dəyərdir, 5V 1023 -ə bərabərdir və 0V 0 -a bərabərdir. bir ədəd və bir az riyaziyyatla bu rəqəmi və ya əksinə bir gərginliyi anlaya bilərik. 1024 -ü (vahid olaraq 0 daxil edirik) 5 -ə bölün, bu bizə 204.8 verir. Məsələn, 900 rəqəmini istifadə edərək onu gərginliyə çevirmək üçün 900 -ü 204.8 -ə bölməklə ~ 4.4V veririk. Arduinoya ~ 4.4 voltdan böyük bir gərginlik axtarmasını və əgər varsa, növbəti təlimatımızı verdiyini söyləyirik.
Növbəti təlimatlardan (xətt 25) danışarkən irsend.sendNEC (0xFF02FD, 32) görürük. Bu "Arduino, NEC protokolunu, xüsusən FF02FD siqnalını izləyən modulyasiya edilmiş bir nəbz göndərin və 32 bit uzunluğunda olduğundan əmin olun" deyir. Bu, IR LED -inizi digər cihazların anlaya biləcəyi şəkildə titrəyəcək. Bir az Morze Kodu kimi düşünün, ancaq görünməz işıqla! Orada hər birinin yüzlərlə, hətta minlərlə fərdi siqnalları olan və hər birinin öz xüsusi bit nömrəsi olan bir çox fərqli protokol var - cihazımız bu siqnalların böyük bir hissəsini tanıya biləcək, ancaq daha sonra buna daxil olacağıq!
28 -ci sətirdə ilk gecikməyimiz var - bu, istəmədən təkrarlanan siqnalların qarşısını almaq üçün buradadır, düyməyə basıldıqda və İQ siqnalı göndərildikdə, barmağımızı düymədən çıxarmaq üçün 100 milisaniyəyə sahibik. bu çox vaxt kimi görünmür, amma praktikada yaxşı işləyir. gecikmə funksiyası Arduinoya "X milisaniyə üçün heç bir şey etmədiyini" bildirir və istinad üçün saniyədə 1000 milisaniyəyə bərabərdir.
Növbəti düymənin 29 -cu sətirinə keçərkən, düymə5 (əvvəlcə bu pultda 4 düyməyim vardı, beşincisi əlavə olundu, buna görə də sıradan çıxmışıq). Bu, ruh baxımından, düymə 1 ilə eynidir, lakin bir neçə əsas fərqlə. Görəcəyiniz ilk fərq for ifadəsidir - bu mahiyyətcə başqa bir döngədir - başqa bir daha böyük döngədə olan loopception. Xüsusilə "for (int i = 0; i <3; i ++)" ə sahibik, bunu "Arduino, 0 -dan başlayaq, 3 dəfə çatana qədər aşağıdakı təlimatları təkrar edək" olaraq oxuyun. For funksiyası bir çox cihazın təkrar siqnal axtarmaq üçün proqramlaşdırıldığı üçün istifadə olunur və bizim vəziyyətimizdə burada 3 dəfə. Cihazınız fərqli bir təkrarlama cədvəli tələb edərsə, sadəcə 3 sayını fərqli bir nömrəyə dəyişə bilərsiniz. Düymənin 5 başqa bir əsas fərqi, təkrar 3 dəfə və ya 3x3 olaraq təkrarlanmasıdır. Başqa sözlə, siqnalı 3 dəfə göndəririk, 10 millisaniyə gözləyirik, yenidən 3 dəfə göndəririk, başqa 10 milisaniyəni gözləyirik və sonra yenidən 3 dəfə göndəririk. Bu cür ünsiyyət cihazları açmaq və söndürmək üçün yaygındır və sadəcə televizorunuzun və ya cihazınızın tələb etdiyi şey ola bilər - bunun açarı istənilən nəticəni əldə edənə qədər bütün dəyişənlərlə oynamaqdır. Qısa gecikmə dəyərini dəyişdirin, təkrar dəyərini dəyişdirin, 3 əvəzinə 6 dəstə göndərin. Cihazlar qəsdən ixtiyari siqnal qaydaları ilə proqramlaşdırılıb, televizorunuzun pultunuzun səs çubuğunuzla eyni tipli bir siqnal göndərdiyini təsəvvür edin; TV -də hər dəfə kanalı dəyişəndə səs çubuğunuz bağlanır - buna görə fərqli siqnal qaydaları var.
Növbəti üç düymə, heç olmasa qismən yuxarıda təsvir olunan eyni prinsiplərlə proqramlaşdırılmışdır - beləliklə, 55 -ci sətrə qədər keçə bilərik.
Addım 4: Dərinlikdəki Kod: IR Siqnallarının Alınması
55 -ci sətirdə, digər uzaqdan idarəetmə vasitələri ilə göndərilən IR siqnallarını şərh etmək üçün Arduino proqramlaşdırmağa başlayırıq - bu, pultlarınızın istifadə etdiyi protokolları və siqnalları anlamaq üçün lazımdır. 55 -ci sətirdəki ilk kod xətası, əgər (irrecv.decode (& nəticələr) bunu "Arduino, IR kodunu axtarın, əgər tapsanız, həqiqi bir dəyər qaytarın, əgər heç bir şey tapmasanız, yalan deyin. Doğru olduqda qeyd edin. məlumatları "nəticələr" ə çevirin.
56 -cı sətrə keçdikdə Serial.println (results.value, HEX) yazırıq ki, burada "Ardunio, nəticələri monitor monitorunda HEX formatında çap et" yazılır. Onaltılıq mənasını verən hex, ikili bir sətri (yalnız 0 və 1 -lər) yazmaq üçün bir az daha asan bir şeyə qısaltmağın bir yoludur. Məsələn, 101010010000 "a90" dır, televizorumu söndürmək və açmaq üçün istifadə olunan kod və 111111110000001011111101, RGB şeridimi idarə edən 0xFF02FD -dir. İkili ikili hexə çevirmək və ya əksinə yuxarıdakı cədvəldən istifadə edə bilərsiniz və ya aşağıdakı bağlantıdan istifadə edə bilərsiniz:
www.rapidtables.com/convert/number/hex-to-…
57 -ci sətirdə, keçid qutusu adlanan yeni bir funksiyamız var.
Əslində, bir keçid qutusu, müəyyən bir dəyişənin (vəziyyətin) nəticələrinə əsaslanaraq fərqli təlimatlar təyin etməyə imkan verir. fasilə switch ifadəsindən çıxır və hər ifadənin sonunda istifadə olunur.
Buradakı keçid qutusundan, Arduino -nun müxtəlif uzaqdan idarəetmə vasitələrindən hiss etdiyimiz protokollara əsaslanaraq serial monitorda necə çap etdiyimizi dəyişdirmək üçün istifadə edirik.
Addım 5: Nəticə
Bir sualınız varsa - zəhmət olmasa mənimlə buradan əlaqə saxlayın! Sənə bacardığım qədər kömək etməyə çalışmaqdan xoşbəxtəm.
Ümid edirəm ki, həyatınızı bir az da yaxşılaşdırmaq üçün istifadə edə biləcəyiniz bir şey öyrəndiniz!
-RB
Tövsiyə:
Cib Telefonu İnfraqırmızı Kondisioner Uzaqdan İdarəetmə DIY İstehsal: 7 addım
Cib Telefonu İnfraqırmızı Kondisioner Uzaqdan İdarəetmə DIY İstehsal: İsti yayda evə və ya ofisə gedəndə kondisioneri açmaq istəyirsən, amma bir müddət uzaqdan idarəetmə pultunu tapa bilmirsən. Çox əsəbi bir şeydir. Bu cib telefonunun ayrılmadığı bir dövrdə, cib telefonu kimi istifadə edə bilərsiniz
TSOP4838: 5 Addımlardan istifadə edərək İnfraqırmızı Uzaqdan İdarəetmə Test Cihazı
TSOP4838 istifadə edərək İnfraqırmızı Uzaqdan İdarəetmə Testeri: Budur sadə bir uzaqdan idarəetmə test cihazının sxemini necə qurmaq olar. Aşağıdakı adımları yerinə yetirin və 5 dəqiqədən az bir müddətdə edə bilərsiniz. Əgər işləyirsə, videomuzu bəyənib şərhlərdə bildirin
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan sürüşdürün: 3 Addım (Şəkillərlə birlikdə)
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan Sürüşdürün: Oh Amazon, Fire TV'niz çox gözəldir, niyə bizə pultunuzda səs idarəetməsini vermədiniz? Yaxşı ki, Amazon -da 5 dollardan aşağı qiymətə bu sevimli kiçik uzaqdan, güc, səssiz satın ala bilərsiniz. , həcmi və hamısı kiçik bir paketdə. 3d printerə daxil edin
IR Uzaqdan Uzaqdan Uzaqdan Çevirin: 9 Addım (Şəkillərlə birlikdə)
IR Uzaqdan Uzaqdan Uzaqdan RF -yə çevirin: Bugünkü Təlimat kitabında, ümumi bir RF modulunu mikro nəzarətçi olmadan necə istifadə edə biləcəyinizi sizə göstərəcəyəm ki, nəticədə hər hansı bir cihazın IR uzaqdan idarəetmə cihazını RF -yə çevirə biləcəyiniz bir layihə hazırlayaq. Uzaqdan. Çevirmənin əsas üstünlüyü
Arduino ilə İnfraqırmızı Uzaqdan və IR Alıcısı (TSOP1738): 10 addım
Arduino ilə İnfraqırmızı Uzaqdan və IR Alıcısı (TSOP1738): Bu təlimat Arduino yeni başlayanlar üçündür. Bu, Arduino ilə əvvəlki layihələrimdən biridir. Hazırladığım zaman çox zövq aldım və ümid edirəm bəyənəcəksiniz. Bu layihənin ən cəlbedici xüsusiyyəti " Simsiz idarəetmə " dir. Və bu