- Zapoznanie się z modułem RF nRF24L01
- Połączenie nRF24L01 z Arduino
- Odbiornik: podłączenia modułu Arduino Uno nRF24L01
- Strona nadajnika: Połączenia modułu Arduino Nano nRF24L01
- Współpraca z bezprzewodowym modułem nadawczo-odbiorczym nRF24L01 +
- Programowanie nRF24L01 dla Arduino
- Sterowanie serwomotorem za pomocą bezprzewodowego nRF24L01
Podczas gdy Internet rzeczy (IoT), Przemysł 4.0, komunikacja maszyna-maszyna itp. Stają się coraz bardziej popularne, potrzeba komunikacji bezprzewodowej stała się powszechna, a więcej maszyn / urządzeń komunikuje się ze sobą w chmurze. Projektanci używają wielu systemów komunikacji bezprzewodowej, takich jak Bluetooth Low Energy (BLE 4.0), Zigbee, moduły Wi-Fi ESP43, moduły RF 433MHz, Lora, nRF itp., A wybór medium zależy od rodzaju aplikacji, w której jest używany.
Jednym z popularnych bezprzewodowych nośników komunikacji w sieci lokalnej jest nRF24L01. Moduły te działają w paśmie 2,4 GHz (ISM) z szybkością transmisji od 250 Kb / s do 2 Mb / s, co jest legalne w wielu krajach i może być używane w zastosowaniach przemysłowych i medycznych. Twierdzi się również, że przy odpowiednich antenach moduły te mogą nadawać i odbierać na odległość do 100 metrów między nimi. Ciekawe, prawda !!? W tym samouczku dowiemy się więcej o tych modułach nRF24l01 i jak połączyć je z platformą mikrokontrolera, taką jak Arduino. Podamy także kilka rozwiązań typowych problemów podczas korzystania z tego modułu.
Zapoznanie się z modułem RF nRF24L01
Te moduły nRF24L01 są transceiver moduły, co oznacza zarówno Każdy moduł może wysyłać i odbierać dane, ale ponieważ są one half-duplex mogą też wysyłać i odbierać dane w czasie. Moduł posiada generyczny układ scalony nRF24L01 z nordyckich półprzewodników, który odpowiada za transmisję i odbiór danych. Układ scalony komunikuje się za pomocą protokołu SPI, dzięki czemu można go łatwo połączyć z dowolnym mikrokontrolerem. Z Arduino jest to o wiele łatwiejsze, ponieważ biblioteki są łatwo dostępne. W pinoutem standardowego modułu nRF24L01 przedstawiono poniżej
Moduł ma napięcie robocze od 1,9 V do 3,6 V (typowo 3,3 V) i pobiera bardzo mniej prądu, tylko 12 mA podczas normalnej pracy, dzięki czemu jest wydajny z baterii, a tym samym może pracować nawet na ogniwach pastylkowych. Mimo że napięcie robocze wynosi 3,3 V, większość pinów ma tolerancję 5 V i dlatego można je bezpośrednio łączyć z mikrokontrolerami 5 V, takimi jak Arduino. Kolejną zaletą korzystania z tych modułów jest to, że każdy moduł ma 6 rurociągów. Oznacza to, że każdy moduł może komunikować się z 6 innymi modułami w celu przesyłania lub odbierania danych. Dzięki temu moduł nadaje się do tworzenia sieci typu gwiazda lub mesh w aplikacjach IoT. Mają też szeroki zakres adresów 125 unikalnych identyfikatorów, stąd w zamkniętym obszarze możemy używać 125 takich modułów bez ingerencji w siebie.
Połączenie nRF24L01 z Arduino
W tym samouczku dowiemy się, jak połączyć nRF24L01 z Arduino, sterując serwomotorem połączonym z jednym Arduino, zmieniając potencjometr w drugim Arduino. Dla uproszczenia użyliśmy jednego modułu nRF24L01 jako nadajnika, a drugiego jako odbiornika, ale każdy moduł można zaprogramować tak, aby wysyłał i odbierał dane indywidualnie.
Schemat połączeń modułu nRF24L01 z Arduino pokazano poniżej. Dla odmiany użyłem UNO po stronie odbiornika i Nano po stronie nadajnika. Ale logika połączenia pozostaje taka sama dla innych płyt Arduino, takich jak mini, mega.
Odbiornik: podłączenia modułu Arduino Uno nRF24L01
Jak wspomniano wcześniej, nRF24L01 komunikuje się za pomocą protokołu SPI. W Arduino Nano i UNO piny 11, 12 i 13 służą do komunikacji SPI. Stąd podłączamy piny MOSI, MISO i SCK z nRF do pinów odpowiednio 11, 12 i 13. Piny CE i CS są konfigurowalne przez użytkownika, użyłem tutaj pinów 7 i 8, ale możesz użyć dowolnego pinu, zmieniając program. Moduł nRF zasilany jest z pinu 3,3V na Arduino, który w większości przypadków będzie działał. Jeśli nie, można spróbować osobnego zasilacza. Oprócz interfejsu nRF podłączyłem również serwomotor do pinu 7 i zasiliłem go przez pin 5V na Arduino. Podobnie obwód nadajnika pokazano poniżej.
Strona nadajnika: Połączenia modułu Arduino Nano nRF24L01
Podłączenia do nadajnika też są takie same, dodatkowo użyłem potencjometru wpiętego przez pin 5V ad Ground Arduino. Wyjściowe napięcie analogowe, które będzie się wahać od 0-5 V, jest podłączone do styku A7 Nano. Obie płyty są zasilane przez port USB.
Współpraca z bezprzewodowym modułem nadawczo-odbiorczym nRF24L01 +
Jednak aby nasz nRF24L01 działał bez zakłóceń, warto rozważyć następujące kwestie. Pracowałem nad tym nRF24L01 + przez długi czas i nauczyłem się następujących punktów, które mogą pomóc ci w uderzeniu w ścianę. Możesz to wypróbować, gdy moduły nie działały normalnie.
1. Większość modułów nRF24L01 + dostępnych na rynku to podróbki. Te tanie, które możemy znaleźć w serwisie eBay i Amazon, są najgorsze (nie martw się, dzięki kilku poprawkom możemy sprawić, że zadziałają)
2. Głównym problemem jest zasilanie, a nie kod. Większość kodów online będzie działać poprawnie, sam mam działający kod, który osobiście przetestowałem, daj mi znać, jeśli ich potrzebujesz.
3. Zwróć uwagę, ponieważ moduły wydrukowane jako NRF24L01 + to w rzeczywistości Si24Ri (tak, chiński produkt).
4. Klon i fałszywe moduły będą zużywać więcej energii, dlatego nie rozwijaj swojego obwodu zasilania w oparciu o arkusz danych nRF24L01 +, ponieważ Si24Ri będzie miał duży pobór prądu około 250mA.
5. Uważaj na tętnienia napięcia i skoki prądu, moduły te są bardzo czułe i mogą się łatwo spalić. (;-(do tej pory wysmażone 2 moduły)
6. Dodanie kilku kondensatorów (10 uF i 0,1 uF) między Vcc i Gnd modułu pomaga w utrzymaniu czystego zasilania i działa to w przypadku większości modułów.
Jeśli nadal masz problemy, zgłoś się do sekcji komentarzy lub przeczytaj to, lub zadaj pytania na naszym forum.
Sprawdź również nasz poprzedni projekt dotyczący tworzenia pokoju rozmów za pomocą nRF24L01.
Programowanie nRF24L01 dla Arduino
Korzystanie z tych modułów z Arduino było bardzo łatwe, ze względu na łatwo dostępną bibliotekę stworzoną przez maniacbug na GitHub. Kliknij link, aby pobrać bibliotekę jako folder ZIP i dodać ją do swojego Arduino IDE za pomocą opcji Szkic -> Dołącz bibliotekę -> Dodaj bibliotekę.ZIP . Po dodaniu biblioteki możemy przystąpić do programowania projektu. Musimy napisać dwa programy, jeden dla strony nadajnika, a drugi dla strony odbiornika. Jednak jak powiedziałem wcześniej, każdy moduł może pracować zarówno jako nadajnik, jak i odbiornik. Oba programy są podane na końcu tej strony, w kodzie nadajnika opcja odbiornika zostanie zakomentowana, aw programie odbiornika kod nadajnika zostanie zakomentowany. Możesz go użyć, jeśli próbujesz projektu, w którym moduł ma działać jako oba. Działanie programu wyjaśniono poniżej.
Podobnie jak w przypadku wszystkich programów zaczynamy od dołączenia plików nagłówkowych. Ponieważ nRF używa protokołu SPI, dołączyliśmy nagłówek SPI, a także bibliotekę, którą właśnie pobraliśmy. Biblioteka serwo służy do sterowania silnikiem serwo.
#zawierać
Następna linia to ważna linia, w której instruujemy bibliotekę o pinach CE i CS. Na naszym schemacie połączeń podłączyliśmy CE do pinu 7 i CS do pinu 8, więc ustawiamy linię jako
RF24 myRadio (7, 8);
Wszystkie zmienne powiązane z biblioteką RF powinny być zadeklarowane jako złożone struktury zmiennych. W programie tym zmienna msg służy do wysyłania i odbierania danych z modułu RF.
struct pakiet { int msg; }; typedef struct pakiet Package; Dane paczki;
Każdy moduł RF posiada unikalny adres, za pomocą którego może przesyłać dane do odpowiedniego urządzenia. Ponieważ mamy tutaj tylko jedną parę, ustawiliśmy adres na zero zarówno w nadajniku, jak i odbiorniku, ale jeśli masz wiele modułów, możesz ustawić identyfikator na dowolny unikalny 6-cyfrowy ciąg.
adresy bajtowe = {"0"};
Następny wewnątrz konfiguracji void funkcji możemy zainicjować moduł RF oraz zestaw do pracy z zespołem 115, który jest wolny od hałasu, a także ustawić moduł do pracy w trybie minimalnego poboru mocy z minimalną prędkością 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 pasm powyżej sygnałów WIFI myRadio.setPALevel (RF24_PA_MIN); // Minimalna moc niskiej mocy myRadio.setDataRate (RF24_250KBPS); // Minimalna prędkość myservo.attach (6); Serial.print („Zainicjowano konfigurację”); opóźnienie (500); }
Funkcja void WriteData () zapisuje przekazane do niej dane. Jak powiedziano wcześniej, nRF ma 6 różnych potoków, w których możemy odczytywać lub zapisywać dane, tutaj użyliśmy 0xF0F0F0F066 jako adresu do zapisu danych. Po stronie odbiorcy musimy użyć tego samego adresu w funkcji ReadData (), aby odebrać zapisane dane.
void WriteData () { myRadio.stopListening (); // Zatrzymaj odbieranie i rozpocznij transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Wysyła dane na ten 40-bitowy adres myRadio.write (& data, sizeof (data)); opóźnienie (300); }
Funkcja void WriteData () odczytuje dane i umieszcza je w zmiennej. Ponownie z 6 różnych potoków, za pomocą których możemy tutaj odczytywać lub zapisywać dane, użyliśmy 0xF0F0F0F0AA jako adresu do odczytu danych. Oznacza to, że nadajnik innego modułu zapisał coś na ten adres i dlatego czytamy to z tego samego.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Który potok odczytać, 40-bitowy Adres myRadio.startListening (); // Zatrzymaj transmisję i rozpocznij sprawdzanie if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Poza tymi liniami pozostałe linie programu służą do odczytu POT i konwersji go na 0 do 180 za pomocą funkcji mapowania i wysyłania do modułu Receiver, gdzie odpowiednio sterujemy serwomechanizmem. Nie wyjaśniłem ich wiersz po wierszu, ponieważ nauczyliśmy się tego już w naszym samouczku dotyczącym interfejsu serwomechanizmu.
Sterowanie serwomotorem za pomocą bezprzewodowego nRF24L01
Gdy będziesz gotowy z programem, załaduj kod nadajnika i odbiornika (podany poniżej) na odpowiednie płytki Arduino i zasil je za pomocą portu USB. Możesz również uruchomić szeregowy monitor obu kart, aby sprawdzić, jaka wartość jest przesyłana i co jest odbierane. Jeśli po przekręceniu pokrętła POT po stronie nadajnika wszystko działa zgodnie z oczekiwaniami, serwo po drugiej stronie również powinno się odpowiednio obrócić.
Pełne działanie projektu pokazano na poniższym filmie. To normalne, że te moduły nie działają przy pierwszej próbie. Jeśli napotkałeś jakiś problem, sprawdź ponownie kod i okablowanie i wypróbuj powyższe wskazówki dotyczące rozwiązywania problemów. Jeśli nic nie działa, napisz swój problem na forach lub w sekcji komentarzy, a ja postaram się je rozwiązać.