- Conèixer el mòdul RF nRF24L01
- Interfície de nRF24L01 amb Arduino
- Cara del receptor: connexions del mòdul Arduino Uno nRF24L01
- Costat del transmissor: connexions del mòdul Arduino Nano nRF24L01
- Treballar amb el mòdul de transceptor sense fils nRF24L01 +
- Programació nRF24L01 per Arduino
- Control del servomotor mitjançant nRF24L01 sense fils
Tot i que la Internet de les coses (IoT), la indústria 4.0, la comunicació de màquina a màquina, etc., són cada vegada més populars, la necessitat de la comunicació sense fils ha esdevingut obligatòria, ja que hi ha més màquines / dispositius per parlar entre ells al núvol. Els dissenyadors utilitzen molts sistemes de comunicació sense fils com Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF etc., i la selecció del suport depèn del tipus d’aplicació en què s’utilitzi.
Entre tots, un mitjà sense fils popular per a la comunicació de xarxa local és el nRF24L01. Aquests mòduls funcionen a 2,4 GHz (banda ISM) amb una velocitat de transmissió de 250 Kbps a 2 Mbps, que és legal a molts països i es pot utilitzar en aplicacions industrials i mèdiques. També s’afirma que amb antenes adequades aquests mòduls poden transmetre i rebre fins a una distància de 100 metres entre ells. Interessant oi !!? Per tant, en aquest tutorial aprendrem més sobre aquests mòduls nRF24l01 i com s’interfata amb una plataforma de microcontroladors com Arduino. També compartirem algunes solucions per als problemes més freqüents mentre s’utilitza aquest mòdul.
Conèixer el mòdul RF nRF24L01
Els mòduls nRF24L01 són mòduls transceptors, és a dir, cada mòdul pot enviar i rebre dades, però, ja que són semidúplex, poden enviar o rebre dades alhora. El mòdul disposa del IC nRF24L01 genèric de semiconductors nòrdics que s’encarrega de la transmissió i recepció de dades. El CI es comunica mitjançant el protocol SPI i, per tant, es pot connectar fàcilment amb qualsevol microcontrolador. Es fa molt més fàcil amb Arduino, ja que les biblioteques estan fàcilment disponibles. A continuació es mostren els pinouts d’un mòdul nRF24L01 estàndard

El mòdul té una tensió de funcionament d’ 1,9 V a 3,6 V (normalment 3,3 V) i consumeix molt menys corrent de només 12 mA durant el funcionament normal, cosa que fa que la bateria sigui eficient i, per tant, pot funcionar fins i tot amb cel·les de monedes. Tot i que el voltatge de funcionament és de 3,3 V, la majoria dels pins són tolerants a 5 V i, per tant, es poden connectar directament amb microcontroladors de 5 V com Arduino. Un altre avantatge d'utilitzar aquests mòduls és que cada mòdul té 6 canonades. És a dir, cada mòdul es pot comunicar amb altres 6 mòduls per transmetre o rebre dades. Això fa que el mòdul sigui adequat per a la creació de xarxes estrella o malla en aplicacions IoT. També tenen un ampli rang d’adreces de 125 identificadors únics, de manera que en una àrea tancada podem utilitzar 125 d’aquests mòduls sense interferir els uns amb els altres.
Interfície de nRF24L01 amb Arduino
En aquest tutorial aprendrem com interaccionar el nRF24L01 amb Arduino controlant el servomotor connectat amb un Arduino variant el potenciòmetre de l’altre Arduino. Per simplificar, hem utilitzat un mòdul nRF24L01 com a transmissor i l’altre receptor, però es pot programar cada mòdul per enviar i rebre dades individualment.
A continuació es mostra el diagrama de circuits per connectar el mòdul nRF24L01 amb Arduino. Per a la varietat, he utilitzat UNO per al costat del receptor i Nano per al costat del transmissor. Però la lògica de connexió continua sent la mateixa per a altres plaques Arduino, com ara mini, mega.
Cara del receptor: connexions del mòdul Arduino Uno nRF24L01


