- Zoznámenie sa s RF modulom nRF24L01
- Prepojenie nRF24L01 s Arduino
- Strana prijímača: Pripojenie modulu Arduino Uno nRF24L01
- Strana vysielača: Pripojenie modulu Arduino Nano nRF24L01
- Práca s modulom bezdrôtového vysielača / prijímača nRF24L01 +
- Programovanie nRF24L01 pre Arduino
- Ovládanie servomotora pomocou nRF24L01 bezdrôtovo
Zatiaľ čo internet vecí (IoT), priemysel 4.0, komunikácia medzi strojmi atď. Sú čoraz populárnejšie, potreba bezdrôtovej komunikácie sa stala bežnou záležitosťou a čoraz viac strojov / zariadení spolu komunikuje v cloude. Dizajnéri používajú veľa bezdrôtových komunikačných systémov, ako sú Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi moduly, 433MHz RF moduly, Lora, nRF atď. A výber média závisí od typu aplikácie, v ktorej sa používa.
Jedným zo populárnych bezdrôtových médií na komunikáciu v miestnej sieti je nRF24L01. Tieto moduly pracujú na pásme 2,4 GHz (pásmo ISM) s prenosovou rýchlosťou od 250 kb / s do 2 Mb / s, čo je v mnohých krajinách legálne a môžu sa používať v priemyselných a lekárskych aplikáciách. Tiež sa tvrdí, že s vhodnými anténami môžu tieto moduly vysielať a prijímať až 100 metrovú vzdialenosť medzi nimi. Zaujimave nie !!? V tomto výučbe sa teda dozvieme viac o týchto moduloch nRF24l01 a o tom, ako ich prepojiť s platformou mikrokontrolérov, ako je Arduino. Pri používaní tohto modulu sa tiež podelíme o niektoré riešenia často sa vyskytujúcich problémov.
Zoznámenie sa s RF modulom nRF24L01
Tieto moduly nRF24L01 sú vysielacej a prijímacej moduly, čo znamená, každý modul môže ako odosielať a prijímať dáta, ale pretože sú poloduplexné môžu buď odosielať a prijímať dáta naraz. Modul má generický IC nRF24L01 od severských polovodičov, ktorý je zodpovedný za prenos a príjem dát. IC komunikuje pomocou protokolu SPI, a preto ho možno ľahko prepojiť s ľubovoľnými mikrokontrolérmi. S Arduinom je to oveľa jednoduchšie, pretože knižnice sú ľahko dostupné. K vývodov štandardného modulu nRF24L01 je uvedené nižšie
Modul má prevádzkové napätie od 1,9 V do 3,6 V (typicky 3,3 V) a pri bežnej prevádzke spotrebuje iba veľmi málo prúdu, iba 12 mA, čo umožňuje efektivitu batérie a teda môže fungovať aj na gombíkové články. Aj keď je prevádzkové napätie 3,3 V, väčšina pinov je tolerantná voči 5V, a preto je možné ich priamo prepojiť s 5V mikrokontrolérmi, ako je Arduino. Ďalšou výhodou použitia týchto modulov je, že každý modul má 6 potrubí. To znamená, že každý modul môže komunikovať s ďalšími 6 modulmi na účely prenosu alebo prijímania údajov. Vďaka tomu je modul vhodný na vytváranie hviezdnych alebo sieťových sietí v aplikáciách IoT. Tiež majú široký rozsah adries 125 jedinečných ID, preto v uzavretej oblasti môžeme použiť 125 týchto modulov bez toho, aby sme sa navzájom rušili.
Prepojenie nRF24L01 s Arduino
V tomto výučbe sa naučíme, ako prepojiť nRF24L01 s Arduinom riadením servomotora spojeného s jedným Arduino zmenou potenciometra na druhom Arduine. Kvôli jednoduchosti sme jeden modul nRF24L01 použili ako vysielač a druhým prijímač, ale každý modul je možné naprogramovať tak, aby odosielal a prijímal údaje jednotlivo.
Schéma zapojenia pre pripojenie modulu nRF24L01 k Arduinu je uvedená nižšie. Pre zaujímavosť som použil UNO na strane prijímača a Nano na strane vysielača. Logika pripojenia však zostáva rovnaká pre ostatné dosky Arduino, ako napríklad mini, mega.
Strana prijímača: Pripojenie modulu Arduino Uno nRF24L01
Ako už bolo povedané, nRF24L01 komunikuje pomocou protokolu SPI. Na Arduino Nano a UNO sa piny 11, 12 a 13 používajú na komunikáciu SPI. Preto sme spojili piny MOSI, MISO a SCK z nRF s piny 11, 12 a 13, v uvedenom poradí. Kolíky CE a CS sú užívateľsky konfigurovateľné, použil som tu kolíky 7 a 8, ale môžete použiť akýkoľvek kolík úpravou programu. Modul nRF je napájaný kolíkom 3,3 V na Arduine, ktorý vo väčšine prípadov bude fungovať. Pokiaľ nie, je možné vyskúšať samostatný zdroj napájania. Okrem prepojenia nRF som tiež pripojil servomotor na pin 7 a napájal ho cez 5V pin na Arduine. Obdobne je znázornený obvod vysielača.
Strana vysielača: Pripojenie modulu Arduino Nano nRF24L01
Pripojenia vysielača sú tiež rovnaké, navyše som použil potenciometer pripojený cez 5 V a zemný kolík Arduina. Výstupné analógové napätie, ktoré sa bude pohybovať od 0 do 5 V, je pripojené k pinu A7 na nano. Obe dosky sú napájané cez port USB.
Práca s modulom bezdrôtového vysielača / prijímača nRF24L01 +
Avšak aby náš nRF24L01 fungoval bez šumu, možno budeme chcieť zvážiť nasledujúce veci. Na tomto nRF24L01 + pracujem dlho a naučil som sa nasledujúce body, ktoré vám môžu pomôcť pri zasiahnutí steny. Môžete vyskúšať tieto moduly, keď moduly nepracovali normálnym spôsobom.
1. Väčšina modulov nRF24L01 + na trhu je falošná. Lacné, ktoré nájdeme na Ebay a Amazone, sú najhoršie (nebojte sa, vďaka niekoľkým vylepšeniam ich dokážeme zariadiť)
2. Hlavným problémom je napájanie, nie váš kód. Väčšina kódov online bude fungovať správne. Ja sám mám pracovný kód, ktorý som osobne testoval. Ak potrebujete, dajte mi vedieť.
3. Venujte pozornosť, pretože moduly, ktoré sú vytlačené ako NRF24L01 +, sú v skutočnosti Si24Ri (Áno, čínsky produkt).
4. Klony a falošné moduly budú spotrebovávať viac energie, preto nevyvíjajte svoj napájací obvod na základe údajového listu nRF24L01 +, pretože Si24Ri bude mať vysoký prúdový odber asi 250 mA.
5. Dávajte pozor na zvlnenie napätia a prúdové rázy, tieto moduly sú veľmi citlivé a mohli by sa ľahko spáliť. (;-(dosiaľ vyprážané 2 moduly)
6. Pridanie pár kondenzátorov (10 uF a 0,1 uF) medzi moduly Vcc a Gnd modulu pomôže zabezpečiť čisté napájanie, čo funguje pre väčšinu modulov.
Napriek tomu, ak máte problémy, nahláste komentár alebo si ich prečítajte alebo si položte otázky na našom fóre.
Skontrolujte tiež náš neprestajný projekt vytvorenia chatovacej miestnosti pomocou nRF24L01.
Programovanie nRF24L01 pre Arduino
Používanie týchto modulov s Arduinom bolo veľmi jednoduché, kvôli ľahko dostupnej knižnici vytvorenej maniacbug na GitHub. Kliknutím na odkaz stiahnete knižnicu ako priečinok ZIP a pridáte ju do svojho Arduino IDE pomocou možnosti Skica -> Zahrnúť knižnicu -> Pridať knižnicu.ZIP . Po pridaní knižnice môžeme začať programovať pre projekt. Musíme napísať dva programy, jeden je pre stranu vysielača a druhý pre stranu prijímača. Ako som už uviedol skôr, každý modul môže fungovať ako vysielač aj prijímač. Oba programy sú uvedené na konci tejto stránky, v kóde vysielača bude komentovaná možnosť prijímača a v programe prijímača bude komentovaný kód vysielača. Môžete ho použiť, ak skúšate projekt, v ktorom musí modul fungovať ako oboje. Fungovanie programu je vysvetlené nižšie.
Rovnako ako všetky programy, začneme zahrnutím hlavičkových súborov. Pretože nRF používa protokol SPI, zahrnuli sme hlavičku SPI a tiež knižnicu, ktorú sme si práve stiahli. Servo knižnica sa používa na ovládanie servomotora.
#include
Ďalším riadkom je dôležitý riadok, kde dávame knižnici pokyny o kolíkoch CE a CS. V našej schéme zapojenia sme pripojili CE na pin 7 a CS na pin 8, takže sme nastavili linku ako
RF24 myRadio (7, 8);
Všetky premenné, ktoré sú spojené s RF knižnicou, by mali byť deklarované ako zložená štruktúra premenných. V tomto programe sa premenná msg používa na odosielanie a prijímanie údajov z RF modulu.
struct balíček { int msg; }; typedef struct balíček Balíček; Údaje o balíku;
Každý RF modul má jedinečnú adresu, pomocou ktorej môže odosielať údaje do príslušného zariadenia. Pretože tu máme iba jeden pár, nastavili sme vo vysielači aj v prijímači adresu na nulu, ale ak máte viac modulov, môžete ID nastaviť na ľubovoľný jedinečný šesťmiestny reťazec.
adresy bajtov = {"0"};
Ďalej vo vnútri funkcie nastavenia prázdnoty inicializujeme RF modul a nastavíme sa na prácu s pásmom 115, ktoré je bez šumu, a tiež nastavíme modul na prácu v režime minimálnej spotreby energie s minimálnou rýchlosťou 250 Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // pásmo 115 nad WIFI signály myRadio.setPALevel (RF24_PA_MIN); // MIN nízky výkon myRadio.setDataRate (RF24_250KBPS); // Minimálna rýchlosť myservo.attach (6); Serial.print ("Inicializácia inicializovaná"); oneskorenie (500); }
void WriteData () funkcia zapíše údaje, ktoré jej boli odovzdané. Ako už bolo povedané, nRF má 6 rôznych potrubí, do ktorých môžeme čítať alebo zapisovať dáta, tu sme ako adresu na zápis dát použili 0xF0F0F0F066. Na strane prijímača musímena príjem údajov, ktoré boli zapísané,použiť rovnakú adresu vofunkcii ReadData () .
void WriteData () { myRadio.stopListening (); // Zastaviť príjem a spustiť transmisiu myRadio.openWritingPipe (0xF0F0F0F066); // Posiela dáta na túto 40-bitovú adresu myRadio.write (& data, sizeof (data)); oneskorenie (300); }
void WriteData () funkcia načíta údaje a vloží ich do premennej. Opäť zo 6 rôznych potrubí, pomocou ktorých tu môžeme čítať alebo zapisovať údaje, sme ako adresu na čítanie údajov použili 0xF0F0F0F0AA. To znamená, že vysielač druhého modulu niečo napísal na túto adresu, a preto to čítame z tej istej adresy.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Ktoré potrubie sa má načítať, 40 bitová adresa myRadio.startListening (); // Zastavte prenos a začnite reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Okrem týchto riadkov sa ďalšie riadky v programe používajú na načítanie POT a jeho prevod na 0 až 180 pomocou funkcie mapy a ich odoslanie do prijímacieho modulu, kde podľa toho riadime servo. Nevysvetľoval som ich riadok po riadku, pretože sme sa to už dozvedeli v našom návode Servo Interfacing.
Ovládanie servomotora pomocou nRF24L01 bezdrôtovo
Keď ste pripravení na program, nahrajte kód vysielača a prijímača (uvedený nižšie) na príslušné dosky Arduino a zapnite ich pomocou USB portu. Môžete tiež spustiť sériový monitor oboch dosiek a skontrolovať, ktorá hodnota sa prenáša a čo sa prijíma. Ak všetko funguje podľa očakávaní, keď otočíte POT gombíkom na strane vysielača, malo by sa podľa toho otočiť aj servo na druhej strane.
Kompletné fungovanie projektu je demonštrované na videu nižšie. Je úplne bežné, že tieto moduly nepracujú na prvý pokus. Ak ste narazili na akýkoľvek problém, skontrolujte znova kód a zapojenie a vyskúšajte vyššie uvedené pokyny na riešenie problémov. Ak nič nefunguje, zverejnite svoj problém na fórach alebo v sekcii komentárov a pokúsim sa ich vyriešiť.