- Bli kjent med nRF24L01 RF-modulen
- Grensesnitt nRF24L01 med Arduino
- Mottakerside: Arduino Uno nRF24L01 modultilkoblinger
- Senderside: Arduino Nano nRF24L01-modultilkoblinger
- Arbeider med nRF24L01 + Trådløs transceiver-modul
- Programmering nRF24L01 for Arduino
- Kontrollerer servomotor ved hjelp av nRF24L01 trådløst
Mens Internet of Things (IoT), Industry 4.0, Machine to Machine-kommunikasjon osv. Blir stadig mer populært, har behovet for trådløs kommunikasjon blitt sittende, og flere maskiner / enheter snakker med hverandre i skyen. Designere bruker mange trådløse kommunikasjonssystemer som Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi-moduler, 433MHz RF-moduler, Lora, nRF osv., Og valg av medium avhenger av hvilken type applikasjon det brukes i.
Blant alle er et populært trådløst medium for lokal nettverkskommunikasjon nRF24L01. Disse modulene opererer på 2,4 GHz (ISM-bånd) med baudrate fra 250 Kbps til 2 Mbps, noe som er lovlig i mange land og kan brukes i industrielle og medisinske applikasjoner. Det hevdes også at med riktige antenner kan disse modulene overføre og motta opptil en avstand på 100 meter mellom dem. Interessant ikke sant !!? Så i denne opplæringen lærer vi mer om disse nRF24l01-modulene og hvordan du kan grensesnitt den med en mikrokontrollerplattform som Arduino. Vi vil også dele noen løsninger for vanlige problemer når du bruker denne modulen.
Bli kjent med nRF24L01 RF-modulen
De nRF24L01 modulene er transceiver moduler, noe som betyr at hver modul kan både sende og motta data, men siden de er halv-dupleks på de kan enten sende eller motta data om gangen. Modulen har den generiske nRF24L01 IC fra nordiske halvledere som er ansvarlig for overføring og mottak av data. IC-en kommuniserer ved hjelp av SPI-protokollen og kan dermed enkelt grensesnittes med alle mikrokontrollere. Det blir mye lettere med Arduino siden bibliotekene er lett tilgjengelige. De pinouts av en standard nRF24L01 modul er vist nedenfor
Modulen har driftsspenning fra 1,9V til 3,6V (vanligvis 3,3V) og bruker veldig mindre strøm på bare 12mA under normal drift, noe som gjør det batteribesparende og kan til og med kjøre på myntceller. Selv om driftsspenningen er 3,3V, er de fleste pinnene 5V tolerante og kan derfor grensesnittes direkte med 5V mikrokontrollere som Arduino. En annen fordel med å bruke disse modulene er at hver modul har 6 rørledninger. Betydning, hver modul kan kommunisere med 6 andre moduler for å overføre eller motta data. Dette gjør modulen egnet for å lage stjerne- eller mesh-nettverk i IoT-applikasjoner. De har også et bredt adresseområde på 125 unike ID-er, og i et lukket område kan vi bruke 125 av disse modulene uten å forstyrre hverandre.
Grensesnitt nRF24L01 med Arduino
I denne opplæringen vil vi lære hvordan du kan grensesnittet nRF24L01 med Arduino ved å kontrollere servomotoren koblet til en Arduino ved å variere potensiometeret på den andre Arduino. For enkelhets skyld har vi brukt en nRF24L01-modul som sender og den andre er mottaker, men hver modul kan programmeres til å sende og motta data individuelt.
Kretsskjemaet for å koble nRF24L01-modulen med Arduino er vist nedenfor. For variasjon har jeg brukt UNO for mottakersiden og Nano for sendersiden. Men logikken for tilkobling forblir den samme for andre Arduino-kort som mini, mega også.
Mottakerside: Arduino Uno nRF24L01 modultilkoblinger
Som sagt tidligere kommuniserer nRF24L01 ved hjelp av SPI-protokoll. På Arduino Nano og UNO brukes pinnene 11, 12 og 13 til SPI-kommunikasjon. Derfor kobler vi MOSI-, MISO- og SCK-pinnene fra nRF til henholdsvis pinnene 11, 12 og 13. Pinene CE og CS kan konfigureres av brukeren, jeg har brukt pin 7 og 8 her, men du kan bruke hvilken som helst pin ved å endre programmet. NRF-modulen drives av 3.3V-pinnen på Arduino, som i de fleste tilfeller vil fungere. Hvis ikke, kan du prøve en egen strømforsyning. Bortsett fra grensesnittet til nRF, har jeg også koblet en servomotor til pin 7 og drevet den gjennom 5V-pinnen på Arduino. På samme måte er senderkretsen vist nedenfor.
Senderside: Arduino Nano nRF24L01-modultilkoblinger
Tilkoblingene for senderen er også de samme, i tillegg har jeg brukt et potensiometer koblet over 5V ad jordpinnen til Arduino. Den analoge utgangsspenningen som vil variere fra 0-5V er koblet til A7-pinnen på Nano. Begge kortene får strøm via USB-porten.
Arbeider med nRF24L01 + Trådløs transceiver-modul
For å få nRF24L01 til å fungere uten støy, vil vi kanskje vurdere følgende ting. Jeg har jobbet med denne nRF24L01 + i lang tid og har lært følgende punkter som kan hjelpe deg med å bli truffet på en vegg. Du kan prøve disse når modulene ikke fungerte på vanlig måte.
1. De fleste av nRF24L01 + -modulene i markedet er falske. De billige som vi kan finne på Ebay og Amazon er de verste (Ikke bekymre deg, med få justeringer kan vi få dem til å fungere)
2. Hovedproblemet er strømforsyningen, ikke koden din. De fleste kodene på nettet vil fungere skikkelig, jeg har selv en arbeidskode som jeg personlig testet. Gi meg beskjed hvis du trenger dem.
3. Vær oppmerksom fordi modulene som skrives ut som NRF24L01 + faktisk er Si24Ri (Ja, et kinesisk produkt).
4. Klon- og falske moduler vil forbruke mer strøm, og derfor ikke utvikle strømkretsen din basert på nRF24L01 + datablad, fordi Si24Ri vil ha høyt strømforbruk ca 250mA.
5. Vær oppmerksom på spenningsryper og strømspenninger, disse modulene er veldig følsomme og kan lett brenne opp. (;-(stekt opp to moduler så langt)
6. Å legge til et par kondensatorer (10uF og 0.1uF) over Vcc og GN i modulen hjelper deg med å gjøre forsyningen ren, og dette fungerer for de fleste modulene.
Fortsatt hvis du har problemer med å rapportere om kommentarseksjonen eller lese gjennom dette, eller stille spørsmål på forumet vårt.
Sjekk også vårt gjennomtrengende prosjekt om å lage et chatterom ved hjelp av nRF24L01.
Programmering nRF24L01 for Arduino
Det har vært veldig enkelt å bruke disse modulene med Arduino, på grunn av det lett tilgjengelige biblioteket opprettet av maniacbug på GitHub. Klikk på lenken for å laste ned biblioteket som ZIP-mappe og legge det til din Arduino IDE ved å bruke Sketch -> Include Library -> Add.ZIP library option. Etter å ha lagt til biblioteket kan vi begynne å programmere for prosjektet. Vi må skrive to programmer, det ene er for sendersiden og det andre for mottakersiden. Men som jeg sa tidligere, kan hver modul fungere både som sender og mottaker. Begge programmene er gitt på slutten av denne siden, i senderkoden vil mottakeralternativet bli kommentert og i mottakerprogrammet vil senderkoden bli kommentert. Du kan bruke den hvis du prøver et prosjekt der modulen må fungere som begge deler. Arbeidet med programmet er forklart nedenfor.
Som alle programmer begynner vi med å inkludere topptekstfilene. Siden nRF bruker SPI-protokoll, har vi tatt med SPI-overskriften og også biblioteket som vi nettopp lastet ned. Servobiblioteket brukes til å kontrollere servomotoren.
#inkludere
Den neste linjen er den viktige linjen der vi instruerer biblioteket om CE- og CS-pinnene. I kretsskjemaet vårt har vi koblet CE til pin 7 og CS til pin 8, så vi setter linjen som
RF24 myRadio (7, 8);
Alle variablene som er knyttet til RF-biblioteket, bør deklareres som en sammensatt variabel struktur. I dette programmet brukes variabelen msg for å sende og motta data fra RF-modulen.
strukturpakke { int msg; }; typedef struktur pakke; Pakkedata;
Hver RF-modul har en unik adresse der den kan sende data til den respektive enheten. Siden vi bare har ett par her, setter vi adressen til null i både sender og mottaker, men hvis du har flere moduler, kan du sette ID-en til en hvilken som helst unik 6-sifret streng.
byte-adresser = {"0"};
Neste inne i tomrommet oppsettet funksjon vi initialisere RF-modul og satt til å arbeide med 115 bånd som er fri for støy og også sette modulen for å arbeide i minimalt strømforbruk modus med minimum hastighet på 250Kbps.
ugyldig oppsett () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 bånd over WIFI signaler myRadio.setPALevel (RF24_PA_MIN); // MIN kraft lav rage myRadio.setDataRate (RF24_250KBPS); // Minste hastighet myservo.attach (6); Serial.print ("Oppsett initialisert"); forsinkelse (500); }
void WriteData () -funksjonen skriver dataene som sendes til den. Som tidligere fortalt har nRF 6 forskjellige rør som vi kan lese eller skrive data til, her har vi brukt 0xF0F0F0F066 som adresse for å skrive data. På mottakersiden må vi bruke samme adresse på ReadData () -funksjonen for å motta dataene som ble skrevet.
ugyldig WriteData () { myRadio.stopListening (); // Stopp mottak og start transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Sender data på denne 40-biters adressen myRadio.write (& data, sizeof (data)); forsinkelse (300); }
void WriteData () -funksjonen leser dataene og setter dem i en variabel. Igjen av 6 forskjellige rør som vi kan lese eller skrive data her, har vi brukt 0xF0F0F0F0AA som adresse for å lese data. Dette betyr at senderen til den andre modulen har skrevet noe på denne adressen, og derfor leser vi den fra den samme.
ugyldig ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Hvilket rør som skal leses, 40 bit Adresse myRadio.startListening (); // Stopp transmittering og start gjenoppretting hvis (myRadio.available ()) { mens (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Bortsett fra disse linjene, brukes de andre linjene i programmet til å lese POT og konvertere den til 0 til 180 ved hjelp av kartfunksjon og sende den til mottakermodulen hvor vi styrer servoen tilsvarende. Jeg har ikke forklart dem linje for linje siden vi allerede har lært det i vår Servo Interfacing tutorial.
Kontrollerer servomotor ved hjelp av nRF24L01 trådløst
Når du er klar med programmet, laster du opp sender- og mottakerkoden (gitt nedenfor) på respektive Arduino-kort og slår dem på med USB-port. Du kan også starte seriell skjerm på begge kortene for å sjekke hvilken verdi som overføres og hva som mottas. Hvis alt fungerer som forventet når du dreier på POT-knappen på sendersiden, bør servoen på den andre siden også snu tilsvarende.
Fullstendig arbeid med prosjektet er demonstrert i videoen nedenfor. Det er helt normalt å ikke få disse modulene til å fungere ved første forsøk. Hvis du har fått problemer, sjekk koden og ledningene på nytt og prøv de ovennevnte retningslinjene for feilsøking. Hvis ingenting fungerer, legg inn problemet ditt på forumene eller i kommentarseksjonen, og jeg vil prøve å løse dem.