APROVECHAMIENTO DEL AGUA DE LLUVIA PARA RIEGO

IIoT Industrial Internet of Things

Comunicacion de un sensor de ultrasonidos a traves de Arduino enviando datos a un Automata S7 1200 de Siemens a traves de la red de comunicaciones industrial MODBUS.

Este proyecto se ha desarrollado en el IES la Fuensanta en colaboración con la empresa DEUSER.

La importancia de este proyecto radica en la conexión de cualquier sensor de bajo coste a traves de un microcontrolador y la comunicación con el autómata de Siemens a través de la red industrial de comunicaciones ModBus.

Estructura

El proyecto consiste en montar un sistema que almacene el agua de lluvia y lo aproveche para el riego de jardines próximos o para agricultura.

Se ha planteado para el agua de lluvia, pero con un sistema de canales se podría aprovechar el agua de algún río.

La estructura es la siguiente:

Vamos a disponer de un aljibe que va a recoger el agua de la lluvia. Este aljibe dispondrá de un sensor y un motor (1). Cuando el sensor detecte que ha llegado al máximo de su capacidad, se activará una bomba que trasladará toda esa agua a un depósito de una sola vez, hasta que el sensor detecte que se a llegado al mínimo.

Por otra parte, nuestro depósito dispondrá de otro sensor que sus niveles max y min .

Este de dispondrá de dos motores.

El motor 2 se encargará de extraer el agua para el riego de algún jardín cercano mediante un programa semanal, previamente establecido.

El otro motor (3) tendrá la misión de mantener el agua en un nivel óptimo para su uso y evitar posibles rebosamientos. Como? Si se detectara un nivel máximo, el motor se activaría y evacuaría el agua al exterior, es decir, al saneamiento principal, aprovechando para limpiar la red de alcantarillado.

Todo este proceso estaría automatizado y controlado por un PLC S7_1200 de Siemens Y monitorizado en todo momento con una pantalla HMI KTP400 de Siemens.

Esta pantalla dispone de cuatro botones de función que nos servirán para cambiar de vistas y poder observar los distintos estados de la instalación , el aljibe y el deposito. La pantalla, a su vez , es táctil, por lo que podremos tb realizar distintas acciones sobre el sistema, como por ejemplo cambiar de vistas, activar modo manual, cambios en el programa semanal…

HMI del depósito

Con el botón F1 accedemos a la pantalla de la insalación. Aquí podremos ver el estado de los motores (gris=parado, verde=activo, rojo=fallo) y acceder , de manera táctil al estado de aljibe y depósito. (igual que con F2 y F3)

HMI del Aljibe

En esta pantalla podemos observar de manera numérica y gráfica el estado del aljibe. Y aquí lo mismo con el depósito.

Estado del depósito

Mediante el botón F4 accedemos ala pantalla de Acciones. Aquí podemos encender/apagar, pasar de modo automatico a manual, seleccionar el programa semanal, ver el listado de las alarmas o cambiar de idioma. En el modo manual podemos conmutar entre ON/OFF al mismo tiempo que vemos el nivel de los depósitos. En el programa semanal seleccionamos el día y la hora .

Sensórica

Para la toma de datos se han utilizado unos sensores de ultrasonidos que funcionan con la placa Arduino UNO. Si bien no son los más precisos, cumplen a la perfección con el cometido del proyecto, y además son bastante económicos. Los sensores pueden costar unos 2€ y la placa la podemos encontrar por unos 5€ aprox. Además, la Ethernet shield que vamos usar para comunicar con el PLC vía profinet puede costar unos 8€. Con esta tarjeta salvamos el problema de las diferencias de tensión de trabajo de los dos dispositivos (5 y 24v) , pero nos encontramos con otro, ¿Cómo hacer que se entiendan?

ModBus - Arduino

Pues bien, la solución la encontramos en el Protocolo de comunicación Modbus TCP, basado en la arquitectura maestro/esclavo (RTU) o, como es en este caso, cliente/servidor (TCP/IP). Una de las dificultades del proyecto ha sido encontrar la librería apropiada para que Arduino pueda enviar la información siguiendo este protocolo. Esta librería se llama MUDBUS, y es la que hemos añadido al programa de Arduino.


Como funciona el programa de Arduino?Se le asigna una dirección IP a la placa y se inicializa en el void setup.


Y en el void loop le decimos que coloque los datos distancia en los registros R0 y R1 (que corresponderán a las posiciones de memoria 40001 y 40002 al ser holding registers de 16 bits)


Ahora, cómo lo recibe los datos el S7-1200?

Existe en el PLC una instrucción que se llama "MB_CLIENT", que comunica como cliente MODBUS TCP a través de un enlace PROFINET.


Aquí encontramos otra dificultad, nosotros queremos saber en todo momento la distancia a la superficie, pero tenemos dos depósitos y solo se puede usar un MB_Client a la vez.

Como lo configuramos?

+ siempre conectado

+modo 0, lectura

+inicio de lectura en 40001

+leer 2 palabras

+Almacenar en VALOR_DIST.


Este VALOR_DIST está dentro de un DB Arduino_Data ( bloque de datos) creado para gestionar el MB_Client.


Aquí vemos la solución al problema de los dos datos. VALOR_DIST es del tipo Array de enteros [0…1], y al leer los dos enteros los almacena en dos posiciones de memoria contiguas, VALOR_DIST_0 y VALOR_DIST_1; que son los que llevaremos a los comparadores del programa que activarán o desctivarán los motores.