Red de sensores inalámbricos de bajo costo en la banda de 433 MHz: 5 pasos (con imágenes)
Red de sensores inalámbricos de bajo costo en la banda de 433 MHz: 5 pasos (con imágenes)

Video: Red de sensores inalámbricos de bajo costo en la banda de 433 MHz: 5 pasos (con imágenes)

Video: Red de sensores inalámbricos de bajo costo en la banda de 433 MHz: 5 pasos (con imágenes)
Video: Red de sensores de bajo costo para monitorear la calidad de aire 2025, Enero
Anonim
Red de sensores inalámbricos de bajo costo en la banda de 433 MHz
Red de sensores inalámbricos de bajo costo en la banda de 433 MHz

Muchas gracias a Teresa Rajba por amablemente darme su aceptación para usar datos de sus publicaciones en este artículo

* En la imagen de arriba, las cinco unidades de sensor-transmisor que usé para probar

¿Qué son las redes de sensores inalámbricos?

Una definición simple sería: las redes de sensores inalámbricos se refieren a un grupo de dispositivos electrónicos distribuidos en un área determinada para monitorear y registrar datos ambientales, que se transmiten de forma inalámbrica a una ubicación central para ser procesados y almacenados.

Hoy en día, las redes de sensores inalámbricos se pueden utilizar de varias maneras, a continuación se muestran algunos ejemplos:

  • Áreas de vigilancia ecológica de bosques, ríos, lagos, mares y océanos;
  • Posibilidad de alertar en caso de ataques terroristas, químicos, biológicos, epidémicos;
  • Sistemas de monitorización para niños, ancianos, pacientes o personas con necesidades especiales;
  • Sistemas de vigilancia en agricultura e invernaderos;
  • Sistema de monitoreo de pronóstico del tiempo;
  • Vigilancia del tráfico urbano, escuelas, aparcamientos;

Y muchas, muchas otras aplicaciones.

En este artículo quiero mostrar los resultados de un experimento con redes de sensores inalámbricos que se han utilizado para monitorear datos de temperatura y humedad, con una variación lenta y relativamente predecible. Para este experimento, elegí usar sensores-emisores que construí por mi cuenta usando módulos asequibles. El receptor también es DIY, la comunicación es unidireccional (en la banda de radio de 433 MHz), lo que significa que los sensores solo transmiten los datos y la ubicación central solo los recibe. No hay comunicación entre los sensores y del receptor a los sensores.

Pero, ¿por qué elegir utilizar varios transmisores y un solo receptor? Evidentemente, la primera razón sería “simplificarlo”. Cuanto más sencillo es el montaje, menos probabilidades hay de que falle, y definitivamente es mucho más fácil reparar y reemplazar los componentes individuales en caso de mal funcionamiento. El consumo de energía también es menor, las baterías durarán más (los sensores solo consumirán mientras monitorean y reciben, el resto del tiempo el dispositivo estará en modo de suspensión profunda). El hecho de que sea simple hace que el dispositivo también sea económico. Otro aspecto a tener en cuenta es la zona de cobertura. ¿Por qué? Es mucho más fácil construir y utilizar un receptor sensible que tener un receptor sensible y un transmisor potente tanto en los sensores como en el módulo central (esto es necesario para una buena comunicación bidireccional). Con un receptor sensible y de buena calidad es posible recibir datos desde una gran distancia, pero emitir datos a la misma distancia requiere una alta potencia de emisión y esto conlleva altos costos, consumo de electricidad y (no olvidemos) la posibilidad de sobrepasar la potencia máxima legal del transmisor en la banda de 433 MHz. Mediante el uso de un receptor de calidad media, barato pero con una antena de alta calidad (incluso de bricolaje) y transmisores baratos con una antena de buena calidad, podemos lograr excelentes resultados a una fracción del costo de las redes de sensores inalámbricos existentes.

Paso 1: consideraciones teóricas

La idea de construir una red de sensores inalámbricos para monitorear la temperatura y la humedad del aire y el suelo en diferentes áreas de un invernadero me vino a la mente hace mucho tiempo, casi 10 años. Quería construir una red de 1 cable y usar sensores de temperatura y humedad de 1 cable. Desafortunadamente, hace 10 años, los sensores de humedad eran raros y costosos (aunque los sensores de temperatura estaban muy extendidos) y como extender cables por todo el invernadero no parecía una opción, abandoné la idea bastante rápido.

