Mündəricat:

ATtiny85 RF Uzaqdan İdarəetmə: 3 addım
ATtiny85 RF Uzaqdan İdarəetmə: 3 addım

Video: ATtiny85 RF Uzaqdan İdarəetmə: 3 addım

Video: ATtiny85 RF Uzaqdan İdarəetmə: 3 addım
Video: ATtiny85 RF Transmitter & Receiver 2024, Iyul
Anonim
ATtiny85 RF Uzaqdan İdarəetmə
ATtiny85 RF Uzaqdan İdarəetmə

QEYD: Təlimat verilə bilən "Virtual Gizlət Oyunu" mesajın avtomatik olaraq kodunu açan bir RXC6 modulu ilə bu tip uzaqdan necə istifadə olunacağını göstərir.

Əvvəlki Təlimatda qeyd etdiyim kimi, bu yaxınlarda bəzi ATtiny85 fişləri ilə oynamağa başladım. Düşündüyüm ilk layihə, bir sikkə batareyası ilə işləyə bilən RF uzaqdan idarə etmə idi. Çiy çiplə getməli idim, çünki məndə olan Arduinoların heç biri həm çox aşağı gücə, həm də nisbətən kiçik ölçüyə olan ehtiyacını ödəyə bilməz. Dəyişdirilmiş LilyPad yaxınlaşdı, lakin çip daha yaxşı cavabdır. Fikir, mövcud bir pultu təkrarlamaq deyil, öz ötürücü və alıcı dəstinizi necə qura biləcəyinizi nümayiş etdirmək idi. Əyləncəli bir öyrənmə layihəsi olmaqla yanaşı, həm də öz "gizli" kod kombinasiyanızı yaratmağa imkan verir. Sitatlara "sirr" qoyuram, çünki bu sadə kodları sındırmaq olduqca asandır.

Addım 1: RF Mesaj Formatı

RF Mesaj Formatı
RF Mesaj Formatı

Bu layihə üçün Etekcity RF simsiz açarlarımdan biri üçün siqnalları təkrarlamağı seçdim (bu modullarda Təlimatçılığa baxın). Vericimin Etekcity qəbuledicisi ilə işlədiyini və qəbuledicimin Etekcity pultu ilə işlədiyini yoxlaya bildiyim üçün bunu etdim. Daha əvvəl çəkdiyim üçün bu cihazların düzgün kodlarının və formatının nə olduğunu da dəqiq bilirəm. Kod tutma eskizi üçün "Arduino RF Sensor Dekoderinə" baxın.

Etekcity satış nöqtələrinin kodları və formatları ucuz RF cihazları üçün çox tipikdir. Çox vaxt oxşar formatlardan istifadə edən ucuz təhlükəsizlik cihazlarım var. Mesaj uzunluğu, uzun başlanğıc biti və qısa dayanma biti olan rahat 24 bitdir. Daha çox bayt məlumat əlavə etmək və sinxronizasiya və məlumat bitlərinin vaxtını dəyişdirmək üçün kodu asanlıqla dəyişə bilərsiniz. Yenə də bu eskiz yalnız başlanğıc şablonudur.

Addım 2: Avadanlıq

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Verici bir sikkə batareyası ilə işləyir (2032), buna görə aşağı enerji istehlakı vacibdir. Bunun əksəriyyəti proqram təminatında yerinə yetirilir, lakin buna ATtiny85-in normal olaraq 1 MHz daxili saatla işləməsi kömək edir. Qaydadır ki, aşağı saat tezlikləri daha az güc tələb edir və 1 MHz ötürücü məntiqi üçün idealdır.

İstifadə etmək istədiyim faktiki RF ötürücü modulu, ümumiyyətlə mövcud olan FS1000A -dır. Həm 433 MHz, həm də 315 MHz versiyalarında gəlir. Proqram, hansını istifadə etdiyinizə əhəmiyyət vermir, ancaq alıcı lövhənin eyni tezlikdə işlədiyinə əmin olmalısınız. Layihələrimin çoxu 433 MHz cihazlardan istifadə edir, çünki yığdığım müxtəlif ucuz simsiz qurğular budur. Şəkildə göstərilən ötürücü lövhənin düzeni köhnə bir həb şüşəsinə yaxşı uyğun gəlir. Gözəl deyil, amma konsepsiyanı sübut etmək üçün kifayət qədər yaxşıdır.

