Una red de sensores inalámbricos (WSN) consta de lo siguiente:
- Un receptor central (para seguimiento, almacenamiento y control)
- Múltiples nodos de sensores inalámbricos
El nodo sensor inalámbrico es un circuito alimentado por batería o energía solar que detecta cualquier cantidad física (como temperatura, presión, flujo, humedad del suelo, gas, humo, etc.) y transmite su valor a un receptor remoto. Esto consiste en
- Un elemento sensor
- Unidad de microcontrolador (MCU) (puede ser opcional en algunos casos)
- Modulador y transmisor (principalmente RF)
- Batería (a veces alimentada por energía solar)
Muchos de estos nodos sensores están colocados a una distancia regular sobre un área geográfica grande para cubrir toda el área. Todos envían sus datos a un receptor ubicado en el sistema central de monitoreo y almacenamiento de datos. Todos los nodos sensores transmiten datos (valor del sensor) periódicamente. El receptor recibe los datos de todos estos nodos y los almacena y muestra con fines de seguimiento y control.
Basta con echar un vistazo a un ejemplo.
- Es necesario mantener la temperatura establecida en todos los rincones de toda la zona de refrigeración. Por lo tanto, se instalan muchos pequeños nodos de sensores de temperatura inalámbricos en diferentes rincones. Juntos, detectan la temperatura ambiente y transmiten el valor detectado a la sala central de monitoreo y control. De esta manera, el controlador central podrá obtener las lecturas de temperatura de cada rincón del área de almacenamiento y en base a eso intentará mantener la misma temperatura en todos los rincones.
Aquí, en este proyecto para el nodo sensor, utilicé el sensor de gas MQ2 para detectar diferentes gases (como CO2, metano, GLP, propano, etc.) en la atmósfera. La idea es detectar fugas de gas en cualquier punto. Por ejemplo:
- En una tubería de gas LPG muy larga, estos nodos sensores se encuentran a una distancia regular. Por lo tanto, siempre que haya una fuga en línea, el nodo sensor la detecta y la transmite al centro remoto para tomar medidas de control de inmediato.
- En una industria/planta de procesamiento químico, estos nodos sensores se colocan en diferentes lugares (como en cámaras de gas, tanques, calderas, etc.) para detectar fugas de gases peligrosos. Detectan fugas de gas y envían inmediatamente una señal de alarma a una sala de control central. La sala de control central toma las medidas necesarias y así se pueden evitar efectos catastróficos.
El nodo sensor también consta de Arduino NANO como MCU y un módulo transmisor ASK RF de 433 MHz. Puede haber muchos nodos sensores, pero yo solo he usado 2 de esos nodos. El receptor incluye un módulo receptor ASK RF de 433 MHz y un MCU Arduino NANO. Ambos nodos sensores transmiten datos de los valores de GAS detectados. El receptor recibe valores de ambos sensores y los transmite al ordenador. La computadora muestra estos valores y los almacena para uso futuro.
Entonces, construyamos el sistema, comenzando primero con el diagrama de bloques, seguido de un diagrama de circuito, su funcionamiento y operación. El programa de software se proporciona en la última
Diagrama de bloques del sistema
El sistema completo se divide en dos bloques diferenciados
- Transmisor (también llamado nodo sensor)
- Receptor
Puede haber cualquier número de nodos de sensores situados en diferentes ubicaciones, pero solo habrá un receptor conectado a un sistema central de almacenamiento de datos (computadora).
El nodo sensor consta de cuatro cosas: (1) sensores diferentes, (2) microcontrolador, (3) transmisor de RF y (4) batería. Aquí en nuestro caso
- El sensor es un sensor de gas MQ2 utilizado para detectar gas/humo en la atmósfera circundante.
- La placa Arduino nano se utiliza como un microcontrolador que leerá los datos del sensor de gas y los transmitirá mediante un transmisor de RF.
- Se utiliza un módulo transmisor de RF basado en ASK con una frecuencia portadora de 433 MHz para modular y transmitir los datos al receptor.
- Se utiliza una batería de 6 V a 9 V para proporcionar energía para completar el nodo del sensor.
- También se proporciona un LED que parpadeará para indicar que el nodo sensor está activo y transmitiendo datos.
El receptor consta solo de dos cosas: (1) módulo receptor de RF y (2) microcontrolador.
Aquí en nuestro caso
- Se utiliza un módulo receptor de RF basado en ASK con una frecuencia portadora de 433 MHz para demodular y recibir datos transmitidos por el módulo RF Tx del nodo sensor.
- La placa Arduino NANO se utiliza como un microcontrolador que toma los datos del módulo receptor de RF y los entrega a una computadora que los almacenará para uso futuro.
- Aquí también se proporciona un LED que parpadeará para indicar que el receptor está activo y recibiendo datos.
Diagrama del circuito del nodo sensor
Como se muestra en la figura, solo hay 3 componentes principales en el circuito.
- El sensor MQ2 tiene sólo 4 pines para la interfaz. (1) Vcc (2) Tierra (3) A0 y (4) D0. El pin D0 es una salida digital (0 o 1) y no se utiliza. A0 es una salida analógica y está conectada a la entrada analógica A0 de Arduino. El pin Vcc está conectado a la salida de 5 V de la placa Arduino y Gnd está conectado a la tierra común.
- El módulo RF Tx de 433 MHz tiene 4 pines de interfaz. (1) Vcc (2) Gnd (3) entrada de datos y (4) antena. El pin Vcc está conectado a la salida de 5 V de la placa Arduino y Gnd está conectado a la tierra común. El pin Data_in está conectado al pin digital D11 de la placa Arduino. Una antena se forma enrollando un cable de cobre de 1 mm a 35 cm de largo (núcleo único) que se conecta a un pin de la antena.
- Un LED está conectado al pin digital D12 a través de una resistencia limitadora de corriente.
- Se utiliza una batería de 9 V para alimentar la placa Arduino. El pin Vin de la placa Arduino está conectado a la batería. Por lo tanto, la placa obtendrá voltaje de trabajo y generará energía de 5 V desde el chip regulador de voltaje integrado 7805, y esto se suministra al módulo DHT11 y RF Tx.
Diagrama del circuito del receptor de datos remoto
Como se muestra en la figura, solo hay tres componentes principales en este circuito receptor.
- El módulo RF Rx de 433 MHz tiene 4 pines de interfaz. (1) Vcc (2) Gnd (3) salida de datos y (4) antena. El pin Vcc está conectado a la salida de 5 V de la placa Arduino y Gnd está conectado a la tierra común. El pin Data_out está conectado al pin digital D12 de la placa Arduino. una antena (igual que el lado del transmisor) está conectada al pin de la antena
- Un LED está conectado al pin digital D10 a través de una resistencia limitadora de corriente.
- Un zumbador de 5 V CC está conectado al pin digital D7 como se muestra
- La placa Arduino y el módulo RF Rx obtienen energía de una computadora portátil/PC de escritorio/computadora con sistema de almacenamiento central a través de un cable USB. La placa Arduino también registra datos y se comunica con el ordenador mediante el mismo cable USB.
Trabajo y operación
nodo sensor
Si quiero decir el funcionamiento del nodo sensor en una sola línea, diré: “periódicamente detectará gases y los transmitirá”. Pero no es tan simple. Puede haber 2, 3, 5, 10 o N número de nodos sensores, como vimos en el diagrama de bloques. Todos están haciendo lo mismo. Más de un nodo puede transmitir datos al mismo tiempo. Otra pregunta es: "¿cómo sabría el receptor que los datos recibidos provienen de un nodo específico (digamos, nodo 1, nodo 2, etc.)?"
Para superar estos problemas, se deben tomar medidas especiales. Todos los nodos sensores se sincronizarán en el tiempo para que no haya dos nodos que transmitan simultáneamente. De cualquier manera, si esto sucede, el receptor aceptará cualquier dato del sensor. Además, a todos los nodos se les asignan números (digamos del 1 al N) y antes de transmitir datos, transmiten el número de nodo. Por lo tanto, el receptor sabría que estos datos provienen del nodo sensor X.
- El sensor de gas MQ2 proporciona una salida de voltaje analógico directamente proporcional al nivel de gas en la atmósfera circundante. Esto significa que su voltaje de salida aumenta a medida que aumenta la concentración de gas. Arduino convierte este voltaje analógico en un valor digital (entre 0 y 1023) y lo asigna entre 0 y 99%. Finalmente, convierte este valor de % en caracteres ASCII.
- Forma una cadena (matriz de caracteres) de 4 caracteres como
número de nodo + concentración de gas
(2 caracteres) (2 caracteres)
- Y luego pase al módulo RF Tx a través del pin D11
- El módulo RF Tx toma esta cadena de 10 caracteres (podemos llamarla paquete ), la modula usando una portadora de 433 MHz y la transmite usando una antena.
- Cada vez que se transmite un paquete, el microcontrolador hace parpadear el LED para indicar que los datos se transmiten.
- Este ciclo se repite continuamente después del período de tiempo establecido (digamos 3, 5 o 10 segundos)
Receptor de datos remoto
- El módulo RF Rx recibe paquetes de cada nodo. Demodula y entrega este paquete al microcontrolador Arduino.
- El microcontrolador recibe el paquete y extrae el valor del nivel de gas (en%) junto con el número de nodo.
- Envía estos datos en serie a la computadora a través de USB como
Nodo x
Nivel de gas: XXX%
- El microcontrolador hace parpadear el LED para indicar que se han recibido datos.
- Si el nivel de gas en cualquier nodo es superior al nivel umbral, el timbre sonará continuamente para indicar un problema de fuga de gas.
- Este proceso se repite para cada paquete recibido de cualquier nodo en cualquier momento. debido a que todos los nodos están sincronizados en el tiempo, todos transmiten datos uno tras otro
- Entonces, el receptor obtendrá datos de todos los nodos uno por uno y actualizará las lecturas de cualquier nodo después del período de tiempo establecido.
Programa del nodo sensor: #incluir <VirtualWire.h> #definir MQ2_pin A0 constante int led_pin = 12; const int transmitir_pin = 11; char str1(2); nodo de caracteres(3) = "01"; // número de nodo. cambiar este número de nodo por char trnsmit_str(4);// nodo diferente configuración vacía { vw_set_tx_pin(transmitir_pin); vw_set_ptt_inverted(verdadero); vw_setup(2000); // Bits por segundo Serie.begin(9600); pinMode(led_pin, SALIDA); } bucle vacío { int gas, nivel_gas; gas=analogRead(MQ2_pin); nivel_gas=mapa(gas,0.1023,0.99); // mapearlos en el rango entre 0 y 99% Serial.println("Nodo 1"); // imprime en serie todos los valores Serial.print("nivel de gas: "); // para depurar Serial.print(nivel_gas); Serial.println(" %"); escritura digital (led_pin, ALTA); // Enciende una luz para mostrar la transmisión itoa(nivel_gas,str1,10); // convierte todos los valores de 2 dígitos en strcpy(trnsmit_str,nodo); // una cadena strcat(trnsmit_str,str1); Serial.print("cadena transmitida: "); Serial.println(trnsmit_str); vw_send((uint8_t *)trnsmit_str, 4); vw_wait_tx; // Espera hasta que desaparezca todo el mensaje escritura digital (led_pin, BAJO); retraso(5000); } Programa de nodo sensor: Programa receptor para 2 nodos: #incluir <VirtualWire.h> #definir umbral_gas 80 #definir sirena 7 const int recibir_pin = 12; int led = 10, nivel_gas; configuración vacía { Serie.begin(9600); // configurar la comunicación serie vw_set_rx_pin(recibir_pin); vw_set_ptt_inverted(verdadero); vw_setup(2000); // velocidad de datos inalámbricos vw_rx_start; // Inicia la ejecución del PLL del receptor pinMode(led,SALIDA); pinMode(sirena,SALIDA); escritura digital (led, BAJO); escritura digital (sirena, BAJA); retraso(1000); Serial.println("Recibiendo DATOS del sensor de todos los nodos..."); } bucle vacío { uint8_t buf(VW_MAX_MESSAGE_LEN); uint8_t buflen = VW_MAX_MESSAGE_LEN; ent i; if (vw_get_message(buf, &buflen)) // cuando se recibe el mensaje { escritura digital (led, ALTO); if(buf(1)=='1') // comprobar el número de nodo { Serial.println("Nodo 1"); // imprime el número de nodo y Serial.print("nivel de gas: "); // todos los valores de los sensores para (i = 2; i < 4; i++) Serial.print(buf(i)-48); Serial.println(" %"); nivel_gas = (buf(2)-48)*10 + (buf(3)-48)*1; if(nivel_gas>umbral_gas) digitalWrite(sirena,ALTO); else escritura digital (sirena, BAJA); } si no, si(buf(1)=='2') { Serial.println("Nodo 2"); Serial.print("Nivel de gas: "); para (i = 2; i < 4; i++) Serial.print(buf(i)-48); Serial.println(" %"); nivel_gas = (buf(2)-48)*10 + (buf(3)-48)*1; if(nivel_gas>umbral_gas) digitalWrite(sirena,ALTO); else escritura digital (sirena, BAJA); } } }
{
(tagsToTranslate)Arduino