Məsafədən İdarəetməli Robot Maşın #3 – nRF24L01+ Radioidarəedici

Məsafədən İdarəetməli Robot Maşın seriyamızın əvvəlki hissəsində biz smartfonumuz və Bluetooth rabitə vasitəsilə maşını məsafədən necə idarə edəcəyimizə baxdıq. Hərçənd nəticə uğurlu olsa da, təxminən 15 metr radiusdan kənara çıxdıqda rabitədə qırılmalar yaranır (Bluetoothun limiti) və robot tez-tez dayanırdı.

Simsiz əlaqənin əhatə dairəsini biraz daha artırmaq və öz çoxməqsədli Radioidarəedicimizi yığmaq vaxtıdır. Bunun üçün biz HC-06 Bluetooth modulu əvəzinə, yenə eyni 2.4 GHz tezlik diapazonunda işləyən, qiymətcə daha ucuz, məsafə baxımdan daha geniş ərazini əhatə edən nRF24L01+ radio transiver (ötürücü/qəbuledici) modulundan istifade edəcik. Eyni modul həm məlumat ötürə və qəbul edə bilir. Buna görə də robotumuzla ikitərəfli rabitə qura bilər, uzaqdan ölçmələr (telemetriya) apara bilərik. Misal üçün batareyanın gərginliyi və ya GPS modulu əlavə edib, maşınımızın dəqiq koordinatlarını ötürə bilərik.

İlk olaraq biz robot maşınımızdan Bluetooth modulunu ayırıb, yerinə nRF24L01+ modulunu əlavə edəcik. Daha sonra breadboard üzərində radioidarəedicimizin protatipini hazırlayıb, dövrə komponentlərinin  və rabitənin düzgün işlədiyinə əmin olduqdan sonra kiçik FR4 tipli protatipləşdirmə lövhəsi üzərində yekun radioidarəedicimizi yığacağıq.

Lazımi komponentlər

Bizə aşağıdakı dövrə komponentləri lazım olacaq (nəzərə alsaq ki, sizdə artıq əvvəlki proyektdən robot maşın, Arduino, motor sürücü və batareya var, yoxdursa qalan siyahı üçün ora baxın):

  1. Arduino Pro Mini (3.3V, 8MHz): MSA, Banggood, Ebay
  2. USB-TTL konverter: MSA, Banggood, Ebay
  3. 2x nRF24L01+ radio transiver modulu: MSA, Banggood, Ebay
  4. mini-breadboard: MSA, Banggood, Ebay
  5. Breadboard: MSA, Banggood, Ebay
  6. Jumper kabellər: MSA, Banggood, Ebay
  7. Joystick modulu: MSA, Banggood, Ebay
  8. 3.3V gərginlik regulyatoru (LM1086/LD1117 və ya impulsu alçaldıcı): MSA, Banggood, Ebay
  9. 4x 1.5V batreya və Batareya qabı: MSA, Banggood, Ebay
  10. Elektrik açarı: MSA, Banggood, Ebay
  11. Prototipləşdirmə lövhəsi (5 x 7 sm): MSA, Banggood, Ebay
  12. 2x Elektrolitik kondensator (10 μF): MSA, Banggood, Ebay

Radioidarəedicidə mikrokontroller kimi 3.3V-luq Pro Mini seçməyimizə əsas səbəb digər 5V-luq Arduinolardan 2 qat daha enerjiyə qənaətcil olmasıdır, çünki idarəedicimiz batareya ilə qidalandığından uzun müddətli işləməsi üçün enerjiyə qənaət etməyə məcburuq.

Qəbuledici hissə (Robot Maşın)

İlk olaraq robot maşınımızda olan Bluetooth modulunu çıxarıb, nRF24L01+ modulu ilə əvəzləyirik. Yeni kabelləşmə sxemi və simulyasiya görünüşü aşağıdakı kimi olacaq (Fritzing faylı burdan endirin). Sadəlik üçün motor sayı cəmi 2 ədəd göstərmişik.