Alıcı, lehimsiz bir çörək taxtasındadır, çünki yeganə məqsədi siqnalların necə alınacağını və alınan kodlara əsasən bir şeyi necə açıb -söndürməyi göstərməkdir. Açma/söndürmə vəziyyətini göstərmək üçün bir LED istifadə edir, ancaq onu bir röle sürücüsü ilə əvəz edə bilərsiniz. Hər hansı bir Arduino alıcı üçün istifadə edilə bilər, çünki batareyanın bitməsinə ehtiyac yoxdur. Ölçü hələ də nəzərə alınırsa, başqa bir ATtiny85 çipindən istifadə edə bilərsiniz. Əsas odur ki, ATtiny85-in alıcıda 8 MHz-də işləməsi lazımdır. Daxili saatı 8 MHz-ə uğurla dəyişdirdiyinizi təsdiq edən sadə bir eskiz üçün əvvəlki ATtiny85 Instructable-a baxın. Sensor kodlaşdırma təlimatımın sonunda alıcı proqramının Arduino Nano versiyasını daxil edirəm. Buraya daxil olan ATtiny85 versiyası ilə eynidir, bir neçə çip qeyd fərqi istisna olmaqla.

Əvvəlki RF Təlimatlarımda dediyim kimi, adi RXB6 kimi bir alıcıdan istifadə etməyi üstün tuturam. Ümumiyyətlə FS1000A ötürücüləri ilə birlikdə verilən super rejenerativ alıcılardan daha yaxşı işləyən super heterodin qəbuledicisidir.

Həm ötürücü, həm də alıcı modulları uyğun antenalarla daha yaxşı işləyir, lakin çox vaxt təchiz edilmir. Onları satın ala bilərsiniz (düzgün tezliyi əldə edin) və ya özünüz edə bilərsiniz. 433-MHz-də, düz telli anten üçün doğru uzunluq təxminən 16 sm-dir. Qıvrılmış bir tel etmək üçün təxminən 16 sm izolyasiya edilmiş, möhkəm bir nüvəli tel götürün və 5/32 düymlük bir matkap sapı kimi bir təbəqəyə sarın. İzolyasiyanı qısa bir düz hissədən bir tərəfdən çıxarın və ötürücü/alıcı lövhənizə bağlayın. Bir qırıntı Ethernet kabelindən alınan telin antenalar üçün yaxşı işlədiyini gördüm. Verici lövhədə ümumiyyətlə antenanı lehimləmək üçün bir yer var, lakin alıcı lövhədə yalnız sancaqlar ola bilər (RXB6 kimi). Lehimləməsəniz, əlaqənin etibarlı olduğundan əmin olun.

Addım 3: Proqram təminatı

Verici proqramı çipi yuxu rejiminə keçirmək üçün ümumi üsullardan istifadə edir. Bu rejimdə 0.2ua cərəyandan az çəkir. Şalter girişlərində (D1-D4) daxili çəkmə rezistorları aktivdir, lakin bir düymə basılana qədər heç bir cərəyan çəkmir. Girişlər dəyişikliyi dayandırmaq (IOC) üçün qurulmuşdur. Bir keçid basıldığında bir fasilə yaranır və çipi oyanmağa məcbur edir. Kəsmə işleyicisi, keçiddən çıxmaq üçün təxminən 48 ms gecikmə həyata keçirir. Daha sonra hansı açarın basıldığını müəyyən etmək və müvafiq rutinin çağırılması üçün bir yoxlama aparılır. Göndərilən mesaj bir neçə dəfə təkrarlanır (5 dəfə seçdim). Bu, kommersiya ötürücülərinə xasdır, çünki orada 433-MHz və 315-MHz-də çox RF trafiki var. Təkrarlanan mesajlar, ən azı birinin alıcıya keçməsini təmin etməyə kömək edir.

Sinxronizasiya və bit vaxtları ötürücü proqramın ön tərəfində təyin olunur, lakin məlumat baytları dörd düyməli prosedurların hər birinə daxil edilir. Açıq və dəyişmək asandır və daha uzun bir mesaj yaratmaq üçün bayt əlavə etmək də asandır. Eyni təriflərin hamısı qəbuledici proqrama və məlumat baytı təriflərinə daxil edilmişdir. Mesajınıza məlumat baytı əlavə etsəniz, "Msg_Length" anlayışını dəyişdirməlisiniz və "RF_Message" dəyişəninə bayt əlavə etməlisiniz. Əlavə baytların düzgün alındığını yoxlamaq və bu baytı təyin etmək üçün "loop" da "RF_Message" qeydinə kod əlavə etməlisiniz.

Tövsiyə: