- Cunoașterea modulului RF nRF24L01
- Interfațarea nRF24L01 cu Arduino
- Partea receptorului: conexiuni modul Arduino Uno nRF24L01
- Partea transmițătorului: Conexiuni ale modulului Arduino Nano nRF24L01
- Lucrul cu nRF24L01 + modulul transceiver wireless
- Programare nRF24L01 pentru Arduino
- Controlul servomotorului utilizând nRF24L01 fără fir
În timp ce Internetul obiectelor (IoT), industria 4.0, comunicarea de la mașină la mașină etc. devin din ce în ce mai populare, nevoia de comunicații fără fir a devenit obligatorie, mai multe mașini / dispozitive pentru a vorbi între ele pe cloud. Proiectanții folosesc multe sisteme de comunicații fără fir, cum ar fi Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Module Wi-Fi, 433MHz RF Modules, Lora, nRF etc., iar selectarea mediului depinde de tipul de aplicație în care este utilizat.
Printre toate, un mediu wireless popular pentru comunicațiile în rețeaua locală este nRF24L01. Aceste module funcționează pe 2,4 GHz (bandă ISM) cu o rată de transmisie de la 250 Kbps la 2 Mbps, ceea ce este legal în multe țări și poate fi utilizat în aplicații industriale și medicale. De asemenea, se susține că, cu antene adecvate, aceste module pot transmite și primi până la o distanță de 100 de metri între ele. Interesant nu !!? Deci, în acest tutorial vom afla mai multe despre aceste module nRF24l01 și cum să-l interfațăm cu o platformă de microcontroler precum Arduino. De asemenea, vom împărtăși câteva soluții pentru problemele obișnuite în timpul utilizării acestui modul.
Cunoașterea modulului RF nRF24L01
Cele Modulele nRF24L01 sunt de emisie - recepție module, ceea ce înseamnă fiecare modul poate atât trimite și primi date, dar din moment ce acestea sunt semi-duplex, fie ele pot trimite sau primi date la un moment dat. Modulul are IC generic nRF24L01 de la semiconductori nordici, care este responsabil pentru transmiterea și recepția datelor. IC comunică utilizând protocolul SPI și, prin urmare, poate fi ușor interfațat cu orice microcontrolere. Devine mult mai ușor cu Arduino, deoarece bibliotecile sunt ușor disponibile. De pinouts unui modul standard nRF24L01 este prezentat mai jos
Modulul are o tensiune de funcționare de la 1,9 V la 3,6 V (de obicei 3,3 V) și consumă foarte puțin curent de doar 12 mA în timpul funcționării normale, ceea ce îl face eficient din punct de vedere al bateriei și, prin urmare, poate funcționa chiar și pe celulele monede. Chiar dacă tensiunea de funcționare este de 3,3V, majoritatea pinilor sunt toleranți la 5V și, prin urmare, pot fi interfațați direct cu microcontrolere de 5V, cum ar fi Arduino. Un alt avantaj al utilizării acestor module este că fiecare modul are 6 conducte. Adică, fiecare modul poate comunica cu alte 6 module pentru a transmite sau primi date. Acest lucru face ca modulul să fie potrivit pentru crearea de rețele stele sau mesh în aplicații IoT. De asemenea, au o gamă largă de adrese de 125 de ID-uri unice, prin urmare, într-o zonă închisă putem folosi 125 dintre aceste module fără a interfera unul cu celălalt.
Interfațarea nRF24L01 cu Arduino
În acest tutorial vom învăța cum să interfațăm nRF24L01 cu Arduino controlând servo-motorul conectat cu un Arduino prin variația potențiometrului pe celălalt Arduino. Din motive de simplitate, am folosit un modul nRF24L01 ca emițător, iar celălalt este receptor, dar fiecare modul poate fi programat pentru a trimite și primi date individual.
Schema de circuit pentru conectarea modulului nRF24L01 cu Arduino este prezentată mai jos. Pentru varietate, am folosit UNO pentru partea receptorului și Nano pentru partea transmițătorului. Dar logica conexiunii rămâne aceeași și pentru alte plăci Arduino precum mini, mega.
Partea receptorului: conexiuni modul Arduino Uno nRF24L01
După cum sa spus mai devreme, nRF24L01 comunică cu ajutorul protocolului SPI. Pe Arduino Nano și UNO pinii 11, 12 și 13 sunt utilizați pentru comunicarea SPI. Prin urmare, conectăm pinii MOSI, MISO și SCK de la nRF la pinii 11, 12 și respectiv 13. Pinii CE și CS sunt configurabili de utilizator, am folosit pinii 7 și 8 aici, dar puteți utiliza orice pin modificând programul. Modulul nRF este alimentat de pinul de 3,3 V de pe Arduino, care în majoritatea cazurilor va funcționa. Dacă nu, se poate încerca o sursă de alimentare separată. În afară de interfața nRF, am conectat și un servomotor la pinul 7 și l-am alimentat prin pinul de 5V de pe Arduino. În mod similar, circuitul emițătorului este prezentat mai jos.
Partea transmițătorului: Conexiuni ale modulului Arduino Nano nRF24L01
Conexiunile pentru transmițător sunt, de asemenea, aceleași, în plus, am folosit un potențiometru conectat pe pinul de masă de 5V al Arduino. Tensiunea analogică de ieșire, care va varia de la 0-5V, este conectată la pinul A7 al Nano. Ambele plăci sunt alimentate prin portul USB.
Lucrul cu nRF24L01 + modulul transceiver wireless
Cu toate acestea, pentru a face ca nRF24L01 să funcționeze fără zgomot, ar putea dori să luăm în considerare următoarele lucruri. Lucrez la acest nRF24L01 + de mult timp și am învățat următoarele puncte care vă pot ajuta să nu vă loviți de un perete. Le puteți încerca atunci când modulele nu au funcționat normal.
1. Majoritatea modulelor nRF24L01 + de pe piață sunt false. Cele mai ieftine pe care le putem găsi pe Ebay și Amazon sunt cele mai rele (nu vă faceți griji, cu câteva modificări le putem face să funcționeze)
2. Principala problemă este sursa de alimentare, nu codul dumneavoastră. Majoritatea codurilor online vor funcționa corect, eu însumi am un cod de lucru pe care l-am testat personal, anunțați-mă dacă aveți nevoie de ele.
3. Acordați atenție deoarece modulele tipărite ca NRF24L01 + sunt de fapt Si24Ri (Da, un produs chinezesc).
4. Clona și modulele false vor consuma mai multă energie, prin urmare nu vă dezvoltați circuitul de alimentare bazat pe foaia de date nRF24L01 +, deoarece Si24Ri va avea un consum mare de curent de aproximativ 250mA.
5. Feriți-vă de valurile de tensiune și de supratensiunile de curent, aceste module sunt foarte sensibile și ar putea arde cu ușurință. (;-(prăjit 2 module până acum)
6. Adăugarea a câteva condensatoare (10uF și 0,1uF) pe Vcc și Gnd ale modulului vă ajută să vă purificați alimentarea și acest lucru funcționează pentru majoritatea modulelor.
Totuși, dacă aveți probleme raportați la secțiunea de comentarii sau citiți acest lucru sau adresați-vă întrebări pe forumul nostru.
Verificați, de asemenea, proiectul nostru anterior privind crearea unei camere de chat folosind nRF24L01.
Programare nRF24L01 pentru Arduino
A fost foarte ușor să utilizați aceste module cu Arduino, datorită bibliotecii ușor disponibile, creată de maniacbug pe GitHub. Faceți clic pe link pentru a descărca biblioteca ca folder ZIP și adăugați-o la IDE-ul dvs. Arduino utilizând Sketch -> Include Library -> Add.ZIP library option. După adăugarea bibliotecii putem începe programarea pentru proiect. Trebuie să scriem două programe, unul este pentru partea transmițătorului și celălalt pentru partea receptorului. Totuși, așa cum am spus mai devreme, fiecare modul poate funcționa atât ca emițător, cât și ca receptor. Ambele programe sunt prezentate la sfârșitul acestei pagini, în codul emițătorului, opțiunea receptorului va fi comentată, iar în programul receptorului, codul emițătorului va fi comentat. Îl puteți folosi dacă încercați un proiect în care modulul trebuie să funcționeze ca ambele. Funcționarea programului este explicată mai jos.
Ca toate programele, începem prin includerea fișierelor antet. Deoarece nRF utilizează protocolul SPI, am inclus antetul SPI și biblioteca pe care tocmai am descărcat-o. Servoteca este utilizată pentru a controla servomotorul.
#include
Următoarea linie este linia importantă în care instruim biblioteca despre pinii CE și CS. În schema noastră de circuite, am conectat CE la pinul 7 și CS la pinul 8, astfel încât să setăm linia ca
RF24 myRadio (7, 8);
Toate variabilele care sunt asociate cu biblioteca RF ar trebui declarate ca o structură de variabilă compusă. În acest program, variabila msg este utilizată pentru a trimite și primi date de la modulul RF.
struct package { int msg; }; pachet typedef struct Pachet; Date pachet;
Fiecare modul RF are o adresă unică cu ajutorul căreia poate trimite date către dispozitivul respectiv. Deoarece avem o singură pereche aici, setăm adresa la zero atât în emițător, cât și în receptor, dar dacă aveți mai multe module puteți seta ID-ul la orice șir unic de 6 cifre.
adrese de octeți = {"0"};
Apoi, în interiorul funcției de configurare nulă , inițializăm modulul RF și setăm să funcționeze cu bandă 115, care este lipsită de zgomot și, de asemenea, setăm modulul să funcționeze în modul de consum minim de energie cu viteză minimă de 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 benzi deasupra semnalelor WIFI myRadio.setPALevel (RF24_PA_MIN); // MIN putere scăzută furie myRadio.setDataRate (RF24_250KBPS); // Viteza minimă myservo.attach (6); Serial.print ("Setup Initialized"); întârziere (500); }
funcția void WriteData () scrie datele transmise către acesta. După cum am spus mai devreme, nRF are 6 conducte diferite pe care putem citi sau scrie date, aici am folosit 0xF0F0F0F066 ca adresă pentru a scrie date. Pe partea de receptor trebuie să folosim aceeași adresă înfuncția ReadData () pentru a primi datele care au fost scrise.
void WriteData () { myRadio.stopListening (); // Opriți primirea și porniți transmiterea myRadio.openWritingPipe (0xF0F0F0F066); // Trimite date pe această adresă de 40 de biți myRadio.write (& data, sizeof (data)); întârziere (300); }
Funcția void WriteData () citește datele și le pune într-o variabilă. Din nou din 6 țevi diferite folosind care putem citi sau scrie date aici, am folosit 0xF0F0F0F0AA ca adresă pentru citirea datelor. Aceasta înseamnă că emițătorul celuilalt modul a scris ceva pe această adresă și, prin urmare, îl citim de la aceeași.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Ce pipă de citit, 40 biți Adresă myRadio.startListening (); // Opriți Transminting și începeți Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
În afară de aceste linii, celelalte linii din program sunt folosite pentru citirea POT și convertirea acestuia la 0 la 180 folosind funcția de hartă și trimiterea la modulul Receptor unde controlăm servo-ul în consecință. Nu le-am explicat rând cu rând, deoarece am aflat deja acest lucru în tutorialul nostru Servo Interfacing.
Controlul servomotorului utilizând nRF24L01 fără fir
Odată ce sunteți gata cu programul încărcați codul emițătorului și receptorului (dat mai jos) pe plăcile Arduino respective și alimentați-le cu portul USB. De asemenea, puteți lansa monitorul serial al ambelor plăci pentru a verifica ce valoare este transmisă și ce este primită. Dacă totul funcționează așa cum era de așteptat când rotiți butonul POT pe partea transmițătorului, servo-ul din cealaltă parte ar trebui să se întoarcă în consecință.
Funcționarea completă a proiectului este demonstrată în videoclipul de mai jos. Este destul de normal ca aceste module să nu funcționeze la prima încercare. Dacă ați întâmpinat vreo problemă, verificați din nou codul și cablarea și încercați instrucțiunile de depanare date mai sus. Dacă nimic nu funcționează, postează-ți problema pe forumuri sau în secțiunea de comentarii și voi încerca să le rezolv.