4WD RC nRF24l01_RX_bb

Robot Maşın kabelləşməsi

4WD RC nRF24l01_RX_schem

Robot Maşın elektrik sxemi

Sistemə elektrik qidasını 7-12V aralığında olan 1.5V-luq batareyalar dəstindən və ya 2s-3s Lipo batareyadan təmin edə bilərsiniz. Biz 6 ədəd yenidəndoldurulabilən (Ni-Cd) batareyalar işlətmişik. Bu batareyaların qiymətləri qismən baha olsada 2000 dəfəyə qədər yenidən doldura bilərsiz. Təsəvvür edin ki, eyin sayda yenidəndoldurulabilməyən (Alkalin) batareyasına nə qədər xərcləmiş olarsınız. LiPo batareyaların doldurulma sayı daha azdır.

nRF24L01+ modulunu Arduinonun SPİ kommunikasiya xəttlərinə, L298N motor sürücüsünü isə yerdə qalan PWM imkanı olan pinlərə qoşuruq. nRF24L01+ radio modulu 3.3V qida ilə işləyir, baxmayaraq ki siqnal girişləri 5V-a dözümlüdür. Arduino Uno üzərində 3.3V-luq gərginlik requlyatoru olduğundan radio modulumuzu qidalandırmaq üçün əlavə çeviriciyə ehtiyac yoxdur. Əgər siz Arduino Nano və ya Pro Mini işlətsəniz yaxşı olar ki, əlavə requlyator istifadə edəsiniz. Əks halda radio əlaqə zamanı problemlərlə üzləşə bilərsiniz. Bəzən nRF24L01+ modulunun qida kabelləri çox uzun olduqda da gərginlik düşgüsü yarana bilər, bundan yarana biləcək problemlərin qarşısını almaq üçün radio modulun VCC və GND pinləri arasında 10 μF-lıq kondensator əlavə etməyi məsləhət görürəm.

Radioidarəedici hissə (Joystickli kontroller)

Sxemə əsasən dövrəni yığdıqdan sonra, keçək radioidarəedici tərəfin breadboard üzərində yığılmasına. Burada biz həm  istiqamət, həm də sürət əmrlərini daxil etmək üçün PS2 Joystick modulundan istifadə edəcik. Joystickin X,Y qiymətlərini Arduinonun analoq girişləri ilə, orta düyməsini isə rəqəmsal girişlərdən biri ilə oxuyub, ikinci nRF24L01+ radio modulu ilə robotumuza göndərəcik.  Radiokontrollerimizin dövrə sxemi də aşağıda gördüyünüz kimidir (Fritzing faylı endirin).

 

4WD_ROBOT_nRF24l01_TX_bb

Radiokontrollerin breadboard kabelləşməsi

4WD_ROBOT_nRF24l01_TX_schem

Radiokontrollerin elektrik sxemi

Radioidarəedici sistemimizi 3.3V-la qidalandırmaq üçün biz LM1086 xətti gərginlik tənzimləyicisindən istifadə edirik, lakin istənilən 3.3V, 500mA çıxış gücünə malik impulsu (Buck converter) və ya xətti gərginlik regulyatoru istifadə edə bilərsiniz. Bir nüansı da bildirim ki, siz Arduino pro miniyi ya RAW qida girişi ilə birbaşa batareyadan və ya Vin girişi ilə tənzimlənən 3.3V-luq qida xəttindən qidalandıra bilərsiniz. Mən hər ikisi ilə də yoxladım, nəticədə o oldu ki, Joystick ölçmələrinin dəqiq olmasını istəyirsinizsə, onda hər ikisini 3.3V xəttə qoşun. Arduino üzərində olan kiçik requlyator elədə stabil deyil.

20160412_231523_HDR

