martes, 8 de enero de 2013

Sistema de control de caldera de Gasoil.

Introducción.

Despues de hacer unas modificaciones en la caldera de Gasoil, debido a que se oxidó el acumulador de agua caliente y me vi obligado a cambiarlo, me encontré con que la adaptación del intercambio de calor entre la caldera y el nuevo acumulador no era la mejor, por eso, pensando en regular los termostatos mecánicos que trae la caldera, creo que será mejor diseñar un sistema nuevo que dote de cierta inteligencia al conjunto.
Como se estropeó el acumulador que trae la caldera incorporado, un tanque vitrificado de 100l, se oxidó por dentro y no hacía más que manchar el agua caliente, y después de gastar tiempo y dinero intentando repararlo, cambiando el ánodo de sacrificio, limpiándolo ,etc. Me vi en la tesitura de gastarme el dinero en cambiar el tanque por otro igual, para lo que hay que desmontar la caldera totalmente o instalar un tanque nuevo, de mayor capacidad y con doble serpentín para instalar más adelante un panel solar de A.C.S. y gastarme prácticamente lo mismo, evidentemente opté por la segunda opción.
Una vez terminada la instalación, me encuentro que funciona perfectamente pero parece que le cuesta un poco más calentar el tanque y sin embargo la caldera mantiene una temperatura residual de unos 80ºC, parece un problema de acoplamiento entre la regulación de los termostatos y la transferencia térmica del nuevo serpentín que hay en el nuevo tanque.
Sería posible regular los termostatos mecánicos y adaptarlo un poco mejor, pero ya puestos, porqué no aprovechar la capacidad de un microcontrolador y hacer un uso más eficiente del combustible?
Además así se puede dejar mientras tanto todo el sistema existente con los mismos tarados de termostatos y presostatos por seguridad y en un futuro como un sistema redundante de seguridad.



La idea es montar primero un sistema que tome datos de las variables que intervienen en el funcionamiento de la caldera, temperaturas de aire, de agua de entrada, de salida, de la caldera, de los circuitos, del exterior, etc.

Estado de las bombas de los circuitos de calefacción y A.C.S.
Nivel de combustible.
Horas de consumo.
Etc.
El sistema deberá funcionar primero como un data logger que registre todas la variables y el momento en que se toman las lecturas, posteriormente las analizaremos y veremos qué acciones y medidas se pueden emprender, así como definiremos la estrategia de control del sistema.




Primera parte: control del nivel de combustible.

Para esta función, había pensado en utilizar un sensor de distancia por ultrasonidos, de los que se usan en robótica, como este:

HC-SR04
según la hoja de características, mide desde 3cm a 5m y con una precisión de hasta 3mm, suficiente para mis propósitos, aunque me gustaría tener más precisión, ya veremos como manejamos esto en el software.

El tanque de combustible que tengo tiene una capacidad de 1000 litros, además lo tengo separado de la caldera en un trastero que está en el exterior, por lo que tienes que estar mirando a propósito el nivel cuando queda poco para no quedarte a cero mientras no vienen a reponer.
Para medir el nivel de combustible, medimos la distancia desde el borde la boca de llenado hasta la superficie del gasoil y aplicando la ecuación de la recta que pasa por dos puntos, asumiendo que el tanque fuese un prisma recto (que no lo es) tendremos una buena aproximación del nivel de combustible.

Para las pruebas, he utilizado un arduino, una pantalla LCD y el sensor comentado, el programa que os pongo a continuación y una librería NewPing escrita por Tim Eckel (Muchas Gracias), utilizo tambien otra librería estándar para pantallas LCD presente en la doc de Arduino.


/*
  LiquidCrystal Library - display() and noDisplay()
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD and uses the 
 display() and noDisplay() functions to turn on and off
 the display.
 
 The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe 
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.

 http://arduino.cc/en/Tutorial/LiquidCrystalDisplay

 */

// include the library code:
#include <LiquidCrystal.h>
#include <NewPing.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define TRIGGER_PIN  7  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     6  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 150 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(20, 4);
  // Print a message to the LCD.
  lcd.print("Prueba Sensor Nivel");
}

void loop() {
  
  lcd.setCursor(0, 1);
  lcd.print("Segundos: ");
  lcd.print(millis()/1000);
  lcd.print("   ");
  float uS = sonar.ping_median(20); // Send ping, get ping time in microseconds (uS).
  float cm = uS / 58;
  lcd.setCursor(0, 2);
  lcd.print("Ping: ");
  lcd.print(cm); // Convert ping time to distance in cm and print result (0 = outside set distance range)
  lcd.println("cm      ");
  float x = (7.5758 * cm);
  float litros = (1037.878 - x);
  lcd.setCursor(0, 3);
  lcd.print(litros);
  lcd.print(" litros  ");
  delay(10);
}

