- Conociendo el módulo RF nRF24L01
- Interfaz nRF24L01 con Arduino
- Lado del receptor: Conexiones del módulo Arduino Uno nRF24L01
- Lado del transmisor: Conexiones del módulo Arduino Nano nRF24L01
- Trabajar con el módulo transceptor inalámbrico nRF24L01 +
- Programando nRF24L01 para Arduino
- Controlar el servomotor usando nRF24L01 de forma inalámbrica
Si bien el Internet de las cosas (IoT), la Industria 4.0, la comunicación de máquina a máquina, etc., se están volviendo cada vez más populares, la necesidad de comunicación inalámbrica se ha vuelto más importante, con más máquinas / dispositivos para hablar entre sí en la nube. Los diseñadores utilizan muchos sistemas de comunicación inalámbrica como Bluetooth Low Energy (BLE 4.0), Zigbee, módulos Wi-Fi ESP43, módulos RF de 433MHz, Lora, nRF, etc., y la selección del medio depende del tipo de aplicación en la que se esté utilizando.
Entre todos, un medio inalámbrico popular para la comunicación de red local es el nRF24L01. Estos módulos funcionan en 2,4 GHz (banda ISM) con una velocidad de transmisión de 250 Kbps a 2 Mbps, que es legal en muchos países y se puede utilizar en aplicaciones industriales y médicas. También se afirma que con las antenas adecuadas estos módulos pueden transmitir y recibir hasta una distancia de 100 metros entre ellos. Interesante, ¿verdad? Entonces, en este tutorial aprenderemos más sobre estos módulos nRF24l01 y cómo conectarlos con una plataforma de microcontroladores como Arduino. También compartiremos algunas soluciones para los problemas que se enfrentan comúnmente al usar este módulo.
Conociendo el módulo RF nRF24L01
Los módulos nRF24L01 son módulos transceptores, lo que significa que cada módulo puede enviar y recibir datos, pero como son semidúplex pueden enviar o recibir datos a la vez. El módulo tiene el IC genérico nRF24L01 de Nordic semiconductores que se encarga de la transmisión y recepción de datos. El IC se comunica mediante el protocolo SPI y, por tanto, se puede conectar fácilmente con cualquier microcontrolador. Se vuelve mucho más fácil con Arduino ya que las bibliotecas están disponibles. Los pines de un módulo nRF24L01 estándar se muestran a continuación
El módulo tiene un voltaje de operación de 1.9V a 3.6V (típicamente 3.3V) y consume muy menos corriente de solo 12mA durante el funcionamiento normal, lo que hace que la batería sea eficiente y, por lo tanto, incluso puede funcionar con pilas de botón. Aunque el voltaje de funcionamiento es de 3,3 V, la mayoría de los pines son tolerantes a 5 V y, por lo tanto, pueden conectarse directamente con microcontroladores de 5 V como Arduino. Otra ventaja de usar estos módulos es que cada módulo tiene 6 Pipelines. Es decir, cada módulo puede comunicarse con otros 6 módulos para transmitir o recibir datos. Esto hace que el módulo sea adecuado para crear redes en estrella o en malla en aplicaciones de IoT. También tienen un amplio rango de direcciones de 125 ID únicos, por lo que en un área cerrada podemos usar 125 de estos módulos sin interferir entre sí.
Interfaz nRF24L01 con Arduino
En este tutorial aprenderemos cómo interconectar el nRF24L01 con Arduino controlando el servomotor conectado con un Arduino variando el potenciómetro en el otro Arduino. En aras de la simplicidad, hemos utilizado un módulo nRF24L01 como transmisor y el otro como receptor, pero cada módulo se puede programar para enviar y recibir datos individualmente.
El diagrama de circuito para conectar el módulo nRF24L01 con Arduino se muestra a continuación. Para variar, he usado UNO para el lado del receptor y Nano para el lado del transmisor. Pero la lógica de conexión sigue siendo la misma para otras placas Arduino como mini, mega también.
Lado del receptor: Conexiones del módulo Arduino Uno nRF24L01
Como se dijo anteriormente, el nRF24L01 se comunica con la ayuda del protocolo SPI. En Arduino Nano y UNO, los pines 11, 12 y 13 se utilizan para la comunicación SPI. Por lo tanto, conectamos los pines MOSI, MISO y SCK de nRF a los pines 11, 12 y 13 respectivamente. Los pines CE y CS son configurables por el usuario, he usado los pines 7 y 8 aquí, pero puede usar cualquier pin modificando el programa. El módulo nRF es alimentado por el pin de 3.3V en Arduino, que en la mayoría de los casos funcionará. De lo contrario, se puede probar con una fuente de alimentación separada. Además de conectar el nRF, también conecté un servomotor al pin 7 y lo alimenté a través del pin 5V en Arduino. De manera similar, el circuito del transmisor se muestra a continuación.
Lado del transmisor: Conexiones del módulo Arduino Nano nRF24L01
Las conexiones para el transmisor también son las mismas, además, he usado un potenciómetro conectado a través del pin de tierra de 5V y de Arduino. El voltaje analógico de salida, que variará de 0-5 V, está conectado al pin A7 del Nano. Ambas placas se alimentan a través del puerto USB.
Trabajar con el módulo transceptor inalámbrico nRF24L01 +
Sin embargo, para que nuestro nRF24L01 funcione sin ruido, es posible que deseemos considerar las siguientes cosas. He estado trabajando en este nRF24L01 + durante mucho tiempo y aprendí los siguientes puntos que pueden ayudarlo a no ser golpeado contra una pared. Puede probarlos cuando los módulos no funcionen de la forma habitual.
1. La mayoría de los módulos nRF24L01 + del mercado son falsos. Los baratos que podemos encontrar en Ebay y Amazon son los peores (No te preocupes, con pocos retoques podemos hacerlos funcionar)
2. El principal problema es la fuente de alimentación, no su código. La mayoría de los códigos en línea funcionarán correctamente, yo mismo tengo un código de trabajo que probé personalmente, avíseme si los necesita.
3. Preste atención porque los módulos impresos como NRF24L01 + son en realidad Si24Ri (sí, un producto chino).
4. Los módulos clon y falsos consumirán más energía, por lo tanto, no desarrolle su circuito de energía basado en la hoja de datos nRF24L01 +, porque Si24Ri tendrá un alto consumo de corriente de aproximadamente 250 mA.
5. Tenga cuidado con las fluctuaciones de voltaje y las sobrecargas de corriente, estos módulos son muy sensibles y pueden quemarse fácilmente. (;-(frito 2 módulos hasta ahora)
6. Agregar un par de capacitores (10uF y 0.1uF) a través de Vcc y Gnd del módulo ayuda a que su suministro sea puro y esto funciona para la mayoría de los módulos.
Aún así, si tiene problemas, informe en la sección de comentarios o lea esto, o haga sus preguntas en nuestro foro.
Consulte también nuestro proyecto anterior sobre la creación de una sala de chat utilizando nRF24L01.
Programando nRF24L01 para Arduino
Ha sido muy fácil usar estos módulos con Arduino, debido a la biblioteca fácilmente disponible creada por maniacbug en GitHub. Haga clic en el enlace para descargar la biblioteca como carpeta ZIP y agréguela a su IDE de Arduino usando Sketch -> Incluir biblioteca -> Agregar biblioteca . Después de agregar la biblioteca, podemos comenzar a programar para el proyecto. Tenemos que escribir dos programas, uno para el lado del transmisor y el otro para el lado del receptor. Sin embargo, como dije anteriormente, cada módulo puede funcionar como transmisor y receptor. Ambos programas se dan al final de esta página., en el código del transmisor se comentará la opción del receptor y en el programa del receptor se comentará el código del transmisor. Puede usarlo si está probando un proyecto en el que el módulo tiene que funcionar como ambos. El funcionamiento del programa se explica a continuación.
Como todos los programas, comenzamos por incluir los archivos de encabezado. Dado que nRF usa el protocolo SPI, hemos incluido el encabezado SPI y también la biblioteca que acabamos de descargar. La biblioteca de servos se utiliza para controlar el servomotor.
#incluir
La siguiente línea es la línea importante donde instruimos a la biblioteca sobre los pines CE y CS. En nuestro diagrama de circuito, hemos conectado CE al pin 7 y CS al pin 8, por lo que configuramos la línea como
RF24 myRadio (7, 8);
Todas las variables asociadas con la biblioteca de RF deben declararse como una estructura de variable compuesta. En este programa, la variable msg se usa para enviar y recibir datos del módulo de RF.
estructura paquete { int msg; }; paquete estructura typedef Paquete; Datos del paquete;
Cada módulo de RF tiene una dirección única mediante la cual puede enviar datos al dispositivo respectivo. Dado que solo tenemos un par aquí, configuramos la dirección en cero tanto en el transmisor como en el receptor, pero si tiene varios módulos, puede configurar la ID en cualquier cadena única de 6 dígitos.
direcciones de bytes = {"0"};
A continuación, dentro de la función de configuración de vacío , inicializamos el módulo de RF y lo configuramos para que funcione con la banda 115 que está libre de ruido y también configuramos el módulo para que funcione en el modo de consumo de energía mínimo con una velocidad mínima de 250 Kbps.
configuración vacía () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 bandas por encima de las señales WIFI myRadio.setPALevel (RF24_PA_MIN); // MIN potencia baja rabia myRadio.setDataRate (RF24_250KBPS); // Velocidad mínima myservo.attach (6); Serial.print ("Configuración inicializada"); retraso (500); }
La función void WriteData () escribe los datos que se le pasan. Como se dijo anteriormente, el nRF tiene 6 conductos diferentes en los que podemos leer o escribir datos, aquí hemos usado 0xF0F0F0F066 como dirección para escribir datos. En el lado del receptor, tenemos que usar la misma dirección en la función ReadData () para recibir los datos que se escribieron.
void WriteData () { myRadio.stopListening (); // Deje de recibir y comience a transmitir myRadio.openWritingPipe (0xF0F0F0F066); // Envía datos en esta dirección de 40 bits myRadio.write (& data, sizeof (data)); retraso (300); }
La función void WriteData () lee los datos y los coloca en una variable. Nuevamente, de 6 conductos diferentes con los que podemos leer o escribir datos aquí, hemos usado 0xF0F0F0F0AA como dirección para leer datos. Esto significa que el transmisor del otro módulo ha escrito algo en esta dirección y, por lo tanto, lo estamos leyendo desde la misma.
vacío ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Qué canalización leer, 40 bits Dirección myRadio.startListening (); // Detener la transmisión y comenzar a Revelar if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Aparte de estas líneas, las otras líneas del programa se utilizan para leer el POT y convertirlo de 0 a 180 utilizando la función de mapa y enviarlo al módulo Receptor donde controlamos el servo en consecuencia. No los he explicado línea por línea ya que ya lo aprendimos en nuestro tutorial de Interfaz de Servo.
Controlar el servomotor usando nRF24L01 de forma inalámbrica
Una vez que esté listo con el programa, cargue el código del transmisor y receptor (que se muestra a continuación) en las respectivas placas Arduino y enciéndalos con el puerto USB. También puede iniciar el monitor serial de ambas placas para verificar qué valor se está transmitiendo y qué se está recibiendo. Si todo funciona como se esperaba cuando gira la perilla POT en el lado del transmisor, el servo del otro lado también debe girar en consecuencia.
El funcionamiento completo del proyecto se demuestra en el video a continuación. Es bastante normal que estos módulos no funcionen en el primer intento. Si ha tenido algún problema, verifique el código y el cableado nuevamente e intente las pautas de resolución de problemas dadas anteriormente. Si nada funciona, publique su problema en los foros o en la sección de comentarios e intentaré resolverlos.