- Spoznavanje RF modula nRF24L01
- Povezava nRF24L01 z Arduinom
- Stran sprejemnika: povezave modula Arduino Uno nRF24L01
- Stran oddajnika: Priključki modula Arduino Nano nRF24L01
- Delo z modulom brezžičnega oddajnika nRF24L01 +
- Programiranje nRF24L01 za Arduino
- Krmiljenje servo motorja z brezžično povezavo nRF24L01
Medtem ko so internet stvari (IoT), industrija 4.0, komunikacija med stroji itd. Vse bolj priljubljena, postaja potreba po brezžični komunikaciji vse več naprav in naprav, ki se med seboj pogovarjajo v oblaku. Oblikovalci uporabljajo številne brezžične komunikacijske sisteme, kot so Bluetooth Low Energy (BLE 4.0), Zigbee, Wi-Fi moduli ESP43, RF moduli 433 MHz, Lora, nRF itd., Izbira medija pa je odvisna od vrste aplikacije, v kateri se uporablja.
Med vsemi je priljubljen brezžični medij za lokalno omrežno komunikacijo nRF24L01. Ti moduli delujejo na 2,4 GHz (pas ISM) s hitrostjo prenosa podatkov od 250Kbps do 2Mbps, kar je v mnogih državah dovoljeno in se lahko uporablja v industrijskih in medicinskih aplikacijah. Trdi se tudi, da lahko ti moduli z ustreznimi antenami oddajajo in sprejemajo do razdalje 100 metrov med njimi. Zanimivo kajne !!? Torej, v tej vadnici bomo izvedeli več o teh modulih nRF24l01 in kako jih povezati z mikrokrmilno platformo, kot je Arduino. Prav tako bomo delili nekatere rešitve za pogoste težave med uporabo tega modula.
Spoznavanje RF modula nRF24L01
V nRF24L01 moduli so oddajniški moduli, kar pomeni vsak modul lahko tako pošiljanje in prejemanje podatkov, vendar, ker so pol-duplex, da lahko bodisi pošiljanje ali prejemanje podatkov naenkrat. Modul ima generično nRF24L01 IC iz nordijskih polprevodnikov, ki je odgovoren za prenos in sprejem podatkov. IC komunicira s protokolom SPI, zato ga je mogoče zlahka povezati z vsemi mikrokrmilniki. Z Arduinom je veliko lažje, saj so knjižnice na voljo. V pinouts standardnega nRF24L01 modula je prikazana spodaj
Modul deluje na napetost od 1,9 V do 3,6 V (običajno 3,3 V) in med običajnim delovanjem porabi zelo manj toka le 12 mA, zaradi česar je baterija učinkovita in zato lahko deluje celo na kovanske celice. Čeprav je delovna napetost 3,3 V, je večina zatičev tolerantna na 5 V, zato jih je mogoče neposredno povezati s 5 V mikrokrmilniki, kot je Arduino. Druga prednost uporabe teh modulov je, da ima vsak modul 6 cevovodov. To pomeni, da lahko vsak modul komunicira s 6 drugimi moduli za prenos ali sprejem podatkov. Zaradi tega je modul primeren za ustvarjanje zvezdastih ali mrežastih omrežij v aplikacijah interneta stvari. Imajo tudi široko območje naslovov 125 enoličnih ID-jev, zato lahko na zaprtem območju uporabimo 125 teh modulov, ne da bi pri tem posegali med seboj.
Povezava nRF24L01 z Arduinom
V tej vadnici bomo izvedeli, kako povezati nRF24L01 z Arduinom tako, da nadzorujemo servo motor, povezan z enim Arduinom, s spreminjanjem potenciometra na drugem Arduinu. Zaradi enostavnosti smo uporabili en modul nRF24L01 kot oddajnik, drugi pa sprejemnik, vendar je vsak modul lahko programiran za pošiljanje in sprejemanje podatkov posebej.
Shema vezja za povezavo modula nRF24L01 z Arduinom je prikazana spodaj. Za različnost sem uporabil UNO na strani sprejemnika in Nano na strani oddajnika. Toda logika povezave ostaja enaka tudi za druge plošče Arduino, kot so mini, mega.
Stran sprejemnika: povezave modula Arduino Uno nRF24L01
Kot že rečeno, nRF24L01 komunicira s pomočjo protokola SPI. Na Arduino Nano in UNO se zatiči 11, 12 in 13 uporabljajo za komunikacijo SPI. Zato povežemo zatiče MOSI, MISO in SCK iz nRF z zatiči 11, 12 oziroma 13. Zatiča CE in CS lahko nastavite uporabnik, tukaj sem uporabil zatiča 7 in 8, vendar lahko s spreminjanjem programa uporabite kateri koli zatič. Modul nRF napaja 3,3-voltni pin na Arduinu, ki v večini primerov deluje. V nasprotnem primeru lahko poskusite z ločenim napajalnikom. Poleg povezave z nRF sem na pin 7 priklopil tudi servo motor in ga napajal prek 5V nožice na Arduinu. Podobno je oddajniško vezje prikazano spodaj.
Stran oddajnika: Priključki modula Arduino Nano nRF24L01
Povezave za oddajnik so prav tako enake, poleg tega sem uporabil potenciometer, priključen na 5V ad Ground pin Arduino. Izhodna analogna napetost, ki se spreminja od 0-5V, je priključena na zatič A7 Nano-a. Obe plošči se napajata prek vrat USB.
Delo z modulom brezžičnega oddajnika nRF24L01 +
Da bi naš nRF24L01 deloval brez hrupa, bomo morda želeli razmisliti o naslednjih stvareh. Dolgo sem delal na tem modelu nRF24L01 + in se naučil naslednjih točk, ki vam lahko pomagajo, da vas ne zadene zid. Te lahko poskusite, kadar moduli niso delovali normalno.
1. Večina modulov nRF24L01 + na trgu je ponarejenih. Poceni, ki jih najdemo na Ebayu in Amazonu, so najslabši (ne skrbite, z nekaj popravki jih bomo lahko pripravili)
2. Glavna težava je napajanje, ne vaša koda. Večina spletnih kod bo delovala pravilno, sam imam delujočo kodo, ki sem jo osebno preizkusil. Sporočite mi, če jih potrebujete.
3. Bodite pozorni, ker so moduli, ki so natisnjeni kot NRF24L01 +, dejansko Si24Ri (ja, kitajski izdelek).
4. Klonski in ponarejeni moduli bodo porabili več energije, zato svojega napajalnega vezja ne razvijajte na podlagi podatkovnega lista nRF24L01 +, ker bo imel Si24Ri visoko trenutno porabo približno 250 mA.
5. Pazite se valovanja napetosti in trenutnih napetosti, ti moduli so zelo občutljivi in lahko zlahka izgorijo. (;- (do zdaj prepražili 2 modula)
6. Če dodate nekaj kondenzatorjev (10uF in 0,1uF) v Vcc in Gnd modula, boste lažje oskrbeli svojo zalogo in to deluje pri večini modulov.
Še vedno, če imate težave, poročajte v razdelku s komentarji ali preberite to vprašanje ali postavite vprašanja na našem forumu
Oglejte si tudi naš prejšnji projekt o ustvarjanju klepetalnice z uporabo nRF24L01.
Programiranje nRF24L01 za Arduino
Uporaba teh modulov z Arduinom je bila zelo enostavna zaradi knjižnice, ki jo je na GitHub ustvaril maniacbug. Kliknite povezavo, da knjižnico prenesete kot mapo ZIP in jo dodate v svoj Arduino IDE z uporabo možnosti Skica -> Vključi knjižnico -> Dodaj knjižnico.ZIP . Po dodajanju knjižnice lahko začnemo s programiranjem za projekt. Napisati moramo dva programa, eden je za oddajno in drugi za sprejemniško stran. Kot sem že povedal, lahko vsak modul deluje kot oddajnik in sprejemnik. Oba programa sta podana na koncu te strani, v kodi oddajnika se opiše možnost sprejemnika, v programu sprejemnika pa koda oddajnika. Uporabite ga lahko, če poskušate projekt, pri katerem mora modul delovati kot oba. Delovanje programa je razloženo spodaj.
Kot vsi programi tudi mi začnemo z vključevanjem datotek glave. Ker nRF uporablja protokol SPI, smo vključili glavo SPI in tudi knjižnico, ki smo jo pravkar prenesli. Servo knjižnica se uporablja za nadzor servo motorja.
#include
Naslednja vrstica je pomembna vrstica, kjer knjižnico poučujemo o zatičih CE in CS. V našem vezju smo CE priključili na pin 7 in CS na pin 8, zato smo postavili črto kot
RF24 myRadio (7, 8);
Vse spremenljivke, ki so povezane s knjižnico RF, bi morale biti deklarirane kot sestavljena struktura spremenljivk. V tem programu se spremenljivka msg uporablja za pošiljanje in prejemanje podatkov iz RF modula.
strukturni paket { int msg; }; typedef struct paket Paket; Podatki o paketu;
Vsak RF modul ima edinstven naslov, s pomočjo katerega lahko pošlje podatke v posamezno napravo. Ker imamo tukaj samo en par, nastavimo naslov na oddajnik in sprejemnik na nič, če pa imate več modulov, lahko ID nastavite na kateri koli edinstveni šestmestni niz.
naslovi bajtov = {"0"};
Nato znotraj funkcije nastavitve praznine inicializiramo RF modul in nastavimo na delo s 115-pasovnim pasom, ki nima hrupa, in nastavimo tudi, da modul deluje v načinu minimalne porabe energije z minimalno hitrostjo 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // pas 115 nad WIFI signali myRadio.setPALevel (RF24_PA_MIN); // MIN moči nizke stopnje myRadio.setDataRate (RF24_250KBPS); // Minimalna hitrost myservo.attach (6); Serial.print ("Inicializacija namestitve"); zamuda (500); }
void WriteData () funkcija zapiše podatke, ki so ji poslani. Kot smo že povedali, ima nRF 6 različnih cevi, v katere lahko beremo ali pišemo podatke, tukaj smo za zapis podatkov uporabili 0xF0F0F0F066. Na strani sprejemnika moramo uporabiti isti naslov vfunkciji ReadData () za sprejemanje zapisanih podatkov.
void WriteData () { myRadio.stopListening (); // Nehajte prejemati in začnite prenašati myRadio.openWritingPipe (0xF0F0F0F066); // Pošlje podatke na ta 40-bitni naslov myRadio.write (& data, sizeof (data)); zamuda (300); }
void WriteData () funkcija prebere podatke in jih postavi v spremenljivko. Tudi tokrat smo med 6 različnimi cevmi, s pomočjo katerih lahko beremo ali zapisujemo podatke, uporabili 0xF0F0F0F0AA kot naslov za branje podatkov. To pomeni, da je oddajnik drugega modula nekaj napisal na ta naslov in ga zato beremo z istega.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Katero cev za branje, 40-bitni naslov myRadio.startListening (); // Nehajte pošiljati in začnite preverjati, če je (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Poleg teh vrstic se druge vrstice v programu uporabljajo za branje POT-a in njegovo pretvorbo v 0 do 180 s pomočjo funkcije map in ga pošljejo v sprejemniški modul, kjer ustrezno krmilimo servo. Nisem jim razlagal vrstice za vrstico, saj smo se tega že naučili v naši vadnici za servo vmesnike.
Krmiljenje servo motorja z brezžično povezavo nRF24L01
Ko ste pripravljeni s programom, naložite kodo oddajnika in sprejemnika (podana spodaj) na ustrezne plošče Arduino in jih vklopite z vrati USB. Zaženete lahko tudi serijski monitor obeh plošč, da preverite, katera vrednost se prenaša in kaj prejema. Če med obračanjem gumba POT na strani oddajnika deluje vse po pričakovanjih, se mora tudi servo na drugi strani obrniti v skladu s tem.
Popolno delovanje projekta je prikazano v spodnjem videu. Povsem normalno je, da teh modulov ne začnete delovati ob prvem poskusu. Če ste naleteli na kakršno koli težavo, znova preverite kodo in ožičenje ter preizkusite zgornje smernice za odpravljanje težav. Če nič ne uspe, objavite težavo na forumih ali v oddelku za komentarje in jih bom poskusil rešiti.