Una vez montado y programado, empecé a probar en la boca del tanque y me encontré que era muy inestable, la medida cambiaba aleatoriamente demasiado, excepto en alguna posición (sujetando con la mano el sensor en la boca del tanque), supuse que estaría recibiendo retornos y ecos de las paredes del tanque y pensé en pegar por la parte interior del tanque alguna manta de espuma que evite los rebotes del sonido.
Al final probé a tratar de limitar los ecos recibidos en el transductor receptor montando un tubo de espuma aislante de forma que sólo entrase el sonido que llegase en una dirección vertical y funcionó bastante bien.
 Este es el sensor que estaba utilizando en las pruebas, como se puede ver está sólo sujeto con un poco de cinta contra una tabla de madera que ponía sobre la boca del tanque.
Lo monté mientras estaba el tanque casi vacío porque quería probarlo mientras lo llenaban para ver como respondía, funcionó bien y aunque habría que hacer unas pruebas de llenado y vaciado para poder ajustar bien los puntos de linealización de la ecuación que relaciona la distancia hasta la superficie del gasoil con el volumen de gasoil, creo que para poder ver la variación de combustible por intervalo será suficiente aproximación.
Para el montaje definitivo aproveché el tapón del tanque (tiene tres) para sujetar el sensor, lo sujeté con dos tornillos y con un trozo de espuma por detrás para amortiguar posibles vibraciones que le pudieran llegar al sensor y actuar como elemento elástico para posibles ajustes de altura de los dos tornillos y así regular la inclinación del sensor.
El sensor con el aspecto definitivo y el tubo de aislante tipo Armaflex para evitar rebotes de eco parásitos.



 El tapón terminado con un conector para poder desconectar el cable para girar el tapón al roscar.
El cable discurre por detrás del tanque y atraviesa la pared hasta el cuarto donde está la caldera, donde estará el controlador y allí se lee desde el Arduino.

En la documentación de la librería NewPing, se habla de que aumenta la precisión de la lectura y además hay una función que hace una serie de medidas en un intervalo y entrega la media de ellas, esta es la que estoy utilizando en mi programa (la media de 20 lecturas) y voy a mantenerlo unos días en observación a ver que tal va.


Después de una semana probando el sensor, puedo decir que aunque no es muy preciso, me sirve perfectamente, para lo que yo lo quiero funciona razonablemente bien, no hay que olvidar que no cuesta ni tres euros y no podemos compararlo con los sistemas profesionales creados ex-profeso para esta aplicación.

Aun no tengo funcionando el data-logger pero tomando datos manualmente, se puede observar el siguiente resultado:


Como se puede ver, las medidas no son muy reales, no puede aumentar el volumen y no se qué le puede estar afectando al sensor, mientras no lo averigüe, habrá que suavizar la lectura por software mediante la aproximación polinómica que puse en el gráfico de excell.

Para comprobar el funcionamiento provisionalmente he montado la pantalla LCD sobre la fuente de alimentación y la puse detrás de la caldera, os pongo un par de fotos de las lecturas tomadas en días diferentes.

 9 de Enero.
13 de Enero.