Sin embargo, ahora la situación ha cambiado radicalmente. Podemos encontrar sensores baratos y de buena calidad (temperatura y humedad), y también tenemos acceso a transmisores y receptores baratos en la banda de 433 MHz. Solo hay un problema: si tenemos más sensores (digamos 20), ¿cómo resolvemos las colisiones (tenga en cuenta que esta es una comunicación unidireccional), es decir, superponiendo la emisión de 2 o más sensores? Mientras buscaba una posible solución, me encontré con estos artículos muy interesantes:

Transmisión de convergencia de sensores inalámbricos basada en un procedimiento de operaciones aleatorias - por RAJBA, T. y RAJBA, S.

y

La probabilidad de colisiones en la red de sensores inalámbricos con envío aleatorio - por RAJBA S. y RAJBA. T

Básicamente, los autores nos muestran que la probabilidad de colisiones en una red de sensores inalámbricos se puede calcular si los paquetes se emiten en ciertos puntos de tiempo de acuerdo con una distribución poissoniana (exponencial).

Un extracto del artículo anterior enumera las características de la red estudiada.

  • un gran número de unidades de sensor-transmisor N;
  • las unidades de sensor-transmisor permanecen completamente independientes y su encendido o apagado no influye en el funcionamiento de la red;
  • todas las unidades de sensor-emisor (o una parte de ellas) pueden ser móviles siempre que estén ubicadas dentro del alcance de radio de la estación receptora;
  • los parámetros físicos que cambian lentamente están sujetos a mediciones, lo que significa que no hay necesidad de transmitir los datos con mucha frecuencia (por ejemplo, cada varios minutos o varias docenas de minutos);
  • la transmisión es de tipo unidireccional, es decir, desde la unidad de sensor-emisor hasta el punto de recepción en T intervalos de tiempo promedio. La información se transmite en el protocolo en tpag duración;
  • cualquier sensor seleccionado comienza a transmitir aleatoriamente en tiempos de Poisson. PASTA (Poisson Arrivals See Time Average) se utilizará para justificar el envío de sondas en las épocas de Poisson;
  • todas las unidades de sensor-transmisor permanecen independientes al azar y transmitirán la información en un momento de tiempo seleccionado al azar de tpag duración y de T tiempo medio de repetición;
  • si uno o más sensores comienzan a transmitir mientras el protocolo de tpag la duración se transmite desde otro sensor, tal situación se llama colisión. La colisión hace imposible que la estación base central reciba la información de forma correcta.

Encaja casi a la perfección con la red de sensores que quiero probar …

Casi.

No estoy diciendo que entendiera completamente las matemáticas en el artículo, pero sobre la base de los datos presentados y de las conclusiones he podido entender un poco de qué se trata. Lo único es que un valor usado en el papel me preocupó un poco:). Es la variable tpag - duración de la transmisión de datos que se supone que es 3,2x10-5 s. ¡Así que el tiempo de transmisión de los datos recopilados sería de 3,2 nosotros! Esto no se puede hacer en la banda de 433 MHz. Quiero usar el rcswitch o el radiohead para programar los sensores del transmisor. Al estudiar los códigos de las dos bibliotecas, llegué a la conclusión de que el tiempo de transmisión más pequeño sería de 20 ms, muy por encima del valor de 3,2 us. Con los transmisores de 2,4 GHz, es posible tpag el tiempo es tan pequeño … pero esa es otra historia.

Si aplicamos la fórmula propuesta por los autores de este artículo el resultado será:

Datos iniciales (un ejemplo):

  • Número de sensores N = 20;
  • Duración de la transmisión de datos tpag= 20x10-3 s (0,020 s)
  • Intervalo de transmisión promedio T = 180 s

La formula:

La probabilidad de colisión en el intervalo T es

Imagen
Imagen

si tenemos en cuenta los datos iniciales, la probabilidad de colisión en el intervalo T será 0.043519

Este valor, que indica la probabilidad de tener 4,35 colisiones por cada 100 mediciones, es, en mi opinión, bastante bueno. La probabilidad podría mejorar si aumentamos el tiempo medio de transmisión, por lo que a un valor de 300 segundos tendríamos una probabilidad de 0,026332, es decir, 2,6 colisiones por cada 100 mediciones. Si consideramos que podemos esperar la pérdida de paquetes de datos de todos modos durante el funcionamiento del sistema (dependiendo de las condiciones climáticas, por ejemplo), entonces este número es realmente excelente.

Quería hacer una simulación de este tipo de red, pero también una especie de asistente de diseño, así que hice un pequeño programa en C, puedes encontrar el código fuente en github (también un binario compilado que se ejecuta en la línea de comandos de Windows - liberación).