Burada da yenə radio modulunu Arduinonun SPİ xəttlərinə, Josyticki  isə A0, A1 və D4 girişlərinə qoşuruq.  Joystickin mərkəzi hissəsində elektrik düymə açarı var və kliklədikdə açar (SW) xəttini GND-a qısa qapayır, proqramdan oxumalarımızın düzgün olması üçün düymə basılmadıqda isə xəttdəki gərginlik 3.3V olmalıdı.  Elektronik dövrələrdə buna həmin xətlə qida xətti arasında (Vcc – 3.3V) 10K rezistor qoşmaqla nail olunur və gərginlik qaldırıcı rezistor qoşulması (Pull Up resistor) adlanır, təəssüf ki, Joystick modulu üzərində rezistor üçün yer olsada bir çox hallarda rezistorsuz gəlir. Xoşbəxtlikdən ATmega328 (Arduino) mikrokontrollerinin daxilində hər bir rəqəmsal girişdə konfiqurasiya olunabilən gərginlik qaldırıcı rezistorlar var. Bunu aktivləşdirmək üçün biz proqramın setup() hissəsində rəqəmsal pinlərin rejimini təyin edərkən  aşağıdakı sətri əlavə etməyimiz kifayətdir.

pinMode(JOYSTICK_SW, INPUT_PULLUP);

nRF24L01+ Kommunikasiya Testi

Həm ötürücü, həm də qəbuledici tərəfin dövrəsi hazır olandan sonra hər iki mikrokontrolleri uyğun şəkildə proqramlamalıyıq ki, sistemin işlədiyinə əmin olaq. İlk olaraq sadə test proqramlarını yükləyib simsiz rabitəni yoxlamalıyıq. İlk öncə Arduino İDE-yə RF24 kitabxanasını əlavə etməliyik. Bunun üçün yükləmə keçidinə daxil olub RF24-master.zip faylını kompüterimizə yükləyir, .zip arxivdəki qovluğu ektrakt edirik. Daha sonra qovluğun adını RF24 edib, Arduinonun proyekt qovluğu daxilindəki libraries qovluğuna kopyalayırıq. Arduino İDE-ni restart etdikdən sonra File->Examples->RF24 alt-menyusu peyda olacaq.

Kitabxana yükləməyin digər bir yolu isə Arduino İDE-nin Sketch->Include Library->Add .ZIP Library alt-menyusundan yüklədiyimiz .zip arxiv faylını seçməklə mümkündür (Arduino kitabxanaları haqqında ətraflı). Kodları bu məqaləyə tam şəkildə əlavə etməyib, əvəzində GitHub keçidlərini verirəm ki, hansısa dəyişiklik etdikdən sonra siz ən yeni kodu əldə edə biləsiniz. GitHubda RAW  düyməsinə klik edib kodu kompüterinizə fayl şəklində yükləyə bilərsiniz.

Test kodları:

Bu kodları uyğun mikrokontrollerlərə yüklədikdən sonra robot maşınımızdakı Arduinoyu kompüterə qoşub, Serial Port Monitorunu işə salırıq. Hər şey yolundadırsa, ekranda dayanmadan ötürücüdən gələn Joystickin X,Y və açar vəziyyəti barədə məlumatlar çap olunacaq. Əgər X və Y qiymətlərinin yeri dəyişik olarsa, ötürücünun ya proqraminda ya da birbaşa jumperdən A0 və A1 pinlərinin yerini dəyişin.

Robotun İdarəetmə Proqramı

Joystickin X və Y qiymətlərini oxuya bildikdən sonra onları necəsə robotun hərəkət sürət və istiqamətinə çevirməliyik. Bunun üçün ilk olaraq kordinat müstəvisində hərəkət sərhətlərini şərti olaraq aşağıdakı kimi bölürük. Şəkildəki hərflər hərəkət istiqamətini bildirir (S – stop, F- irəli, B- geriyə, R- sağ, L – sol, G – irəli sola, İ – irəli sağa, H – geriyə sola, J – geriyə sağa). X və Y oxunun ən uc nöqlərindəki qiymətlər isə Joysticki həmin nöqtəyə gətirdikdə mikrokontrollerin oxuduğu qiymətlərdir.

