- Lær nRF24L01 RF-modulet at kende
- Interfacing nRF24L01 med Arduino
- Modtagerside: Arduino Uno nRF24L01 modulforbindelser
- Senderside: Arduino Nano nRF24L01 modulforbindelser
- Arbejder med nRF24L01 + Wireless Transceiver Module
- Programmering af nRF24L01 til Arduino
- Styring af servomotor ved hjælp af nRF24L01 trådløst
Mens Internet of Things (IoT), Industry 4.0, maskine til maskinkommunikation osv. Bliver stadig mere populære, er behovet for trådløs kommunikation blevet etableret med flere maskiner / enheder til at tale med hinanden i skyen. Designere bruger mange trådløse kommunikationssystemer som Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi-moduler, 433MHz RF-moduler, Lora, nRF osv., Og valget af medium afhænger af, hvilken applikation det bruges i.
Blandt alle er et populært trådløst medium til lokal netværkskommunikation nRF24L01. Disse moduler fungerer på 2,4 GHz (ISM-bånd) med baudrate fra 250 Kbps til 2 Mbps, hvilket er lovligt i mange lande og kan bruges i industrielle og medicinske applikationer. Det hævdes også, at med passende antenner kan disse moduler transmittere og modtage op til en afstand på 100 meter imellem dem. Interessant rigtigt !!? Så i denne vejledning lærer vi mere om disse nRF24l01-moduler, og hvordan man bruger det til en mikrocontrollerplatform som Arduino. Vi vil også dele nogle løsninger til de ofte stillede problemer, mens du bruger dette modul.
Lær nRF24L01 RF-modulet at kende
De nRF24L01 moduler er transceiver moduler, hvilket betyder hvert modul kan både sende og modtage data, men da de er halv-duplex, de kan enten sende eller modtage data ad gangen. Modulet har den generiske nRF24L01 IC fra nordiske halvledere, som er ansvarlig for transmission og modtagelse af data. IC'en kommunikerer ved hjælp af SPI-protokollen og kan derfor let interfaces med alle mikrocontrollere. Det bliver meget lettere med Arduino, da bibliotekerne er let tilgængelige. De pinouts af en standard nRF24L01 modul er vist nedenfor
Modulet har en driftsspænding fra 1,9 V til 3,6 V (typisk 3,3 V) og bruger meget mindre strøm på kun 12 mA under normal drift, hvilket gør det batteribesparende og kan derfor endda køre på møntceller. Selvom driftsspændingen er 3,3 V, er de fleste stifter 5 V tolerante og kan derfor direkte interfaces med 5 V mikrokontroller som Arduino. En anden fordel ved at bruge disse moduler er, at hvert modul har 6 rørledninger. Det betyder, at hvert modul kan kommunikere med 6 andre moduler for at transmittere eller modtage data. Dette gør modulet velegnet til oprettelse af stjerne- eller mesh-netværk i IoT-applikationer. De har også et bredt adresseområde på 125 unikke ID'er, og derfor kan vi i et lukket område bruge 125 af disse moduler uden at forstyrre hinanden.
Interfacing nRF24L01 med Arduino
I denne vejledning lærer vi, hvordan man interagerer nRF24L01 med Arduino ved at styre servomotoren forbundet med en Arduino ved at variere potentiometeret på den anden Arduino. For at gøre det nemmere har vi brugt et nRF24L01-modul som sender, og det andet er modtager, men hvert modul kan programmeres til at sende og modtage data individuelt.
Kredsløbsdiagrammet til at forbinde nRF24L01-modulet med Arduino er vist nedenfor. For variation har jeg brugt UNO til modtagersiden og Nano til sendersiden. Men logikken for forbindelse forbliver den samme for andre Arduino-kort som mini, mega også.
Modtagerside: Arduino Uno nRF24L01 modulforbindelser
Som tidligere nævnt kommunikerer nRF24L01 ved hjælp af SPI-protokol. På Arduino Nano og UNO benyttes benene 11, 12 og 13 til SPI-kommunikation. Derfor forbinder vi MOSI-, MISO- og SCK-benene fra nRF til henholdsvis benene 11, 12 og 13. Stifterne CE og CS kan konfigureres af brugeren, jeg har brugt pin 7 og 8 her, men du kan bruge enhver pin ved at ændre programmet. NRF-modulet drives af 3.3V-stiften på Arduino, som i de fleste tilfælde fungerer. Hvis ikke, kan en separat strømforsyning afprøves. Bortset fra grænsefladen til nRF har jeg også tilsluttet en servomotor til pin 7 og drevet den gennem 5V pin på Arduino. På samme måde er senderkredsløbet vist nedenfor.
Senderside: Arduino Nano nRF24L01 modulforbindelser
Forbindelserne til senderen er også de samme, og derudover har jeg brugt et potentiometer tilsluttet på tværs af 5V ad jordstiften på Arduino. Den analoge udgangsspænding, som vil variere fra 0-5V, er forbundet til A7-stiften på Nano. Begge kort styres via USB-porten.
Arbejder med nRF24L01 + Wireless Transceiver Module
For at få vores nRF24L01 til at arbejde fri for støj vil vi måske overveje følgende ting. Jeg har arbejdet med denne nRF24L01 + i lang tid og har lært følgende punkter, der kan hjælpe dig med at blive ramt på en væg. Du kan prøve disse, når modulerne ikke fungerede normalt.
1. De fleste af nRF24L01 + modulerne på markedet er falske. De billige, som vi kan finde på Ebay og Amazon, er de værste (Bare rolig, med få tweaks kan vi få dem til at fungere)
2. Hovedproblemet er strømforsyningen, ikke din kode. De fleste af koder online fungerer korrekt, jeg har selv en arbejdskode, som jeg personligt testede. Lad mig vide, hvis du har brug for dem.
3. Vær opmærksom, fordi modulerne, der er trykt som NRF24L01 +, faktisk er Si24Ri (Ja, et kinesisk produkt).
4. Klon- og falske moduler vil forbruge mere strøm, og udvikl derfor ikke dit strømkredsløb baseret på nRF24L01 + datablad, fordi Si24Ri vil have et højt strømforbrug omkring 250 mA.
5. Pas på spændingsbølger og strømstød, disse moduler er meget følsomme og kan let brænde op. (;-(stegt indtil videre 2 moduler)
6. Tilføjelse af et par kondensatorer (10uF og 0.1uF) på tværs af Vcc og GND af modulet hjælper med at gøre din forsyning ren, og dette fungerer for de fleste moduler.
Stadig hvis du har problemer med at rapportere om kommentarsektionen eller læse igennem dette, eller stille dine spørgsmål på vores forum.
Tjek også vores gennemgribende projekt om oprettelse af et chatrum ved hjælp af nRF24L01.
Programmering af nRF24L01 til Arduino
Det har været meget let at bruge disse moduler med Arduino på grund af det let tilgængelige bibliotek oprettet af maniacbug på GitHub. Klik på linket for at downloade biblioteket som ZIP-mappe og føje det til din Arduino IDE ved hjælp af Skitse -> Inkluder bibliotek -> Tilføj.ZIP-biblioteksindstilling . Efter tilføjelse af biblioteket kan vi begynde at programmere til projektet. Vi er nødt til at skrive to programmer, det ene er til sendersiden og det andet til modtagersiden. Men som jeg fortalte tidligere, kan hvert modul fungere både som sender og modtager. Begge programmer er vist i slutningen af denne side, i senderkoden vil modtagerindstillingen blive kommenteret, og i modtagerprogrammet vil senderkoden blive kommenteret. Du kan bruge det, hvis du prøver et projekt, hvor modulet skal fungere som begge dele. Programmets arbejde forklares nedenfor.
Som alle programmer begynder vi med at inkludere header-filerne. Da nRF bruger SPI-protokol, har vi inkluderet SPI-headeren og også det bibliotek, som vi lige har downloadet. Servobiblioteket bruges til at styre servomotoren.
#omfatte
Den næste linje er den vigtige linje, hvor vi instruerer biblioteket om CE- og CS-benene. I vores kredsløbsdiagram har vi tilsluttet CE til pin 7 og CS til pin 8, så vi indstiller linjen som
RF24 myRadio (7, 8);
Alle variabler, der er knyttet til RF-biblioteket, skal deklareres som en sammensat variabel struktur. I dette program bruges variablen msg til at sende og modtage data fra RF-modulet.
strukturpakke { int msg; }; typedef struct pakke pakke; Pakkedata;
Hvert RF-modul har en unik adresse, ved hjælp af hvilken det kan sende data til den respektive enhed. Da vi kun har et par her, indstiller vi adressen til nul i både sender og modtager, men hvis du har flere moduler, kan du indstille ID'et til enhver unik 6-cifret streng.
byte adresser = {"0"};
Dernæst inden for tomrumsopsætningsfunktionen initialiserer vi RF-modulet og indstiller til at arbejde med 115 bånd, der er fri for støj, og indstiller også modulet til at arbejde i et minimum strømforbrugstilstand med en minimumshastighed på 250 Kbps.
ugyldig opsætning () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 bånd over WIFI signaler myRadio.setPALevel (RF24_PA_MIN); // MIN power low rage myRadio.setDataRate (RF24_250KBPS); // Mindste hastighed myservo.attach (6); Serial.print ("Setup initialiseret"); forsinkelse (500); }
ugyldig WriteData () -funktion skriver de data, der sendes til den. Som tidligere fortalt har nRF 6 forskellige rør, som vi kan læse eller skrive data til, her har vi brugt 0xF0F0F0F066 som adresse til at skrive data. På modtagersiden skal vi bruge den samme adresse på funktionen ReadData () til at modtage de data, der blev skrevet.
ugyldige WriteData () { myRadio.stopListening (); // Stop modtagelse og start transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Sender data på denne 40-bit adresse myRadio.write (& data, sizeof (data)); forsinkelse (300); }
ugyldig WriteData () -funktion læser dataene og placerer dem i en variabel. Igen ud af 6 forskellige rør, hvor vi kan læse eller skrive data her, har vi brugt 0xF0F0F0F0AA som adresse til at læse data. Dette betyder, at senderen til det andet modul har skrevet noget på denne adresse, og derfor læser vi det fra den samme.
ugyldige ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Hvilket rør der skal læses, 40 bit Adresse myRadio.startListening (); // Stop transmission og start Reveicing hvis (myRadio.available ()) { mens (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Bortset fra disse linjer bruges de andre linjer i programmet til at læse POT og konvertere den til 0 til 180 ved hjælp af kortfunktionen og sende den til modtagermodulet, hvor vi styrer servoen i overensstemmelse hermed. Jeg har ikke forklaret dem linje for linje, da vi allerede har lært det i vores Servo Interfacing tutorial.
Styring af servomotor ved hjælp af nRF24L01 trådløst
Når du er klar med programmet, skal du sende sender- og modtagerkoden (angivet nedenfor) på de respektive Arduino-kort og tænd dem med USB-port. Du kan også starte den serielle skærm på begge kort for at kontrollere, hvilken værdi der transmitteres, og hvad der modtages. Hvis alt fungerer som forventet, når du drejer POT-knappen på sendersiden, skal servoen på den anden side også dreje i overensstemmelse hermed.
Den fuldstændige bearbejdning af projektet demonstreres i videoen nedenfor. Det er helt normalt, at disse moduler ikke fungerer ved første forsøg. Hvis du har haft problemer, skal du kontrollere koden og ledningerne igen og prøve ovenstående givne retningslinjer for fejlfinding. Hvis intet virker, kan du lægge dit problem i fora eller i kommentarsektionen, og jeg vil prøve at løse dem.