Los datos de entrada:

  • sensor_number: el número de sensores en la red;
  • número_medidas: número de medidas que se van a simular;
  • average_transmission_interval -tiempo medio entre transmisiones de datos sucesivas;
  • Transmission_time - la duración efectiva de la transmisión de datos.

Producción:

  • el tiempo máximo de medición calculado;
  • la lista de colisiones entre dos sensores;
  • número de colisiones;
  • probabilidad teórica de las colisiones.

Los resultados son muy interesantes:)

Basta con la teoría, no quisiera insistir más en la parte teórica, los artículos y el código fuente son bastante elocuentes, así que mejor voy a la implementación práctica y efectiva de la red de sensores inalámbricos y a los resultados de las pruebas.

Paso 2: Implementación práctica: el hardware

Para transmisores-sensores necesitaremos los siguientes componentes:

  • Microcontrolador ATtiny85 1,11 $;
  • Toma de circuito integrado 8DIP 0.046 $;
  • Sensor de temperatura / humedad DHT11 0,74 $;
  • Módulo transmisor 433MHz H34A 0,73 $;
  • Soporte de batería 4xAA con interruptor 1 $;

Total 3,63 $;

El receptor utilizado para las pruebas es un Arduino UNO (solo para pruebas) y un módulo receptor H3V4F (0,66 $) con una antena de arco barata (0,32 $).

Esquemas de sensor-transmisor

Imagen
Imagen

Las unidades transmisor-sensor se alimentan con 3 pilas AA de 1,5 V (en el cuarto compartimento del portapilas se encuentra el conjunto electrónico). Como puede ver, la fuente de alimentación del transmisor y el sensor de temperatura-humedad está conectado al pin PB0 del microcontrolador (el transmisor y el sensor se alimentan cuando el pin está en HIGH). Entonces, cuando el microcontrolador está en modo de suspensión profunda, puede alcanzar un consumo de corriente de 4.7uA. Teniendo en cuenta que el tiempo de activación del transmisor-sensor sería de unos 3s (medida, transmisión, etc.) y el tiempo medio entre transmisiones de 180s (como el ejemplo del capítulo anterior), las baterías deberían resistir bastante. Con algunas baterías alcalinas de buena calidad (es decir, 2000 mAh), la autonomía podría ser de más de 10 meses según lo calculado en omnicalculator.com (donde el consumo total de corriente es: sensor - 1.5mA, módulo transmisor - 3.5mA y microcontrolador ATtiny85 - 5mA, total 10mA).

En la foto de abajo puede ver el ensamblaje del sensor-transmisor casi terminado.

Imagen
Imagen

A continuación se muestra la foto de la unidad receptora de prueba.

Imagen
Imagen

Paso 3: Implementación práctica: software

El software cargado ejecutándose en el microcontrolador attiny85, el componente principal de las unidades sensor-transmisor, tiene el propósito de leer los datos proporcionados por el sensor, convertirlos para ser transmitidos por radio y transmitirlos dentro de los marcos de tiempo de Poisson (distribución exponencial o PASTA - Llegadas a Poisson Ver promedios de tiempo). Además, al usar una función simple, monitorea el estado de las baterías y da una advertencia si ya no se proporciona el voltaje requerido para el sensor. El código fuente está disponible en github. El código para el receptor de prueba es muy simple, lo publico a continuación.

// biblioteca rcswitch modificada de https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// el código es una versión modificada de ejemplos de la biblioteca rcswitch original #include RCSwitch mySwitch = RCSwitch (); datos largos sin firmar = 0; configuración vacía () {Serial.begin (9600); mySwitch.enableReceive (0); // Receptor en interrupción 0 => que es el pin # 2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // salida (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int humedad = bitExtracted (data, 7, 1); // 7 bits menos significativos desde la posición 1 - primer bit más a la derecha int temperature = bitExtracted (data, 7, 8); // los siguientes 7 bits de la posición 8 a la derecha y así sucesivamente int v_min = bitExtracted (data, 1, 15); int packet_id = bitExtracted (datos, 3, 16); // 3bits - 8 ID de paquete de 0 a 7 int sensor_id = bitExtracted (data, 6, 19); // 6 bits para 64 ID de sensor - total 24 bits Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatura); Serial.print (","); Serial.print (humedad); Serial.println (); mySwitch.resetAvailable (); }} // código de https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (unsigned long number, int k, int p) {return (((1 (p - 1)));}

He tratado de incluir tantos comentarios como sea posible para que sea más fácil de entender.

