- Upoznavanje RF modula nRF24L01
- Povezivanje nRF24L01 s Arduinom
- Strana prijemnika: veze modula Arduino Uno nRF24L01
- Strana odašiljača: Priključci modula Arduino Nano nRF24L01
- Rad s modulom bežičnog primopredajnika nRF24L01 +
- Programiranje nRF24L01 za Arduino
- Upravljanje servo motorom pomoću bežičnog nRF24L01
Dok su Internet of Things (IoT), Industrija 4.0, komunikacija od stroja do stroja itd. Sve popularnije, potreba za bežičnom komunikacijom postala je na snazi, s više strojeva / uređaja koji međusobno razgovaraju u oblaku. Dizajneri koriste mnoge bežične komunikacijske sustave poput Bluetooth Low Energy (BLE 4.0), Zigbeea, ESP43 Wi-Fi modula, RF modula od 433 MHz, Lora, nRF itd., A odabir medija ovisi o vrsti aplikacije u kojoj se koristi.
Među svim popularnim bežičnim medijima za lokalnu mrežnu komunikaciju je nRF24L01. Ovi moduli rade na 2,4 GHz (ISM opseg) brzinom prijenosa od 250Kbps do 2Mbps, što je legalno u mnogim zemljama i može se koristiti u industrijskim i medicinskim primjenama. Također se tvrdi da s odgovarajućim antenama ovi moduli mogu emitirati i primati na udaljenost od 100 metara između njih. Zanimljivo zar ne?? Dakle, u ovom uputstvu naučit ćemo više o tim modulima nRF24l01 i načinu povezivanja s platformom mikrokontrolera poput Arduina. Također ćemo podijeliti neka rješenja za probleme s kojima se često susreću tijekom korištenja ovog modula.
Upoznavanje RF modula nRF24L01
U nRF24L01 moduli su Transceiver module, što znači da svaki modul može i slati i primati podatke, ali budući da su poludupleksni su ili mogu slati i primati podatke u isto vrijeme. Modul ima generički nRF24L01 IC iz nordijskih poluvodiča koji je odgovoran za prijenos i prijem podataka. IC komunicira pomoću SPI protokola i stoga se lako može povezati s bilo kojim mikrokontrolerom. S Arduinom postaje puno lakše jer su knjižnice dostupne. U pinouts standardnog nRF24L01 modula prikazan je ispod

Modul ima radni napon od 1,9 V do 3,6 V (obično 3,3 V) i troši vrlo malo struje od samo 12 mA tijekom normalnog rada, što ga čini učinkovitim u radu s baterijama, pa čak može raditi i na ćelijskim pločicama. Iako je radni napon 3,3 V, većina pinova tolerira 5 V i stoga se mogu izravno povezati s 5 V mikrokontrolerima poput Arduina. Još jedna prednost korištenja ovih modula je ta što svaki modul ima 6 cjevovoda. Znači, svaki modul može komunicirati s 6 drugih modula za prijenos ili primanje podataka. To modul čini prikladnim za stvaranje zvjezdastih ili mrežastih mreža u IoT aplikacijama. Također imaju širok raspon adresa od 125 jedinstvenih ID-ova, stoga u zatvorenom prostoru možemo koristiti 125 ovih modula bez međusobnog ometanja.
Povezivanje nRF24L01 s Arduinom
U ovom uputstvu naučit ćemo kako povezati nRF24L01 s Arduinom upravljajući servo motorom povezanim s jednim Arduinom mijenjanjem potenciometra na drugom Arduinu. Radi jednostavnosti koristili smo jedan nRF24L01 modul kao odašiljač, a drugi je prijemnik, ali svaki modul može se programirati za pojedinačno slanje i primanje podataka.
Shema spoja za povezivanje modula nRF24L01 s Arduinom prikazana je u nastavku. Za raznolikost upotrijebio sam UNO za prijemnik i Nano za stranu odašiljača. Ali logika povezivanja ostaje ista i za ostale Arduino ploče kao što su mini i mega.
Strana prijemnika: veze modula Arduino Uno nRF24L01