X, Y qiymətlərindən istifadə edib biz həmçinin proqram daxilində robotumuzun sürətini də artırıb-azaldırıq. Belə ki, X və Y qiymətləri dairə mərkəzindən nə qədər aralı olarsa, maşınımız bir o qədər sürətli gedəcək. Radiötürücü proqramında kiçik exponensial filtr tətbiq etmişik. Robotun daha da yumşaq hərəkət etməsini istəyirsinizsə onda aşağıda göstərilən X və Y exponensial əmsallarını sazlaya bilərsiniz. Qiymət 1 olduqda filtrləmə prosesi deaktiv olunacaq. Yaxşı olar ki, 0-a enməyəsiz, yoxsa kod ümumiyyətlə işləməyə bilər. 0.6-0.9 aralığında bir qiymət məsləhət görərdim.

float X_exp_emsal = 0.6;
float Y_exp_emsal = 0.6;

İdarəetmə kodları:

Bu kodları mikrokontrollerlərə yüklədikdən sonra maşınımızı idarə edə bilərik.

Protatip Lövhə Üzərində Radiokontroller

Bura qədər olan hissədə biz breadboard üzərində test sistemimizi yığdıq, amma breadboard üzərində olan sistem həm istifadədə narahatçılıq yaradır, həm də elektrik əlaqələri elə də etibarlı olmur. Buna görə də radioidarəedicini protatipləşdirmə lövhəsi üzərinə köçürməyi məsləhət görürəm. Bunun ikinci bir səbəbi isə bu radioidarəedicini gələcəkdə digər bir çox proyektlər üçün də istifadə edə bilərsiniz.

643463700_593

Arduino Pro mini üçün pin başlığı

nRF24L01 üçün pin başlığı

nRF24L01 üçün pin başlığı

Modullarımızı lövhəyə istər birbaşa lehimləyə, istərsə də dişi pin başlıqları vasitəsilə qoşa bilərik. Pin başlıqları ilə qoşduqda sonradan modulumuzu dəyişmək istədikdə rahatca çıxarıb, yenisini taxa bilərik. Xüsusilə də nRF24L01 modulu üçün. Bu modulun qiymətcə biraz bahalı modeli olan nRF24L01+PA+LNA versiyası ilə siz açıq ərazidə 1 km-ə qədər əhatə radiusu əldə edə bilərsiniz (nəticədə modulun cərəyan şiddəti  və enerji sərfiyyatı artmış olacaq). Adi nRF24L01 modulu isə 100 m-ə qədər əhatə dairəsinə malikdir.

Bütün dövrə elementlərini uyğun şəkildə yerləşdirib, lehimləmə prosesini aparıb, sxemə uyğun qida və siqnal xəttlərini də əlavə etdikdən sonra radioidarəedicimizə batareya və elektrik açarı da əlavə edirik. Lehimləmə zamanı müxtəlif rəngli 22 AWG ölçülü kabeldən istifadə etmişəm. Prosesin bu hissəsinə aid çoxlu şəkil olmasa da videomuzda bütün addımları görə bilərsiniz.

20160415_141909

Yekunda belə bir kiçik kontroller və tam işlək robot maşınımız oldu. İndi isə daxilimizdəki uşaqlıq hisslərini oyadan bu sistemlə istədiyimiz qədər oynaya və ya daha da inkişaf etdirə bilərik. Vaxt ayırıb oxuduğunuz üçün minnətdaram. Məqaləmizi bu sahəyə maraqlı olan dost-tanışlarınızla da paylaşın ki, daha çox insan faydalana bilsin. Bütün yığılma prosesi aşağıdakı videomuzda öz əksini tapıb. Buyurun baxın və öz rəylərinizi bildirməyi unutmayın.

Hazırlanma videosunu izləyin

İstinadlar:

PaylaşShare on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePin on PinterestShare on RedditShare on TumblrDigg this

Comments

comments

You may also like...

Rəy bildir