Para la depuración utilicé la biblioteca de softwareserial y la placa de desarrollo attiny85 con el programador USBasp (ver también mis instrucciones sobre esto). El enlace en serie se ha realizado con un convertidor de serie a TTL (con un chip PL2303) conectado a los pines doblados (3 y 4) de la placa de desarrollo (ver imagen a continuación). Todo esto ha sido de una ayuda inestimable para completar el código.

Imagen
Imagen

Paso 4: Resultados de la prueba

Resultados de la prueba
Resultados de la prueba
Resultados de la prueba
Resultados de la prueba

He creado 5 unidades de sensor-transmisor que recopilan y envían valores medidos por los sensores DHT11. Grabé y guardé medidas, con la ayuda del receptor de prueba y un programa de emulación de terminal (foxterm), durante tres días. Elegí un intervalo de 48 horas para estudiar. No estaba necesariamente interesado en los valores medidos (el sensor 2, por ejemplo, me muestra valores incorrectos) sino en el número de colisiones. Además, el receptor colocó los sensores muy cerca (a 4-5 m) para eliminar otras causas de pérdida de paquetes. Los resultados de la prueba se guardaron en un archivo cvs y se cargaron (consulte el archivo a continuación). También cargué un archivo de Excel basado en este archivo csv. Tomé algunas capturas de pantalla para mostrarte cómo se ve una colisión (en mis pruebas, por supuesto), también agregué comentarios a cada captura de pantalla.

Quizás se pregunte por qué no utilicé un servicio de cargador de datos, por ejemplo, ThingSpeak. El hecho es que tengo muchos registros, muchos sensores y datos que a menudo llegan a intervalos irregulares, y los servicios de IoT en línea solo permiten datos en una cierta cantidad de sensores y solo a intervalos bastante grandes. Estoy pensando en instalar y configurar mi propio servidor IoT en el futuro.

Al final, 4598 mediciones en 5 unidades de sensor-transmisor (aprox. 920 / sensor) dieron como resultado un total de 5 colisiones durante un período de 48 horas (0,5435 colisiones / 100 mediciones). Haciendo algunos cálculos matemáticos (usando el programa wsn_test con datos iniciales: 5 sensores, tiempo promedio 180 s, tiempo de transmisión 110 ms), la probabilidad de colisión sería 0.015185 (1.52 colisiones / 100 mediciones). Los resultados prácticos son incluso mejores que los teóricos, ¿no?:)

Imagen
Imagen

De todos modos también hay 18 paquetes perdidos en este período, por lo que las colisiones realmente no importan demasiado en este sentido. Por supuesto, la prueba debe realizarse durante un período de tiempo más largo para obtener los resultados más concluyentes, pero en mi opinión es un éxito incluso en estas condiciones y confirma completamente los supuestos teóricos.

Paso 5: Pensamientos finales

Aplicación inmediata

En un gran invernadero se cultivan varios cultivos. Si el riego se realiza manualmente sin monitoreo climático, sin ninguna automatización, sin registros de datos existe riesgo de exceso o defecto de riego y además el consumo de agua es alto, no hay evidencia de optimización del consumo de agua, hay riesgo para cultivos en general. Para evitar esto, podemos utilizar una red de sensores inalámbricos:)

Los sensores de temperatura, los sensores de humedad del aire, los sensores de humedad del suelo se pueden colocar en todo el invernadero y con la ayuda de los datos transmitidos se pueden realizar varias acciones: válvulas eléctricas de arranque y parada para dejar que el agua fluya donde se necesita, ventiladores eléctricos de arranque y parada para reducir la temperatura en diferentes áreas, ponga los calentadores de arranque y parada según sea necesario y todos los datos se pueden archivar para análisis futuros. Además, el sistema puede proporcionar una interfaz web accesible en todas partes y alarmas por correo electrónico o SMS en caso de una condición anormal.

¿Que sigue?

  • Prueba con un mayor número de sensores;
  • Pruebas en tiempo real con sensores remotos en el área de cobertura;
  • Instalar y configurar un servidor IoT local (en una Raspberry Pi, por ejemplo);
  • Prueba también con transmisores (transceptores) -sensores en 2.4Ghz.

así que … continuará …:)

DESCARGO DE RESPONSABILIDAD: El uso de la banda de frecuencia de 433 MHz en su región puede estar sujeto a regulaciones de radiofrecuencia. Comprueba tu legalidad antes de probar este proyecto

Concurso de sensores
Concurso de sensores
Concurso de sensores
Concurso de sensores

Finalista en el Concurso de Sensores