Kao što je ranije rečeno, nRF24L01 komunicira uz pomoć SPI protokola. Na Arduino Nano i UNO pinovi 11, 12 i 13 koriste se za SPI komunikaciju. Stoga spajamo MOSI, MISO i SCK pinove iz nRF na pinove 11, 12 i 13, respektivno. Pribadače CE i CS mogu se konfigurirati, ovdje sam koristio pin 7 i 8, ali možete koristiti bilo koji pin mijenjanjem programa. NRF modul napaja se 3,3V pinom na Arduinu, što će u većini slučajeva raditi. Ako nije, može se isprobati zasebno napajanje. Osim povezivanja nRF-a, na pin 7 priključio sam i servo motor i napajao ga kroz 5V pin na Arduinu. Slično je dolje prikazan krug odašiljača.
Strana odašiljača: Priključci modula Arduino Nano nRF24L01


Priključci za odašiljač također su isti, osim toga, koristio sam potenciometar spojen na 5V ad Ground pin Arduina. Izlazni analogni napon koji će varirati od 0-5V povezan je na A7 pin Nano-a. Obje se ploče napajaju putem USB priključka.
Rad s modulom bežičnog primopredajnika nRF24L01 +
Međutim, kako bi naš nRF24L01 radio bez buke, možda bismo trebali razmotriti sljedeće stvari. Već dugo radim na ovom nRF24L01 + i naučio sam sljedeće točke koje vam mogu pomoći da ne budete pogođeni zidom. Možete ih isprobati kada moduli nisu radili normalno.
1. Većina nRF24L01 + modula na tržištu su lažni. Najjeftinije koje možemo pronaći na Ebayu i Amazonu su najgore (ne brinite, s nekoliko podešavanja možemo ih natjerati da rade)
2. Glavni problem je napajanje, a ne vaš kod. Većina internetskih kodova ispravno će raditi, i sam imam radni kod koji sam osobno testirao. Javite mi ako vam trebaju.
3. Obratite pažnju jer su moduli koji su otisnuti kao NRF24L01 + zapravo Si24Ri (da, kineski proizvod).
4. Klonski i lažni moduli trošit će više energije, stoga nemojte razvijati svoj krug napajanja zasnovan na tehničkom listu nRF24L01 +, jer će Si24Ri imati veliku trenutnu potrošnju od oko 250 mA.
5. Čuvajte se mreškanja napona i strujnih udara, ovi su moduli vrlo osjetljivi i lako mogu izgorjeti. (;-(zasad je spržio 2 modula)
6. Dodavanje nekoliko kondenzatora (10uF i 0,1uF) preko Vcc i Gnd modula pomaže u opskrbi vaše opskrbe čistom, a to funkcionira za većinu modula.
Ipak, ako imate problema, prijavite odjeljak za komentare ili pročitajte ovo ili postavite svoja pitanja na našem forumu.
Također provjerite naš prethodni projekt stvaranja sobe za chat pomoću nRF24L01.
Programiranje nRF24L01 za Arduino
Bilo je vrlo jednostavno koristiti ove module s Arduinom, zahvaljujući lako dostupnoj biblioteci koju je kreirao maniacbug na GitHubu. Kliknite vezu da biste knjižnicu preuzeli u ZIP mapu i dodali je u svoj Arduino IDE pomoću opcije Skica -> Uključi biblioteku -> Dodaj.ZIP biblioteku . Nakon dodavanja knjižnice možemo započeti s programiranjem za projekt. Moramo napisati dva programa, jedan je za odašiljač, a drugi za prijemnik. Međutim, kao što sam ranije rekao, svaki modul može raditi i kao odašiljač i kao prijemnik. Oba programa dana su na kraju ove stranice, u kodu odašiljača primit će se opcija prijemnika, a u programu prijamnika kod odašiljača. Možete ga koristiti ako pokušavate projekt u kojem modul mora raditi kao oboje. Rad programa je objašnjen u nastavku.
Kao i svi programi, započinjemo uključivanjem zaglavnih datoteka. Budući da nRF koristi SPI protokol, uključili smo zaglavlje SPI i knjižnicu koju smo upravo preuzeli. Servo knjižnica koristi se za upravljanje servo motorom.
#include
Sljedeći je redak važan red u kojem knjižnicu upućujemo na CE i CS pinove. U našem krugovnom dijagramu spojili smo CE na pin 7 i CS na pin 8, pa smo postavili liniju kao
RF24 myRadio (7, 8);
Sve varijable koje su povezane s RF knjižnicom trebaju biti deklarirane kao složena struktura varijabli. U ovom programu varijabla msg koristi se za slanje i primanje podataka iz RF modula.
strukturni paket { int msg; }; typedef struct paket Paket; Podaci o paketu;
Svaki RF modul ima jedinstvenu adresu pomoću koje može slati podatke na odgovarajući uređaj. Budući da ovdje imamo samo jedan par, adresu postavljamo na nulu i u odašiljaču i u prijamniku, ali ako imate više modula, možete postaviti ID na bilo koji jedinstveni 6-znamenkasti niz.
adrese bajtova = {"0"};
Sljedeća unutar šupljina za postavljanje funkcije smo inicijalizirati RF modul i postaviti za rad s 115 bend koji je slobodan od buke i postaviti modul za rad u modu minimalnom potrošnjom energije s minimalnom brzinom od 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // pojas 115 iznad WIFI signala myRadio.setPALevel (RF24_PA_MIN); // MIN snage low rage myRadio.setDataRate (RF24_250KBPS); // Minimalna brzina myservo.attach (6); Serial.print ("Inicijalizirano postavljanje"); kašnjenje (500); }
void WriteData () funkcija zapisuje podatke koji su joj proslijeđeni. Kao što je ranije rečeno, nRF ima 6 različitih cijevi na koje možemo čitati ili pisati podatke, ovdje smo koristili 0xF0F0F0F066 kao adresu za pisanje podataka. Na strani prijemnika moramo koristiti istu adresu nafunkciji ReadData () za primanje podataka koji su zapisani.
void WriteData () { myRadio.stopListening (); // Zaustavite primanje i pokrenite transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Šalje podatke na ovu 40-bitnu adresu myRadio.write (& data, sizeof (data)); kašnjenje (300); }
void WriteData () funkcija čita podatke i stavlja ih u varijablu. Opet od 6 različitih cijevi pomoću kojih ovdje možemo čitati ili pisati podatke, koristili smo 0xF0F0F0F0AA kao adresu za čitanje podataka. To znači da je odašiljač drugog modula nešto napisao na ovoj adresi i stoga ga čitamo s iste.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Koju cijev čitati, 40-bitna adresa myRadio.startListening (); // Zaustavite prenošenje i započnite s provjerom ako (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Osim ovih redaka, ostale linije u programu koriste se za očitavanje POT-a i njegovo pretvaranje u 0 do 180 pomoću funkcije map i šalju ga na modul prijemnika gdje u skladu s tim kontroliramo servo. Nisam ih objasnio redak po redak jer smo to već naučili u našem vodiču za sučelje Servo.
Upravljanje servo motorom pomoću bežičnog nRF24L01

Kad ste spremni s programom, prenesite kod predajnika i prijamnika (naveden u nastavku) na odgovarajuće Arduino ploče i napajajte ih USB priključkom. Također možete pokrenuti serijski monitor obje ploče kako biste provjerili koja se vrijednost prenosi i što se prima. Ako sve radi prema očekivanjima kada okrenete tipku POT na strani odašiljača, servo s druge strane također bi se trebao okretati u skladu s tim.
Kompletni rad projekta prikazan je u videu ispod. Sasvim je normalno da ovi moduli ne rade u prvom pokušaju. Ako ste naišli na bilo kakav problem, ponovno provjerite kôd i ožičenje i isprobajte gore navedene smjernice za rješavanje problema. Ako ništa ne uspije, objavite svoj problem na forumima ili u odjeljku za komentare i pokušat ću ih riješiti.
