- Seznámení s RF modulem nRF24L01
- Propojení nRF24L01 s Arduino
- Strana přijímače: Připojení modulu Arduino Uno nRF24L01
- Strana vysílače: Připojení modulu Arduino Nano nRF24L01
- Práce s modulem bezdrátového vysílače a přijímače nRF24L01 +
- Programování nRF24L01 pro Arduino
- Ovládání servomotoru pomocí nRF24L01 bezdrátově
Zatímco internet věcí (IoT), průmysl 4.0, komunikace mezi stroji atd. Jsou stále populárnější, stala se povinností bezdrátová komunikace, kdy více strojů / zařízení spolu mluví v cloudu. Návrháři používají mnoho bezdrátových komunikačních systémů, jako jsou Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF atd. A výběr média závisí na typu aplikace, ve které se používá.
Jedním ze populárních bezdrátových médií pro komunikaci v místní síti je nRF24L01. Tyto moduly fungují na pásmu 2,4 GHz (pásmo ISM) s přenosovou rychlostí od 250 kb / s do 2 Mb / s, což je v mnoha zemích legální a lze je použít v průmyslových a lékařských aplikacích. Rovněž se tvrdí, že se správnými anténami mohou tyto moduly vysílat a přijímat až do vzdálenosti 100 metrů mezi nimi. Zajímavé, že? V tomto výukovém programu se tedy dozvíme více o těchto modulech nRF24l01 a o tom, jak jej propojit s platformou mikrokontroléru, jako je Arduino. Při používání tohoto modulu také sdílíme některá řešení pro běžně se vyskytující problémy.
Seznámení s RF modulem nRF24L01
Tyto moduly nRF24L01 jsou vysílací a přijímací moduly, což znamená, každý modul může jak odesílat a přijímat data, ale protože jsou poloduplexní mohou buď odesílat a přijímat data najednou. Modul má obecný IC nRF24L01 od severských polovodičů, který je zodpovědný za přenos a příjem dat. IC komunikuje pomocí protokolu SPI, a proto jej lze snadno propojit s jakýmikoli mikrokontroléry. S Arduinem je to mnohem snazší, protože knihovny jsou snadno dostupné. Níže jsou uvedeny pinouty standardního modulu nRF24L01
Modul má provozní napětí od 1,9 V do 3,6 V (typicky 3,3 V) a při běžném provozu spotřebovává velmi méně proudu, pouze 12 mA, což z něj činí baterii efektivní, a proto může běžet i na knoflíkové články. I když je provozní napětí 3,3 V, většina kolíků je tolerantní k 5V, a proto je lze přímo propojit s 5V mikrokontroléry, jako je Arduino. Další výhodou použití těchto modulů je, že každý modul má 6 potrubí. To znamená, že každý modul může komunikovat s dalšími 6 moduly pro přenos nebo příjem dat. Díky tomu je modul vhodný pro vytváření hvězdných nebo mesh sítí v aplikacích IoT. Také mají široký rozsah adres 125 jedinečných ID, a proto v uzavřené oblasti můžeme použít 125 těchto modulů bez vzájemného rušení.
Propojení nRF24L01 s Arduino
V tomto tutoriálu se naučíme, jak propojit nRF24L01 s Arduinem ovládáním servomotoru připojeného k jednomu Arduinu změnou potenciometru na druhém Arduinu. Pro zjednodušení jsme jako vysílač použili jeden modul nRF24L01 a druhým přijímač, ale každý modul lze naprogramovat tak, aby odesílal a přijímal data jednotlivě.
Schéma zapojení pro připojení modulu nRF24L01 k Arduinu je uvedeno níže. Pro větší variabilitu jsem použil UNO na straně přijímače a Nano na straně vysílače. Logika připojení však zůstává stejná pro ostatní desky Arduino, jako je mini, mega.
Strana přijímače: Připojení modulu Arduino Uno nRF24L01
Jak již bylo řečeno, nRF24L01 komunikuje pomocí protokolu SPI. Na Arduino Nano a UNO se piny 11, 12 a 13 používají pro komunikaci SPI. Proto spojujeme piny MOSI, MISO a SCK z nRF s piny 11, 12 a 13. Kolíky CE a CS jsou konfigurovatelné uživatelem, zde jsem použil kolíky 7 a 8, ale můžete použít jakýkoli kolík změnou programu. Modul nRF je napájen kolíkem 3,3 V na Arduinu, který ve většině případů bude fungovat. Pokud ne, můžete vyzkoušet samostatný napájecí zdroj. Kromě propojení nRF jsem také připojil servomotor na pin 7 a napájel ho přes 5V pin na Arduino. Obdobně je zobrazen obvod vysílače.
Strana vysílače: Připojení modulu Arduino Nano nRF24L01
Připojení pro vysílač je také stejné, navíc jsem použil potenciometr připojený přes 5V a zemnící kolík Arduina. Výstupní analogové napětí, které se bude pohybovat od 0-5 V, je připojeno k pinu A7 na Nano. Obě desky jsou napájeny přes port USB.
Práce s modulem bezdrátového vysílače a přijímače nRF24L01 +
Aby však naše nRF24L01 fungovala bez hluku, možná budeme chtít zvážit následující věci. Pracoval jsem na tomto nRF24L01 + po dlouhou dobu a naučil jsem se následující body, které vám mohou pomoci při zasažení zdi. Můžete je vyzkoušet, když moduly nepracovaly normálním způsobem.
1. Většina modulů nRF24L01 + na trhu je falešná. Nejhorší jsou ty levné, které najdeme na Ebay a Amazonu (nebojte se, díky několika vylepšením je můžeme nechat fungovat)
2. Hlavním problémem je napájení, nikoli váš kód. Většina kódů online bude fungovat správně, já sám mám pracovní kód, který jsem osobně testoval. Dejte mi vědět, pokud je potřebujete.
3. Věnujte pozornost, protože moduly, které jsou vytištěny jako NRF24L01 +, jsou ve skutečnosti Si24Ri (ano čínský produkt).
4. Klony a falešné moduly budou spotřebovávat více energie, proto nevyvíjejte svůj napájecí obvod na základě datového listu nRF24L01 +, protože Si24Ri bude mít vysokou spotřebu proudu kolem 250 mA.
5. Dejte si pozor na zvlnění napětí a proudové rázy, tyto moduly jsou velmi citlivé a mohou se snadno spálit. (;-(zatím smažené 2 moduly)
6. Přidání pár kondenzátorů (10uF a 0,1uF) napříč Vcc a Gnd modulu pomáhá zajistit čistý zdroj napájení a to funguje u většiny modulů.
Pokud máte potíže, nahlaste je v sekci komentářů nebo si je přečtěte nebo si položte dotazy na našem fóru.
Zkontrolujte také náš všudypřítomný projekt vytvoření chatovací místnosti pomocí nRF24L01.
Programování nRF24L01 pro Arduino
Použití těchto modulů s Arduinem bylo velmi snadné díky snadno dostupné knihovně vytvořené maniacbugem na GitHubu. Kliknutím na odkaz stáhnete knihovnu jako složku ZIP a přidáte ji do svého Arduino IDE pomocí možnosti Skica -> Zahrnout knihovnu -> Přidat knihovnu.ZIP . Po přidání knihovny můžeme začít programovat pro projekt. Musíme napsat dva programy, jeden je pro stranu vysílače a druhý pro stranu přijímače. Jak jsem však řekl dříve, každý modul může fungovat jako vysílač i přijímač. Oba programy jsou uvedeny na konci této stránky, v kódu vysílače bude komentář přijímače a v programu přijímače komentář kódu. Můžete jej použít, pokud zkoušíte projekt, ve kterém musí modul fungovat jako oba. Fungování programu je vysvětleno níže.
Stejně jako všechny programy začneme zahrnutím hlavičkových souborů. Protože nRF používá protokol SPI, zahrnuli jsme záhlaví SPI a také knihovnu, kterou jsme právě stáhli. Knihovna serv se používá k ovládání servomotoru.
#zahrnout
Další řádek je důležitý řádek, kde knihovně dáváme pokyny o pinech CE a CS. V našem schématu zapojení jsme připojili CE na pin 7 a CS na pin 8, takže jsme nastavili linku jako
RF24 myRadio (7, 8);
Všechny proměnné spojené s knihovnou RF by měly být deklarovány jako složená struktura proměnných. V tomto programu se proměnná msg používá k odesílání a přijímání dat z RF modulu.
strukturovaný balíček { int msg; }; typedef struct balíček Balíček; Údaje o balíčku;
Každý RF modul má jedinečnou adresu, pomocí které může odesílat data do příslušného zařízení. Protože zde máme pouze jeden pár, nastavili jsme adresu na nulu ve vysílači i přijímači, ale pokud máte více modulů, můžete nastavit ID na libovolný jedinečný šestimístný řetězec.
adresy bajtů = {"0"};
Dále uvnitř funkce nastavení prázdnoty inicializujeme RF modul a nastavíme se na práci s pásmem 115, které je bez šumu, a také nastavíme, aby modul pracoval v režimu minimální spotřeby energie s minimální rychlostí 250 kb / s.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 pásem nad WIFI signály myRadio.setPALevel (RF24_PA_MIN); // MIN nízká spotřeba energie myRadio.setDataRate (RF24_250KBPS); // Minimální rychlost myservo.attach (6); Serial.print ("Nastavení inicializováno"); zpoždění (500); }
funkce void WriteData () zapíše data, která jí byla předána. Jak již bylo řečeno, nRF má 6 různých kanálů, do kterých můžeme číst nebo zapisovat data, zde jsme jako adresu pro zápis dat použili 0xF0F0F0F066. Na straně přijímače musíme použít stejnou adresu ve funkci ReadData () pro příjem zapsaných dat.
void WriteData () { myRadio.stopListening (); // Zastavení příjmu a zahájení přenosu myRadio.openWritingPipe (0xF0F0F0F066); // Odešle data na tuto 40bitovou adresu myRadio.write (& data, sizeof (data)); zpoždění (300); }
void WriteData () funkce načte data a vloží je do proměnné. Opět ze 6 různých kanálů, pomocí kterých zde můžeme číst nebo zapisovat data, jsme jako adresu pro čtení dat použili 0xF0F0F0F0AA. To znamená, že vysílač druhého modulu něco napsal na tuto adresu, a proto to čteme ze stejné adresy.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Který kanál ke čtení, 40 bitů Adresa myRadio.startListening (); // Přestaňte vysílat a spusťte Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Kromě těchto řádků se ostatní řádky v programu používají pro čtení POT a jeho převod na 0 až 180 pomocí mapové funkce a odeslání do modulu přijímače, kde odpovídajícím způsobem ovládáme servo. Nevysvětlil jsem jim řádek po řádku, protože jsme se to již naučili v našem tutoriálu Servo Interfacing.
Ovládání servomotoru pomocí nRF24L01 bezdrátově
Jakmile jste připraveni na program, nahrajte kód vysílače a přijímače (uvedený níže) na příslušné desky Arduino a zapněte je pomocí USB portu. Můžete také spustit sériový monitor obou desek a zkontrolovat, jaká hodnota se přenáší a co se přijímá. Pokud vše funguje podle očekávání, když otočíte knoflíkem POT na straně vysílače, mělo by se odpovídajícím způsobem otočit také servo na druhé straně.
Kompletní fungování projektu ukazuje video níže. Je zcela normální, že tyto moduly nebudou fungovat na první pokus. Pokud jste narazili na jakýkoli problém, zkontrolujte znovu kód a zapojení a zkuste výše uvedené pokyny pro řešení problémů. Pokud nic nefunguje, pošlete svůj problém na fóra nebo do sekce komentářů a pokusím se je vyřešit.