domingo, 24 de julio de 2016

Tercera fase. Sistema SCADA para instalación de calefacción y ACS con RaspberryPi y Arduino MEGA



En el presente proyecto se trata el diseño de un sistema integrado de gestión y control, sistema SCADA (Supervisión, Control y Adquisición de Datos) de una instalación típica para Agua Caliente Sanitaria (ACS) y calefacción de una vivienda unifamiliar.

Tercera fase:

Implementación de un servidor web que permitirá supervisar, parametrizar y analizar toda la instalación desde cualquier punto con acceso a Internet, convirtiendo todo el proyecto en un modesto pero eficiente sistema SCADA (Supervisión, Control y Adquisición de Datos).
Para ello se utilizará una RaspberryPi, en la que se instalará un servidor LAMP (Linux, Apache2, MySql, PhP) conectada a la placa Arduino MEGA 2560 a través del puerto serie.
Video demostrativo del funcionamiento.

TERCERA FASE

Configuración de la RaspberryPi.

El servidor LAMP incluye los siguientes paquetes:
Servidor WEB Apache2.
Base de Datos MySQL.
Intérprete del lenguaje PHP.

Instalación de LAMP ( Linux, Apache2, MySQL, PHP):

La configuración e instalación de nuevos paquetes en Linux es un tarea que escapa a este proyecto. Existen cientos de blogs y páginas que tratan el asunto con mucho rigor y acierto.
No obstante a continuación se detallan los pasos para poner en funcionamiento el servidor LAMP en nuestra raspberryPi.



Base de Datos MySQL:

A continuación se detallan la forma de crear una base de datos y como importarla.

Vista de la tabla "yun_arduino_yun"




Archivos de Control de la aplicación:

Para la gestión y control de la aplicación se han creado una serie de programas y scripts que nos permiten la comunicación raspberryPi  <=> Arduino, la parametrización del Arduino, la gestión de la BBDD y la captura de datos del Arduino entre otras cosas.
A continuación se detallan los distintos archivos de control.

Programador de tareas periódicas,  "Crontab"

El programador de tareas de Linux Crontab nos facilita la manera de llamar a los distintos programas de control del servidor y es en síntesis el motor del flujo de los archivos de Control de la aplicación.
Las tareas  solicitadas en el mismo son las siguientes:
Cada minuto, cada día de la semana se busca si está en ejecución el programa "raspduinoRecibir.py" y se elimina el proceso en curso.
Cada minuto, cada día de la semana se busca si está en ejecución el script "iniciaLecturaDeArduino" y se elimina el proceso en curso.
Cada minuto, cada día de la semana se ejecuta el script "guardaHoraSistema.sh".
Cada minuto, cada día de la semana se ejecuta el script "iniciaLecturaDeArduino".



guardaHoraSistema.sh


El siguiente script tiene varias instrucciones de importancia.
En primer lugar guarda la hora del servidor ( la raspberryPi ) en la BBDD de la caldera "DatosDeCaldera".

En segundo lugar llama al programa python "raspduinoModificar.py" y le envía como parámetros la hora y minuto del servidor. El programa "raspduinoModificar.py" permite a través del puerto serie,  el envío en un formato predeterminado de los nuevos valores para los parámetros de funcionamiento del Arduino.

En tercer lugar llama al programa "raspduinoParametrizar.py", el cual gestiona la actualización de los parámetros de funcionamiento del Arduino, comparándolos con los introducidos en la BBDD por el usuario de la instalación.

En cuarto lugar, llama al programa "raspduinoVerificaComunicacion.py", encargado de comprobar el correcto funcionamiento de la comunicaciones de nuestro servidor con el Arduino y el acceso a Internet.








raspduinoModificar.py

El programa python "raspduinoModificar.py" confecciona un mensaje de escritura incluyendo los argumentos recibidos.
Estos argumentos corresponden al nombre del parámetro el primero, y el valor del mismo el segundo.
Una vez confeccionado el mensaje lo envía al Arduino  a través del puerto serie.




raspduinoParametrizar.py

El programa python "raspduinoParametrizar.py"  modifica los parámetros de funcionamiento de la instalación.
Para ello comprueba las columnas "valor" y "eepromSimulada" de la tabla "yun_arduino_yun"  en las filas donde los parámetros de la columna "nombre" coincide con los incluidos en el array -params-.
Si el resultado de la comparación es falso, se confecciona un mensaje preformateado y se envía al Arduino el  nuevo valor del parámetro  a través del puerto serie para la modificación del mismo.
De esta manera conseguimos hacer de nuestra BBDD en la raspberryPi una emulación del funcionamiento de una memoria EEPROM, ( de ahí el nombre de la columna "eepromSimulada" en la BBDD).
Además,  en caso de corte de alimentación o reinicio de la instalación,  nos permite recuperar la completa configuración de los parámetros de funcionamiento modificados por el usuario, en lugar de usar los de defecto sin necesidad de volverlos a introducir.
Se ha optado por esta solución debido a que las necesidades de nuestra aplicación requería una cantidad considerable de escrituras-lecturas de la EEPROM del propio Arduino lo cual, sin duda habría puesto a prueba la duración de la vida útil del Arduino.
 


raspduinoVerificaComunicacion.py

El programa python "raspduinoVerificaComunicacion.py" comprueba la correcta comunicación del servidor con el Arduino y con la red (Internet).
En caso de fallos continuados de comunicación reinicia los equipos cortándoles la alimentación mediante la activación de sendos relés.

Listado del programa :


iniciaLecturaDeArduino

Prepara al Arduino para lectura a través del programa "raspduinoRecibir.py" si es que no existe ya una instancia en proceso, en cuyo caso deja que termine el mimo.


raspduinoRecibir.py

El programa python "raspduinoRecibir.py" lee los parámetros de estado de los equipos y los valores de las  variables enviados por el Arduino a través del puerto USB de la raspberryPi.
Si el mensaje recibido tiene un formato coherente, lo valida y lo guarda  en  la BBDD "DatosDeCaldera".

Listado programa :

Archivos del servidor  HTML y PHP.

Pantallas de presentación de los archivos principales de la aplicación:


index.html:





calderaTelegestionCaldera.php:




calderaLeerCurva.php










calderaParametrizacion.php











calderaFalloEnvio.php






Conjunto de la aplicación al completo:



Solicitar aquí  información del proyecto :


softmpr@gmail.com


Descarga Parcial del proyecto


Ver video demo en Youtube








No hay comentarios:

Publicar un comentario