Gecombineerde 2,4 GHz zender/ontvanger type nRF24L01

Boven de nRF24L01
Onder de YL105 adapter
Ik gebruik in de tekst het woord "zender" in plaats van "gecombineerde zender/ontvanger" of "transceiver".
De bekendste 2,4 GHz zender voor de Arduino is de nRF24L01. Deze gebruikt (ongeveer) dezelfde frequentie als Bluetooth. De nRF24L01 modules kunnen direct gebruikt worden terwijl bij Bluetooth modules eerst van alles moet worden ingesteld. Inmiddels zijn de nRF24L01 zenders zo goedkoop dat ze goed als vervanging kunnen dienen voor de 433 MHz zenders en ontvangers die ik op een andere pagina heb beschreven. In vergelijking met de 433 MHz zenders zijn de 2,4 GHz zenders wel iets lastiger te programmeren en aan te sluiten - juist vanwege hun vele mogelijkheden. Er een wel een goede software bibliotheek voor beschikbaar.
Je kunt de 2,4 GHz zenders een adres meegeven, zodat je gemakkelijk kunt bepalen welke Arduino een bepaald bericht mag lezen. Ook is er de mogelijkheid interrupts te gebruiken, zodat een programma allerlei taken kan uitvoeren tijdens het luisteren of er een bericht komt. Veel van deze mogelijkheden heeft Bluetooth ook, en daarnaast kun je met Bluetooth een veilige verbinding opzetten (veilig in de zin dat een bericht moeilijk te onderscheppen of te verstoren is). De nRF24L01 en Bluetooth zenders zijn zo verschillend dat ze niet samen kunnen werken. Ook is de software die je in de Arduino nodig hebt totaal anders. Een voordeel van Bluetooth is dat je hiermee met allerlei andere apparaten zoals een PC of smartphone kunt communiceren en dat kan met de nRF24L01 niet. Maar voor communicaties tussen Arduino's onderling is de nRF24L01 handiger in gebruik.Voor een uitgebreide beschrijving van Bluetooth zie deze aparte pagina.
Ik kan nog niet alle mogelijkheden van de nRF24L01 beschrijven, maar ik maak toch vast een begin. Later zal ik meer testprogramma's toevoegen met andere mogelijkheden. Het is erg belangrijk dat je alles goed aansluit en geen programmeerfout maakt, anders werkt de verbinding niet en krijg je geen foutmelding. Maar als het eenmaal werkt dan werkt het ook bijzonder goed.

Aansluiten van de module

De module heeft een SPI interface, daardoor ben je niet geheel vrij in de keuze van de pinnen van je Arduino. De module heeft hiervoor twee rijen van 4 pinnen en is daardoor NIET te gebruiken op een breadboard. Je zult dat met losse kabeltjes moeten doen. De voedingsspanning is 3,3 volt en dat mag beslist niet veel meer zijn. Bij alle pinnen, behalve de voedingspin kun je wel gewoon 5 Volt gebruiken. Er staan geen labels bij de pinnen, dus moet je goed opletten dat je ze goed aansluit. Er is geen lampje waaraan je kunt zien dat hij aan is. Veel mensen sluiten de module aan op een adapter (zie het plaatje). Dat heeft als voordeel dat je 5 volt kunt gebruiken, dat er wel labels bij de pinnen staan en dat er een power lampje is. Helaas is de layout van deze adapters ook niet geschikt voor breadboards. Als je handig bent kun je zelf een adapter maken die wel op een breadboard past (zie foto). Als je de zender gebruikt zonder zo'n adapter houdt er dan rekening mee dat de 3,3 volt uitgang van de Arduinio niet al te veel vermogen kan leveren. Je moet de zenders dan dicht bij elkaar zetten en de lage energiestand gebruiken. Er zijn ook uitvoeringen van de nRF24L01 met een externe antenne. Als je grote afstanden wil overbruggen dan kan dat een optie zijn, maar bij afstanden tot enkele meters voldoet de geïntegreerde antenne prima. Hieronder zie je de pin layout van de module.

Arduino Uno, Arduino nano en meeste andere: SCL gaat naar pin 13, MISO naar 12 en MOSI naar 11
Arduino Mega: SCL gaat naar pin 52, MISO naar 50 en MOSI naar 51
Voor CSN en CE kun je willekeurige pinnen gebruiken; je geeft in je sketch op welke pinnen je gebruikt. IRQ hoef je niet aan te sluiten.

Zender en ontvangers

Als eerste testprogramma laat ik zien hoe de ene Arduino fungeert als zender en de ander als ontvanger. Je kunt hiermee de modules testen door twee Arduino's te gebruiken en zender/ontvanger om te keren. Met hetzelfde testprogramma kun je ook meerdere Arduino's tegelijk laten ontvangen. Je kunt dan bijvoorbeeld nagaan dat de Arduino's allemaal hetzelfde adres moeten gebruiken.
De antenne ontvangt het signaal van de zender die een verdieping hoger staat.
Ik heb dit getest met vier Arduino's, waarbij een willekeurige Arduino zender was en alle andere ontvangers. Hierbij heb ik aansluitingen met en zonder adapter door elkaar heen gebruikt. Ik heb een van de Arduino's op een powerbank aangesloten. Deze werkt inmiddels al enkele uren probleemloos. Bij uit- en uitzetten komen de verbindingen weer vanzelf tot stand. Ik heb eveneens modules getest met een externe antenne. Deze hebben - ook bij laag vermogen - een behoorlijk groter bereik (zie de foto hiernaast).
De zender stuurt een 'a' of 'u' op en zodra de ontvanger een 'a' ontvangt zet hij een led aan en als hij iets anders ontvangt zet hij de led uit. Omdat pin 13 in gebruik is heb ik de led op pin 2 aangesloten. Alles werkt probleemloos tot een afstand van een paar meter. Een groter bereik is mogelijk door de regel die het lage vermogen instelt weg te halen, maar dat heb ik nog niet getest. Je moet in dat geval de zenders wel op enige afstand van elkaar zetten om interferentie te voorkomen.
Als je via de Seriële monitor wilt testen wat de Arduino ontvangen heeft, open de Arduino IDE dan twee keer. In dit geval heb ik de sketch zo gemaakt dat dat niet nodig is en kun je de Arduino's na ook elkaar programmeren. Als alles goed werkt dan zie je bij de zender een led langzaam knipperen en bij alle andere Arduino's eveneens. Er is vrijwel geen vertraging, dus is het moeilijk om te zien wie zender of ontvanger is. Als de zender uitzet dan zie je dat uiteraard direct!

  Klik hier om de sketches te zien!
Deze sketches zijn zo eenvoudig mogelijk gehouden. Je kunt echter zo ongeveer alles van deze module instellen. De standaardwaarden zijn meestal goed genoeg voor gewoon gebruik. Het vermogen kun je bij een eerste test het best op minimaal (RFA_PA_MIN) instellen omdat niet elke Arduino veel vermogen kan leveren op zijn 3,3 volt uitgang.

Communicatie naar twee kanten

Nog doen

Pratende robots

Nog doen