- Lär känna nRF24L01 RF-modulen
- Gränssnitt nRF24L01 med Arduino
- Mottagarsida: Arduino Uno nRF24L01-modulanslutningar
- Sändarsida: Arduino Nano nRF24L01-modulanslutningar
- Arbetar med nRF24L01 + Wireless Transceiver Module
- Programmering nRF24L01 för Arduino
- Styr servomotor med nRF24L01 trådlöst
Medan Internet of Things (IoT), Industry 4.0, Machine to Machine-kommunikation etc blir allt populärare har behovet av trådlös kommunikation blivit sittande, med fler maskiner / enheter att prata med varandra i molnet. Designers använder många trådlösa kommunikationssystem som Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi-moduler, 433MHz RF-moduler, Lora, nRF etc, och valet av medium beror på vilken typ av applikation den används i.
Bland alla är ett populärt trådlöst medium för lokal nätverkskommunikation nRF24L01. Dessa moduler fungerar på 2,4 GHz (ISM-band) med överföringshastighet från 250 Kbit / s till 2 Mbps vilket är lagligt i många länder och kan användas i industriella och medicinska applikationer. Det hävdas också att med rätt antenner kan dessa moduler sända och ta emot upp till ett avstånd på 100 meter mellan dem. Intressant rätt !!? Så i den här handledningen lär vi oss mer om dessa nRF24l01-moduler och hur man gränssnitt det med en mikrokontrollerplattform som Arduino. Vi delar också några lösningar för vanligt förekommande problem när vi använder den här modulen.
Lär känna nRF24L01 RF-modulen
De nRF24L01 modulerna är transceiver moduler, vilket innebär att varje modul kan både skicka och ta emot data, men eftersom de är halv duplex de antingen kan skicka och ta emot data på en gång. Modulen har den generiska nRF24L01 IC från nordiska halvledare som ansvarar för överföring och mottagning av data. IC kommunicerar med hjälp av SPI-protokollet och kan därför enkelt gränssnitt med alla mikrokontroller. Det blir mycket lättare med Arduino eftersom biblioteken är tillgängliga. De stifttilldelningar för en standard nRF24L01 modulen visas nedan
Modulen har driftspänning från 1,9V till 3,6V (vanligtvis 3,3V) och förbrukar mycket mindre ström på endast 12mA under normal drift vilket gör det batterieffektivt och kan till och med köras på myntceller. Även om driftspänningen är 3,3 V är de flesta stiften 5 V-toleranta och kan därmed direkt anslutas till 5 V-mikrokontroller som Arduino. En annan fördel med att använda dessa moduler är att varje modul har 6 rörledningar. Det betyder att varje modul kan kommunicera med 6 andra moduler för att sända eller ta emot data. Detta gör modulen lämplig för att skapa stjärn- eller nätverksnätverk i IoT-applikationer. De har också ett brett adressområde på 125 unika ID: er, och därför kan vi i ett stängt område använda 125 av dessa moduler utan att störa varandra.
Gränssnitt nRF24L01 med Arduino
I denna handledning lär vi oss hur man gränssnitt nRF24L01 med Arduino genom att styra servomotorn ansluten till en Arduino genom att variera potentiometern på den andra Arduino. För enkelhets skull har vi använt en nRF24L01-modul som sändare och den andra är mottagare, men varje modul kan programmeras för att skicka och ta emot data individuellt.
Kretsschemat för att ansluta nRF24L01-modulen med Arduino visas nedan. För mångfald har jag använt UNO för mottagarsidan och Nano för sändarsidan. Men logiken för anslutning förblir densamma för andra Arduino-kort som mini, mega också.
Mottagarsida: Arduino Uno nRF24L01-modulanslutningar
Som sagt tidigare kommunicerar nRF24L01 med hjälp av SPI-protokollet. På Arduino Nano och UNO används stiften 11, 12 och 13 för SPI-kommunikation. Därför ansluter vi MOSI-, MISO- och SCK-stiften från nRF till stiften 11, 12 respektive 13. Stiften CE och CS kan konfigureras av användaren, jag har använt stift 7 och 8 här, men du kan använda valfri stift genom att ändra programmet. NRF-modulen drivs av 3,3 V-stiftet på Arduino, vilket i de flesta fall fungerar. Om inte, kan en separat strömförsörjning testas. Förutom att ansluta nRF har jag också anslutit en servomotor till stift 7 och drivit den genom 5V-stiftet på Arduino. På samma sätt visas sändarkretsen nedan.
Sändarsida: Arduino Nano nRF24L01-modulanslutningar
Anslutningarna för sändaren är också desamma, dessutom har jag använt en potentiometer ansluten över 5V ad Arduinos jordstift. Den analoga utgångsspänningen som varierar från 0-5V är ansluten till A7-stiftet på Nano. Båda korten drivs via USB-porten.
Arbetar med nRF24L01 + Wireless Transceiver Module
För att få vår nRF24L01 att fungera utan buller kan vi dock överväga följande saker. Jag har arbetat med den här nRF24L01 + länge och lärt mig följande punkter som kan hjälpa dig att bli träffad på en vägg. Du kan prova dessa när modulerna inte fungerade som vanligt.
1. De flesta av nRF24L01 + -modulerna på marknaden är falska. De billigaste som vi kan hitta på Ebay och Amazon är de värsta (Oroa dig inte, med få tweaks kan vi få dem att fungera)
2. Det största problemet är strömförsörjningen, inte din kod. De flesta koder online kommer att fungera ordentligt, jag har själv en arbetskod som jag personligen testade. Låt mig veta om du behöver dem.
3. Var uppmärksam eftersom modulerna som skrivs ut som NRF24L01 + faktiskt är Si24Ri (Ja en kinesisk produkt).
4. Klon- och falskmodulerna förbrukar mer ström, därför utvecklar du inte din strömkrets baserat på datablad nRF24L01 +, eftersom Si24Ri kommer att ha hög strömförbrukning cirka 250 mA.
5. Se upp för krusningar och strömspänningar, dessa moduler är mycket känsliga och kan lätt brinna upp. (;-(stekt upp 2 moduler hittills)
6. Att lägga till ett par kondensatorer (10uF och 0.1uF) över Vcc och Gnd i modulen hjälper till att göra din leverans ren och detta fungerar för de flesta modulerna.
Fortfarande om du har problem rapporterar du om kommentarsektionen eller läser igenom detta eller ställer dina frågor på vårt forum.
Kontrollera också vårt genomgående projekt för att skapa ett chattrum med nRF24L01.
Programmering nRF24L01 för Arduino
Det har varit väldigt enkelt att använda dessa moduler med Arduino på grund av det lätt tillgängliga biblioteket som skapats av maniacbug på GitHub. Klicka på länken för att ladda ner biblioteket som ZIP-mapp och lägg till det i din Arduino IDE med hjälp av skissen -> Inkludera bibliotek -> Lägg till.ZIP-biblioteksalternativ . Efter att ha lagt till biblioteket kan vi börja programmera för projektet. Vi måste skriva två program, det ena är för sändarsidan och det andra för mottagarsidan. Men som jag sa tidigare kan varje modul fungera både som sändare och mottagare. Båda programmen ges i slutet av denna sida, i sändarkoden kommer mottagaralternativet att kommenteras och i mottagarprogrammet kommer sändarkoden att kommenteras. Du kan använda den om du försöker ett projekt där modulen måste fungera som båda. Programmets funktion förklaras nedan.
Som alla program börjar vi med att inkludera rubrikfilerna. Eftersom nRF använder SPI-protokoll har vi inkluderat SPI-rubriken och även biblioteket som vi just laddade ner. Servobiblioteket används för att styra servomotorn.
#omfatta
Nästa rad är den viktiga raden där vi instruerar biblioteket om CE- och CS-stiften. I vårt kretsschema har vi anslutit CE till stift 7 och CS till stift 8 så vi ställer in linjen som
RF24 myRadio (7, 8);
Alla variabler som är associerade med RF-biblioteket bör deklareras som en sammansatt variabelstruktur. I detta program används variabeln msg för att skicka och ta emot data från RF-modulen.
struct-paket { int msg; }; typedef struct paketpaket; Paketdata;
Varje RF-modul har en unik adress med vilken den kan skicka data till respektive enhet. Eftersom vi bara har ett par här sätter vi adressen till noll i både sändare och mottagare, men om du har flera moduler kan du ställa in ID: t till vilken unik 6-siffrig sträng som helst.
byte adresser = {"0"};
Nästa inuti tomrumsfunktionen initierar vi RF-modulen och sätter igång med 115-band som är fritt från brus och ställer också in modulen att arbeta i lägsta energiförbrukningsläge med lägsta hastighet på 250 Kbps.
ogiltig installation () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 band ovanför WIFI signalerar myRadio.setPALevel (RF24_PA_MIN); // MIN kraft låg raseri myRadio.setDataRate (RF24_250KBPS); // Minsta hastighet myservo.attach (6); Serial.print ("Setup Initialized"); fördröjning (500); }
void WriteData () -funktionen skriver data som skickas till den. Som tidigare sagt har nRF 6 olika rör som vi kan läsa eller skriva data till, här har vi använt 0xF0F0F0F066 som adress för att skriva data. På mottagarsidan måste vi använda samma adress på ReadData () -funktionen för att ta emot de data som skrevs.
ogiltig WriteData () { myRadio.stopListening (); // Stoppa mottagning och starta transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Skickar data på denna 40-bitars adress myRadio.write (& data, sizeof (data)); fördröjning (300); }
void WriteData () -funktionen läser data och placerar den i en variabel. Återigen av 6 olika rör med vilka vi kan läsa eller skriva data här har vi använt 0xF0F0F0F0AA som adress för att läsa data. Detta betyder att sändaren till den andra modulen har skrivit något på den här adressen och därför läser vi den från densamma.
ogiltig ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Vilket rör som ska läsas, 40-bitars Adress myRadio.startListening (); // Stoppa sändningen och börja granska om (myRadio.available ()) { medan (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Förutom dessa rader används de andra raderna i programmet för att läsa POT och konvertera den till 0 till 180 med hjälp av kartfunktionen och skicka den till mottagarmodulen där vi styr servon därefter. Jag har inte förklarat dem rad för rad eftersom vi redan har lärt oss det i vår handledning om Servo Interfacing.
Styr servomotor med nRF24L01 trådlöst
När du är klar med programmet laddar du upp sändar- och mottagarkoden (anges nedan) på respektive Arduino-kort och slår på dem med USB-port. Du kan också starta den seriella bildskärmen på båda korten för att kontrollera vilket värde som överförs och vad som tas emot. Om allt fungerar som förväntat när du vrider på POT-ratten på sändarsidan bör servon på andra sidan också vända i enlighet därmed.
Det fullständiga arbetet med projektet visas i videon nedan. Det är helt normalt att inte få dessa moduler att fungera vid första försöket. Om du har stött på något problem, kontrollera koden och ledningarna igen och prova ovan angivna riktlinjer för felsökning. Om inget fungerar, lägg upp ditt problem på forumet eller i kommentarsektionen och jag kommer att försöka lösa dem.