16 comentarios:

  1. Brillante idea, yo también pensé en hacerlo, pero me freno el saber como le afectaria al radar los vapores propios del deposito de gasoil.

    ResponderEliminar
    Respuestas
    1. Muchas gracias, lleva funcionando perfectamente algo más de un año, he rellenado el tanque de nuevo y la medición fue bastante fiable todo el año.

      Eliminar
  2. Enhorabuena por el proyecto, es fabuloso, pero tengo un problema, cuando lo instalé funcionó perfectamente una semana mas o menos, pero después mandaba mediciones erróneas, revisé sensor, cables y arduino y todo ok, al volverlo a montar todo en su sitio funcionó perfectamente otra semana mas... cuando lo desmonté noté que el vapor del gasoil produjo como mucha humedad y quizá sea por eso, cual podría ser la solución.. o el problema..?? Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola, por si acaso no había visto el fenómeno que indicas, fui a mirar el sensor de nivel aunque no ha fallado ni una sóla vez y está perfecto, no hay ni una gota de condensación ni marcas de que la haya habido nunca.
      Además no hay nada de condensación en el tanque, tengo todas las tapas cerradas y no hay apenas intercambio de aire excepto un pequeño agujero que dejo para que "respire" y pueda entrar algo de aire para compensar el vacio que haría la bomba de gasoil.
      Si tienes condensación, yo intentaría saber qué es lo que condensa, si es agua, debes tener el tanque abierto y además sometido a cambios de temperatura.
      O bien tienes agua en el combustible (en el fondo ya que pesa más que el gasoil) pero aun así me extraña que no tengas otros problemas con el inyector del quemador o en el filtro de combustible.
      No se si te habré ayudado, pero lo que si está claro es que yo no tengo problemas de condensación y creo que no es normal tenerlos.
      Saludos.

      Eliminar
  3. Muchas gracias por la respuesta, quizá sea porque lo tengo completamente hermético, ya que pienso que no debe tener ningún agujero para que respire, observaré lo que me comentas, por si es agua, pero no tengo problemas de inyector ni quemador.. lo miraré y te cuento.
    Un saludo y muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola, estoy pensando que sí lo tienes totalmente hermético, es posible que al ir bajando el nivel de gasoil, baje la presión del aire en el tanque, con lo cual la presión de vapor del combustible tsmbuen disminuirá.
      Sí la presión atmosférica baja (dentro ddl tanque) la presión de vapor superara a la del aire en el tanque y se evaporará combustible que se puede condensar en las paredes.
      Yo probaría a dejar un mínimo respiradero para que este siempre a presión atmosférica.
      Ya me dirás porque es todo una suposición.
      Saludos.

      Eliminar
    2. Bien, despues de éste tiempo, todavia me funciona, es posible que fuera el estar totalmente hermético, le he quitado una goma al tapón y de momento solucionado, muchisimas gracias... Ahora estoy intentando que me transmita la medición por un NRF24L01 a casa, pero no consigo que me mande los datos..
      Un saludo y muchas gracias.

      Eliminar
    3. Me alegro, yo hice una foto del sensor que tengo en el tanque por si acaso y se ve perfecto, como el primer día despues de un año y algo.
      Saudos.

      Eliminar
  4. Ok, le he quitado una goma que tiene el tapón y ahora entra algo de aire, lo pruebo unos dias a ver que tal..
    Muchas gracias, un saludo.

    ResponderEliminar
  5. Una pregunta... llevo un tiempo pensando en hacer algo así (quiero monitorizar todo tipo de cosas en casa), pero me asalta la duda... Es seguro? Me da mucho reparo poner una cosa eléctrica dentro del tapón del depósito de la caldera. Y si hay una pequeña chispa?

    ResponderEliminar
  6. Hola,
    hace tres años que está instalado y no he notado ningún problema, es más, si yo creyera que hay un mínimo riesgo, no lo habría instalado.
    Esto es una opinión personal y no voy a ser yo el que asegure que es totalmente seguro, pero yo también tengo la caldera dentro de casa y no me gustaría sufrir ningún problema con ella o con el tanque de gasoil.
    Dicho esto:
    El sensor es un elemento electrónico de estado sólido, no hay partes móviles ni alta tensión (funciona a 5V).
    Si prefieres tenerlo fuera del tanque, puedes hacer unos agujeros en el tapón de forma que sólo se asomen por estos agujeros los transductores de ultrasonidos, dejando el circuito fuera.
    En cualquier caso, gracias por el interés, espero saber de tus montajes.

    ResponderEliminar
    Respuestas
    1. Por cierto, es el mismo sensor y el mismo cableado que tengo conectado en la nueva versión
      https://inventosychapuzas.blogspot.com.es/2015/12/caldera-wifi.html

      Saludos.

      Eliminar
    2. Por cierto, es el mismo sensor y el mismo cableado que tengo conectado en la nueva versión
      https://inventosychapuzas.blogspot.com.es/2015/12/caldera-wifi.html

      Saludos.

      Eliminar
    3. Me encanta :) De momento probaré con un sensor de distancia en una raspberry pi que no utilizo, y luego ya trataré de optimizar el sistema con arduino antes de montarlo definitivamente.

      Eliminar
  7. Genial, había tenido la misma idea pero me preocupaba la corrosión del sensor y el funcionamiento al estar expuesto a una atmósfera de hidrocarburos, ya que no parece muy protegido para ello. Pero veo que por lo menos un año sobrevive, por lo que creo que me has dado el empujón que necesitaba para montar el invento.

    ResponderEliminar
  8. hola excelente proyecto estoy tratando de hacer lo mismo pero con un flotador o boya en el tanque, en ves de usar un sensor ultrasonido quiero usar una resistencia regulable, puedes indicarme como modificar el código para que funcione? talleradrianpower@gmail.com

    ResponderEliminar