Com s'ha dit anteriorment, el nRF24L01 es comunica amb l'ajut del protocol SPI. A Arduino Nano i UNO els pins 11, 12 i 13 s’utilitzen per a la comunicació SPI. Per tant, connectem els pins MOSI, MISO i SCK de nRF als pins 11, 12 i 13 respectivament. Els pins CE i CS es poden configurar per l'usuari, he utilitzat els pins 7 i 8 aquí, però podeu utilitzar qualsevol pin modificant el programa. El mòdul nRF funciona amb el pin de 3,3 V a Arduino, que en la majoria dels casos funcionarà. Si no, es pot provar una font d'alimentació independent. A part de la interfície del nRF, també he connectat un servomotor al pin 7 i l'he alimentat a través del pin de 5V a Arduino. De la mateixa manera, el circuit transmissor es mostra a continuació.
Costat del transmissor: connexions del mòdul Arduino Nano nRF24L01


Les connexions del transmissor també són les mateixes, a més he utilitzat un potenciòmetre connectat a través del pin de terra de 5V i Arduino. La tensió analògica de sortida que oscil·larà entre 0-5V està connectada al pin A7 del Nano. Les dues plaques s’alimenten a través del port USB.
Treballar amb el mòdul de transceptor sense fils nRF24L01 +
Tanmateix, per tal de fer que el nostre nRF24L01 funcioni lliure de sorolls, potser voldríem tenir en compte les coses següents. He estat treballant en aquest nRF24L01 + durant molt de temps i he après els següents punts que us poden ajudar a colpejar-vos a una paret. Podeu provar-los quan els mòduls no funcionaven de la manera normal.
1. La majoria dels mòduls nRF24L01 + del mercat són falsos. Els més econòmics que podem trobar a Ebay i Amazon són els pitjors (No us preocupeu, amb pocs ajustaments els podem fer funcionar)
2. El principal problema és la font d'alimentació, no el vostre codi. La majoria dels codis en línia funcionaran correctament, jo mateix tinc un codi de treball que he provat personalment. Feu-me saber si els necessiteu.
3. Presteu atenció perquè els mòduls impresos com a NRF24L01 + són en realitat Si24Ri (Sí, un producte xinès).
4. El clon i els mòduls falsos consumiran més energia, de manera que no desenvolupeu el vostre circuit d’alimentació basat en el full de dades nRF24L01 +, perquè Si24Ri tindrà un consum de corrent elevat d’uns 250 mA.
5. Compte amb les ondulacions de tensió i les sobretensions de corrent, aquests mòduls són molt sensibles i poden cremar-se fàcilment. (;-(fregit 2 mòduls fins ara)
6. Afegir un parell de condensadors (10uF i 0.1uF) a través de Vcc i Gnd del mòdul ajuda a fer que el vostre subministrament sigui pur i això funciona per a la majoria dels mòduls.
Tot i això, si teniu problemes per informar a la secció de comentaris o per llegir-ho, o feu les vostres preguntes al nostre fòrum.
Consulteu també el nostre projecte previ sobre la creació d’una sala de xat mitjançant nRF24L01.
Programació nRF24L01 per Arduino
Ha estat molt fàcil utilitzar aquests mòduls amb Arduino, a causa de la biblioteca fàcilment disponible creada per maniacbug a GitHub. Feu clic a l'enllaç per descarregar la biblioteca com a carpeta ZIP i afegir-la al vostre IDE Arduino mitjançant l'opció Sketch -> Include Library -> Add.ZIP library option. Després d'afegir la biblioteca, podem començar a programar per al projecte. Hem d’escriure dos programes, un per al costat del transmissor i l’altre per al costat del receptor. No obstant això, com he dit anteriorment, cada mòdul pot funcionar tant com a transmissor com a receptor. Tots dos programes es donen al final d'aquesta pàgina, al codi del transmissor es comentarà l'opció del receptor i al programa del receptor es comentarà el codi del transmissor. Podeu utilitzar-lo si esteu provant un projecte en què el mòdul ha de funcionar com a tots dos. A continuació s’explica el funcionament del programa.
Com tots els programes, comencem incloent els fitxers de capçalera. Com que el nRF utilitza el protocol SPI, hem inclòs la capçalera SPI i també la biblioteca que acabem de descarregar. La servoteca s'utilitza per controlar el servomotor.
#incloure
La següent línia és la línia important on informem a la biblioteca sobre els pins CE i CS. Al nostre diagrama de circuits hem connectat CE al pin 7 i CS al pin 8, de manera que establim la línia com
RF24 myRadio (7, 8);
Totes les variables associades a la biblioteca de RF s'han de declarar com a estructura de variables composta. En aquest programa, la variable msg s’utilitza per enviar i rebre dades del mòdul RF.
paquet struct { int msg; }; paquet typedef struct Paquet; Dades del paquet;
Cada mòdul RF té una adreça única mitjançant la qual pot enviar dades al dispositiu respectiu. Com que només tenim un parell aquí, establim l'adreça a zero tant en el transmissor com en el receptor, però si teniu diversos mòduls, podeu configurar l'identificador a qualsevol cadena única de 6 dígits.
adreces de bytes = {"0"};
A continuació, dins de la funció de configuració del buit , inicialitzem el mòdul RF i configurem el funcionament amb una banda de 115 que no conté sorolls i també configurem el mòdul perquè funcioni en mode de consum d’energia mínima amb una velocitat mínima de 250 Kbps.
configuració nul·la () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 bandes per sobre dels senyals WIFI myRadio.setPALevel (RF24_PA_MIN); // MIN potència ràbia baixa myRadio.setDataRate (RF24_250KBPS); // Velocitat mínima myservo.attach (6); Serial.print ("Configuració inicialitzada"); retard (500); }
La funció void WriteData () escriu les dades que se li passen. Com ja es va dir anteriorment, el nRF té 6 canonades diferents a les quals podem llegir o escriure dades, aquí hem utilitzat 0xF0F0F0F066 com a adreça per escriure dades. Al costat del receptor, hem d’utilitzar la mateixa adreça a la funció ReadData () per rebre les dades que s’han escrit.
void WriteData () { myRadio.stopListening (); // Deixa de rebre i comença a transmetre myRadio.openWritingPipe (0xF0F0F0F066); // Envia dades sobre aquesta adreça de 40 bits myRadio.write (& data, sizeof (data)); retard (300); }
La funció void WriteData () llegeix les dades i les posa en una variable. De nou, de 6 canonades diferents amb les quals podem llegir o escriure dades aquí, hem utilitzat 0xF0F0F0F0AA com a adreça per llegir les dades. Això significa que el transmissor de l'altre mòdul ha escrit alguna cosa en aquesta adreça i, per tant, ho estem llegint des de la mateixa.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Quina canalització de lectura, 40 bits Adreça myRadio.startListening (); // Atureu la transmissió i comenceu a tornar a visualitzar si (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
A part d'aquestes línies, les altres línies del programa s'utilitzen per llegir el POT i convertir-lo a 0 a 180 mitjançant la funció de mapa i enviar-lo al mòdul Receptor on controlem el servo en conseqüència. No els he explicat línia per línia, ja que ja ho hem après al nostre tutorial de Servo Interfacing.
Control del servomotor mitjançant nRF24L01 sense fils

Quan estigueu llest amb el programa, pengeu el codi del transmissor i del receptor (que es mostra a continuació) a les respectives plaques Arduino i enceneu-les amb el port USB. També podeu iniciar el monitor sèrie de les dues plaques per comprovar quin valor es transmet i què es rep. Si tot funciona com s’esperava quan gireu el comandament POT al costat del transmissor, el servo de l’altre costat també hauria de girar en conseqüència.
El funcionament complet del projecte es mostra al vídeo següent. És bastant normal que aquests mòduls no funcionin al primer intent. Si heu tingut algun problema, torneu a comprovar el codi i el cablejat i proveu les pautes de resolució de problemes anteriors. Si res no funciona, publiqueu el vostre problema als fòrums o a la secció de comentaris i intentaré resoldre'ls.
