- Pažintis su nRF24L01 RF moduliu
- Sąsaja nRF24L01 su „Arduino“
- Imtuvo pusė: „Arduino Uno nRF24L01“ modulio jungtys
- Siųstuvo pusė: „Arduino Nano nRF24L01“ modulio jungtys
- Darbas su „nRF24L01 +“ belaidžiu imtuvu
- „Arduino“ programavimas nRF24L01
- Servovariklio valdymas naudojant belaidį „nRF24L01“
Nors daiktų internetas (IoT), „Pramonė 4.0“, „Ryšys tarp mašinų“ ir kt. Tampa vis populiaresni, belaidžio ryšio poreikis tapo privalomas, nes daugiau mašinų / įrenginių gali kalbėtis tarpusavyje debesyje. Dizaineriai naudoja daugybę belaidžių ryšių sistemų, tokių kaip „Bluetooth Low Energy“ (BLE 4.0), „Zigbee“, ESP43 „Wi-Fi“ moduliai, 433 MHz RF moduliai, „Lora“, „nRF“ ir kt., O laikmenos pasirinkimas priklauso nuo programos, kurioje ji naudojama, tipo.
Tarp visų populiari belaidė terpė vietiniam tinklui palaikyti yra „ nRF24L01“. Šie moduliai veikia 2,4 GHz (ISM juostoje) perdavimo sparta nuo 250 kbps iki 2 Mbps, o tai yra legalu daugelyje šalių ir gali būti naudojami pramonėje ir medicinoje. Taip pat teigiama, kad su tinkamomis antenomis šie moduliai gali perduoti ir priimti iki 100 metrų atstumą tarp jų. Įdomu tiesa !!? Taigi, šioje pamokoje sužinosime daugiau apie šiuos „ nRF24l01“ modulius ir kaip jį susieti su mikrovaldiklio platforma, pvz., „Arduino“. Taip pat naudodamiesi šiuo moduliu pasidalinsime keletu dažniausiai kylančių problemų sprendimų.
Pažintis su nRF24L01 RF moduliu
„ NRF24L01“ moduliai yra siųstuvo-imtuvo moduliai, o tai reiškia, kad kiekvienas modulis gali ir siųsti, ir priimti duomenis, tačiau kadangi jie yra pusiau dupleksai, jie gali siųsti arba gauti duomenis vienu metu. Modulis turi bendrą Šiaurės šalių puslaidininkių „nRF24L01 IC“, atsakingą už duomenų perdavimą ir priėmimą. IC palaiko ryšį naudodamas SPI protokolą, todėl gali būti lengvai suderinamas su bet kokiais mikrovaldikliais. Su „Arduino“ daug lengviau, nes bibliotekos yra lengvai prieinamos. Kad standartinio nRF24L01 modulio pinouts yra parodyta žemiau
Modulio darbinė įtampa yra nuo 1,9 V iki 3,6 V (paprastai 3,3 V), o įprasto veikimo metu sunaudojama labai mažai srovės, tik 12 mA, todėl baterija efektyvi ir todėl gali veikti net monetų elementuose. Nors darbinė įtampa yra 3,3 V, dauguma kaiščių yra atsparūs 5 V įtampai, todėl juos galima tiesiogiai susieti su 5 V mikrovaldikliais, tokiais kaip „Arduino“. Kitas šių modulių naudojimo pranašumas yra tas, kad kiekviename modulyje yra 6 vamzdynai. Tai reiškia, kad kiekvienas modulis gali bendrauti su 6 kitais moduliais perduoti ar priimti duomenis. Todėl modulis yra tinkamas kurti žvaigždžių ar tinklų tinklus IoT programose. Be to, jie turi platų 125 unikalių ID adresų diapazoną, todėl uždaroje zonoje mes galime naudoti 125 iš šių modulių netrukdydami vienas kitam.
Sąsaja nRF24L01 su „Arduino“
Šioje pamokoje sužinosime, kaip susieti „nRF24L01“ su „Arduino“, valdant servovariklį, sujungtą su vienu „Arduino“, keičiant kito „Arduino“ potenciometrą. Paprastumo sumetimais vieną nRF24L01 modulį naudojome kaip siųstuvą, o kitą - imtuvą, tačiau kiekvieną modulį galima užprogramuoti siųsti ir priimti duomenis atskirai.
Žemiau parodyta grandinės schema, skirta nRF24L01 moduliui sujungti su „Arduino“. Kad būtų įvairiau, imtuvo pusėje naudojau UNO, o siųstuvo pusėje - „ Nano “. Tačiau ryšio logika lieka ta pati ir kitoms „Arduino“ plokštėms, tokioms kaip „mini“, „mega“.
Imtuvo pusė: „Arduino Uno nRF24L01“ modulio jungtys
Kaip minėta anksčiau, nRF24L01 bendrauja naudodamas SPI protokolą. „Arduino Nano“ ir UNO kontaktai 11, 12 ir 13 naudojami SPI ryšiui. Taigi mes sujungiame MOSI, MISO ir SCK kaiščius iš nRF su atitinkamai 11, 12 ir 13 kaiščiais. Kaiščius CE ir CS galima konfigūruoti vartotojui, aš čia naudojau 7 ir 8 kaiščius, tačiau pakeisdami programą galite naudoti bet kurį kaištį. „NRF“ modulį maitina „Arduino“ 3,3 V kaištis, kuris daugeliu atvejų veiks. Jei ne, galima išbandyti atskirą maitinimo šaltinį. Be sąsajos su nRF, aš taip pat prijungiau servo variklį prie 7 kaiščio ir maitinau jį per 5 V kaištį „Arduino“. Panašiai siųstuvo grandinė parodyta žemiau.
Siųstuvo pusė: „Arduino Nano nRF24L01“ modulio jungtys
Siųstuvo jungtys taip pat yra tos pačios, be to, aš naudoju potenciometrą, sujungtą per „Arduino“ 5V ad Ground kaištį. Išėjimo analoginė įtampa, kuri skirsis nuo 0 iki 5 V, yra prijungta prie „Nano“ A7 kaiščio. Abi plokštės maitinamos per USB prievadą.
Darbas su „nRF24L01 +“ belaidžiu imtuvu
Tačiau norėdami, kad „nRF24L01“ veiktų be triukšmo, norėtume apsvarstyti šiuos dalykus. Ilgą laiką dirbau su šiuo „nRF24L01 +“ ir išmokau šiuos dalykus, kurie gali padėti jums pataikyti į sieną. Tai galite išbandyti, kai moduliai neveikė įprastu būdu.
1. Dauguma rinkoje esančių „nRF24L01 +“ modulių yra netikri. Pigiausios, kurias galime rasti „Ebay“ ir „Amazon“, yra blogiausios (nesijaudinkite, mes galime priversti jas veikti su keletu patobulinimų)
2. Pagrindinė problema yra maitinimo šaltinis, o ne jūsų kodas. Dauguma kodų internete veiks tinkamai, aš pats turiu darbinį kodą, kurį aš asmeniškai išbandžiau. Praneškite man, jei jums jų reikia.
3. Atkreipkite dėmesį, nes moduliai, atspausdinti kaip NRF24L01 +, iš tikrųjų yra Si24Ri (taip, kinų produktas).
4. Klonas ir netikri moduliai sunaudos daugiau energijos, todėl nekurkite savo maitinimo grandinės, remdamiesi „nRF24L01 +“ duomenų lapu, nes „Si24Ri“ suvartos didelę srovę apie 250 mA.
5. Saugokitės įtampos bangų ir srovės šuolių, šie moduliai yra labai jautrūs ir gali lengvai sudegti. (;-(iki šiol pakepė 2 modulius)
6. Pridėjus porą kondensatorių (10uF ir 0.1uF) modulio Vcc ir Gnd, jūsų tiekimas bus švarus, ir tai tinka daugumai modulių.
Vis dėlto, jei turite problemų, praneškite apie komentarų skiltį arba perskaitykite tai arba užduokite klausimus mūsų forume.
Taip pat patikrinkite mūsų suprantamą projektą, kaip sukurti pokalbių kambarį naudojant „nRF24L01“.
„Arduino“ programavimas nRF24L01
Labai lengva naudoti šiuos modulius su „Arduino“ dėl lengvai prieinamos bibliotekos, kurią „maniacbug“ sukūrė „GitHub“. Spustelėkite nuorodą, kad atsisiųstumėte biblioteką kaip ZIP aplanką, ir pridėkite ją prie „Arduino IDE“ naudodami parinktį „ Eskizas -> Įtraukti biblioteką -> Pridėti.ZIP biblioteką“ . Pridėję biblioteką galime pradėti programuoti projektą. Turime parašyti dvi programas, viena skirta siųstuvo pusei, kita - imtuvo pusei. Tačiau, kaip sakiau anksčiau, kiekvienas modulis gali veikti ir kaip siųstuvas, ir kaip imtuvas. Abi programos pateiktos šio puslapio pabaigoje, siųstuvo kode bus komentuojamas imtuvo pasirinkimas, o imtuvo programoje - siųstuvo kodas. Jį galite naudoti, jei bandote projektą, kuriame modulis turi veikti kaip abu. Programos veikimas paaiškintas toliau.
Kaip ir visas programas, mes pradedame įtraukdami antraštės failus. Kadangi nRF naudoja SPI protokolą, mes įtraukėme SPI antraštę ir biblioteką, kurią ką tik atsisiuntėme. Servo biblioteka naudojama servo varikliui valdyti.
# įtraukti
Kita eilutė yra svarbi eilutė, kur mes mokome biblioteką apie CE ir CS kaiščius. Savo grandinės schemoje mes sujungėme CE su 7 kaiščiu ir CS su 8 kaiščiu, todėl nustatėme liniją kaip
RF24 „myRadio“ (7, 8);
Visi kintamieji, susieti su RF biblioteka, turėtų būti deklaruojami kaip sudėtinė kintamųjų struktūra. Šioje programoje kintamasis msg naudojamas duomenims siųsti ir gauti iš RF modulio.
struct paketas { int msg; }; typedef struct paketas Paketas; Pakuotės duomenys;
Kiekvienas RF modulis turi unikalų adresą, kuriuo jis gali siųsti duomenis į atitinkamą įrenginį. Kadangi čia yra tik viena pora, siųstuve ir imtuve adresą nustatome į nulį, tačiau jei turite kelis modulius, galite nustatyti bet kurios unikalios 6 skaitmenų eilutės ID.
baitų adresai = {"0"};
Toliau tuščios sąrankos funkcijos metu mes inicijuojame RF modulį ir nustatome dirbti su 115 juostų, kuriose nėra triukšmo, taip pat nustatome, kad modulis veiktų minimaliu energijos suvartojimo režimu, esant minimaliam 250Kbps greičiui.
negaliojanti sąranka () { Serial.begin (9600); myRadio.begin (); „myRadio.setChannel“ (115); // 115 juostos virš WIFI signalų myRadio.setPALevel (RF24_PA_MIN); // MIN galios mažas pyktis myRadio.setDataRate (RF24_250KBPS); // Minimalus greitis myservo.attach (6); „Serial.print“ („Sąranka inicijuota“); vėlavimas (500); }
funkcija void WriteData () rašo jai perduotus duomenis. Kaip sakyta anksčiau, nRF turi 6 skirtingus vamzdžius, į kuriuos galime skaityti ar rašyti duomenis, čia duomenims rašyti naudojome 0xF0F0F0F066. Imtuvo pusėje turime naudoti tą patį adresą „ ReadData“ () funkcijoje, kad gautume parašytus duomenis.
anuliuoti WriteData () { myRadio.stopListening (); // Nustokite gauti ir pradėkite valdyti myRadio.openWritingPipe (0xF0F0F0F066); // Siunčia duomenis apie šį 40 bitų adresą myRadio.write (& data, sizeof (data)); vėlavimas (300); }
funkcija void WriteData () nuskaito duomenis ir įtraukia juos į kintamąjį. Vėlgi iš 6 skirtingų vamzdžių, kuriais galime čia skaityti ar rašyti duomenis, duomenims skaityti naudojome 0xF0F0F0F0AA. Tai reiškia, kad kito modulio siųstuvas kažką parašė šiuo adresu, todėl mes jį skaitome iš to paties.
negaliojantis „ReadData“ () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Kurį vamzdį skaityti, 40 bitų adresas myRadio.startListening (); // Sustabdykite „Transminting“ ir pradėkite „Reveicing if“ (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (duomenys.tekstas); } }
Be šių eilučių, kitos programos eilutės yra naudojamos POT nuskaityti ir konvertuoti į 0 į 180 naudojant žemėlapio funkciją ir nusiųsti jį į imtuvo modulį, kur mes atitinkamai valdome servo. Aš jų nepaaiškinau eilutės po eilutės, nes tai jau sužinojome „Servo Interfacing“ mokymo programoje.
Servovariklio valdymas naudojant belaidį „nRF24L01“
Kai būsite pasirengę programai, siųstuvo ir imtuvo kodą (nurodytą žemiau) įkelkite į atitinkamas „Arduino“ plokštes ir įjunkite juos USB jungtimi. Taip pat galite paleisti serijinį abiejų plokščių monitorių, kad patikrintumėte, kokia vertė perduodama ir kas gaunama. Jei viskas veikia taip, kaip tikėtasi, pasukus POT rankenėlę siųstuvo pusėje, atitinkamai turėtų pasisukti ir kitos pusės servo serveris.
Visiškas projekto darbas parodytas toliau pateiktame vaizdo įraše. Visiškai normalu, jei šie moduliai neveikia iš pirmo karto. Jei susidūrėte su kokia nors problema, dar kartą patikrinkite kodą ir laidus ir išbandykite aukščiau pateiktas gedimų šalinimo gaires. Jei nieko neveikia, paskelbkite savo problemą forumuose arba komentarų skiltyje, ir aš pabandysiu jas išspręsti.