{"id":2000,"date":"2020-07-29T17:46:38","date_gmt":"2020-07-29T17:46:38","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=2000"},"modified":"2022-01-07T00:39:32","modified_gmt":"2022-01-07T00:39:32","slug":"control-de-reles-por-enlace-de-24-ghz-modulos-nrf24l01-domotica-4","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/control-de-reles-por-enlace-de-24-ghz-modulos-nrf24l01-domotica-4\/","title":{"rendered":"Control de rel\u00e9s por enlace de 2,4 GHz \u2013 m\u00f3dulos NRF24L01 (Dom\u00f3tica 4)"},"content":{"rendered":"

La funci\u00f3n de este art\u00edculo es dar ejemplos de comunicaci\u00f3n inal\u00e1mbrica entre dos placas Arduino, utilizando el m\u00f3dulo transceptor basado en el chip NRF24L01<\/a><\/strong>.<\/p>\n

En la imagen se observa dos formatos de m\u00f3dulo transceptor<\/a><\/strong>, ambos con el chip NRF24L01<\/strong>. Este chip utiliza la banda de 2,4 GHz<\/strong> y puede operar con velocidades de transmisi\u00f3n de 250 kbps<\/strong> hasta 2 Mbps<\/strong>. Si se usa en espacios abiertos y, con menor velocidad de transmisi\u00f3n, su alcance puede llegar hasta los 100 metros. Para mayores distancias, hasta 1000 metros, existen m\u00f3dulos provistos con una antena externa en lugar de una antena trazada sobre la misma placa, como se observa en la imagen.<\/p>\n

Con este sistema enviaremos comandos de texto que controlen un m\u00f3dulo de rel\u00e9s para manejar artefactos de 220V CA en una instalaci\u00f3n de dom\u00f3tica. Para dom\u00f3tica es suficiente el alcance del m\u00f3dulo b\u00e1sico, pero se puede optar por la versi\u00f3n con antena incorporada, si es necesario.
\n
\"\"<\/a>
\nEn nuestro art\u00edculo
Arduino: Comunicaci\u00f3n inal\u00e1mbrica con NRF24L01<\/a><\/strong> est\u00e1n explicados y desarrollados en detalle varios usos del m\u00f3dulo NRF24L01<\/strong> con un Arduino. Si no est\u00e1 familiarizado con un m\u00f3dulo como este, o si desea profundizar m\u00e1s en sus caracter\u00edsticas y capacidades, recomendamos su lectura, aunque no es imprescindible para utilizar este dise\u00f1o.<\/p>\n

Para el control de las placas NRF24L01<\/strong> para enlace de RF<\/strong> se utiliza la biblioteca RF24<\/a><\/strong>, totalmente compatible con las placas Arduino. En la p\u00e1gina enlazada hay una explicaci\u00f3n en ingl\u00e9s de c\u00f3mo instalarla en su IDE de Arduino. Si no, puede leer las instrucciones a continuaci\u00f3n (si ya conoce el procedimiento, saltee esta explicaci\u00f3n):<\/p>\n

Como es una librer\u00eda obtenida del sitio GitHub<\/a>, que es un repositorio de c\u00f3digo para programadores, deberemos utilizar el m\u00e9todo de instalaci\u00f3n manual. Lo primero es descargar la librer\u00eda en formato ZIP<\/a> dentro de la carpeta que usted elija.<\/p>\n

Una vez descargada debemos a\u00f1adir la librer\u00eda mediante el men\u00fa desplegable Programa >> Incluir Librer\u00eda >> A\u00f1adir biblioteca .ZIP\u2026 Se abrir\u00e1 un panel para buscar el ZIP en su disco r\u00edgido.
\n
\"\"<\/a>
\nUna vez seleccionado el archivo \u00e9ste ser\u00e1 incluido. Cerramos el IDE de Arduino y cuando volvamos a abrirlo la librer\u00eda ya estar\u00e1 disponible.<\/h3>\n

Circuito b\u00e1sico para el sistema<\/strong><\/p>\n

La biblioteca RF24<\/strong> utiliza los pines est\u00e1ndar del hardware SPI<\/a><\/strong> (MISO<\/strong>, MOSI<\/strong>, SCK<\/strong>) que son, respectivamente, los pines digitales 12<\/strong>, 11<\/strong> y 13<\/strong> en la placa Arduino UNO. Tambi\u00e9n se necesitan dos pines adicionales para controlar las funciones de selecci\u00f3n del chip (CS)<\/strong> y habilitaci\u00f3n del chip (CE<\/strong>).<\/p>\n

Estos dos \u00faltimos pines pueden ser elegidos y designados por el usuario utilizando la funci\u00f3n radio(ce_pin, cs_pin)<\/strong> de la biblioteca RF24<\/strong>; y se puede usar cualquier pin digital disponible.<\/p>\n

El diagrama de conexiones de los m\u00f3dulos \u2014que mostramos a continuaci\u00f3n\u2014 es id\u00e9ntico para las placas Arduino de ambos lados, transmisor y receptor. Observe con atenci\u00f3n que la entrada VCC<\/strong> del m\u00f3dulo transceptor est\u00e1 conectada a la salida 3,3V<\/strong> del Arduino. No se equivoque con la alimentaci\u00f3n poni\u00e9ndola a 5V<\/strong>, porque el m\u00f3dulo resultar\u00eda da\u00f1ado.
\n
\"\"<\/a>
\nA continuaci\u00f3n, le agregaremos a uno de los dos Arduino, que funcionar\u00e1 de receptor<\/strong>, un m\u00f3dulo de rel\u00e9s como los que hemos descrito y explicado en detalle en el art\u00edculo M\u00f3dulos de rel\u00e9 y Arduino: Dom\u00f3tica (1)<\/strong>. Recomendamos leerlo.<\/p>\n

Sistema 1: Control utilizando el teclado de la computadora a trav\u00e9s de Monitor Serie<\/strong><\/p>\n

La placa Arduino utilizada como transmisor estar\u00e1 conectada al puerto USB<\/strong> de la PC, o laptop, que utilizamos para programarlo y luego para enviar los comandos. El puerto USB<\/strong> alimentar\u00e1 la placa y el m\u00f3dulo transmisor.<\/p>\n

El Arduino receptor puede estar conectado a cualquiera de los modos de alimentaci\u00f3n adecuados: un cable USB<\/strong> conectado a un cargador est\u00e1ndar de 5V<\/strong>, o a un Power Bank para celular; una bater\u00eda de 9V o una fuente regulada de 9V CC<\/strong> conectada al jack de entrada de alimentaci\u00f3n de la placa Arduino o a su pin Vin<\/strong>.<\/p>\n

El circuito del receptor se cablear\u00e1 de la siguiente manera a los m\u00f3dulos de rel\u00e9:<\/p>\n

Nota: en este circuito se alimentan los led emisores de los optoacoples desde la misma fuente de los rel\u00e9s. Para separar totalmente los circuitos, quitar el jumper entre VCC y JD-VCC y alimentar VCC desde los 5V de la placa Arduino.<\/strong><\/p>\n

Circuito del Sistema 1, con m\u00f3dulo de 2 rel\u00e9s<\/strong>
\n
\"\"<\/a>
\nCriterio de control:<\/strong><\/p>\n

La lista de comandos es como sigue<\/p>\n

a<\/strong> \u2013 Activa el rel\u00e9 1 \/ a<\/strong> apaga el rel\u00e9 1 al pulsar de nuevo
\nb<\/strong> \u2013 Activa el rel\u00e9 2 \/ b<\/strong> apaga el rel\u00e9 2 al pulsar de nuevo<\/p>\n

Programa del transmisor<\/strong><\/p>\n

#include <SPI.h>\r\n#include <RF24.h>\r\nRF24 radio(7,8); \/\/ CE, CSN\r\nconst byte identificacion[6] = \"00001\"; \/\/ cualquier juego de 5 letras y numeros\r\n\r\nvoid setup() {\r\n  Serial.begin(9600); \/\/ Inicia comunicacion hacia el Monitor Serie\r\n  radio.begin();\r\n  radio.openWritingPipe(identificacion);\r\n  radio.setPALevel(RF24_PA_MIN);\r\n \/\/ Opciones RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX\r\n \/\/ MIN = -18dBm, LOW = -12dBm, HIGH = -6dBm, MAX = 0dBm\r\n  radio.stopListening();\r\n}\r\n\r\nvoid loop() {\r\n  char caracter; \r\n  if (Serial.available() > 0) {\r\n    caracter = Serial.read();\r\n    if (sizeof(caracter) == 1) { \r\n        radio.write(&caracter, 1);\r\n    }\r\n  }\r\n}\r\n<\/pre>\n

Programa del receptor:<\/strong><\/p>\n

#include <SPI.h>\r\n#include <RF24.h>\r\n#define encender LOW \/\/ definicion de valores para accionar reles\r\n#define apagar HIGH\r\nint rele1 = 2; \/\/ definicion de nombres de salidas\r\nint rele2 = 3;\r\n\r\nRF24 radio(7,8); \/\/ CE, CSN\r\nconst byte identificacion[6] = \"00001\"; \/\/ cualquier juego de 5 letras y numeros\r\n\r\nvoid setup() {\r\n  pinMode(rele1,OUTPUT); \r\n  digitalWrite(rele1,apagar); \/\/ Rele 1\r\n  pinMode(rele2,OUTPUT);\r\n  digitalWrite(rele2,apagar); \/\/ Rele 2\r\n  radio.begin();\r\n  radio.openReadingPipe(0, identificacion);\r\n  radio.setPALevel(RF24_PA_MIN);\r\n  \/\/ Opciones RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX\r\n  \/\/ MIN = -18dBm, LOW = -12dBm, HIGH = -6dBm, MAX = 0dBm\r\n  radio.startListening(); \/\/ inicio de recepcion\r\n}\r\nvoid loop() {\r\n\/**************************************************************\/\r\n  if (radio.available()) {\r\n  char texto[2]; \r\n  radio.read(&texto,1); \/\/ Esperamos que llegue algo por RF desde el modulo\r\n  if (sizeof(texto)>0) {\r\n\/**************************************************************\/\r\n  controlEncendido(texto[0]);\r\n  }\r\n }\r\n}\r\n\r\n\/\/ rutina auxiliar\r\nvoid controlEncendido(char val) {\r\nint valor = 0;\r\nswitch (val) {\r\n  case 'a':\r\n    valor = !digitalRead(rele1);\r\n    digitalWrite(rele1,valor); \r\n    \/\/ RELE 1 apagado \r\n    break;\r\n  case 'b':\r\n    valor = !digitalRead(rele2);\r\n    digitalWrite(rele2,valor); \r\n    \/\/ RELE 2 apagado \r\n    break;\r\n  case '0':\r\n    digitalWrite(rele1,apagar); \r\n    digitalWrite(rele2,apagar); \r\n    \/\/ Todos apagados\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n<\/pre>\n

Con esta disposici\u00f3n, la manera de controlar los rel\u00e9s es como sigue: abrimos el panel de Monitor Serie y tipeamos all\u00ed los comandos \u201ca<\/strong>\u201d o \u201cb<\/strong>\u201d para encender y apagar los rel\u00e9s.<\/p>\n

La capacidad de control se puede ampliar utilizando m\u00f3dulos de mayor tama\u00f1o, por ejemplo de 4, 8 o 16 rel\u00e9s, y agregando las variables y l\u00edneas de programa para cada rel\u00e9. Utilizaremos en esos casos las siguientes letras: \u201cc<\/strong>\u201d, \u201cd<\/strong>\u201d y as\u00ed sucesivamente.
\n


\n