Si aún no eres usuario, puedes crear una cuenta o entrar
Control electrónico de caldera de leña con Arduino

Os quiero presentar el proyecto que me ha enviado Xoel Molejón desde Gijón, Asturias (Galicia rocks!). El amigo Xoel es el feliz proprietario de una caldera de combustible sólido Roca modelo P30. Su funcionamiento es sencillo: La llenas de leña, enciendes, y calienta el agua de los radiadores igual que lo haría una a gasoil, propano o gas ciudad. Para su regulación, lleva una palanca manual en el tiro y una portilla con un termostato mecánico en la admisión de aire. Esta portilla actúa dependiendo de la temperatura del agua que hay en la caldera.

Aparentemente, la idea es buena, aunque presenta carencias y defectos importantes que resultan realmente desesperantes en el uso diario y Xoel quiso ponerle fin y optimizar el rendimiendo de la caldera utilizando un viejo conocido: Arduino

No os perdais la historia completa, fotos y video del proyecto de Xoel que no tiene desperdicio!





El problema

Durante la fase de calentamiento, que dura aproximadamente una hora, no hay forma de regular nada, ya que el agua todavía está por debajo de la temperatura objetivo, la entrada de aire está abierta a tope y gran parte de la energía se escapa por la chimenea (de hecho, se pone al rojo vivo, con la luz apagada se ilumina). Además, por la ubicación del termostato mecánico, las lecturas de temperatura no son reales, ya que la zona donde está colocado se sobrecalienta con demasiada facilidad, de forma que en ocasiones ahogaba el fuego cuando no debía.

Otras veces y dependiendo del estado de la leña (si está algo húmeda), se produce un enfriamiento de los gases de escape  en la chimenea, lo que impide el tiro natural, de forma que no hay forma de conseguir calor por falta de oxígeno durante la combustión. La solución era dar aire con un fuelle. Posteriormente se me ocurrió utilizar un secador de pelo.

La solución

En este punto, y aburrido de soplar durante las frías tardes de invierno, descubrí la plataforma Arduino y vi la luz. El tema de programación no era desconocido, pero sí cantidad de piezas nuevas, como servos, relés, sensores de temperatura, etc. Como primer proyecto con arduino era ambicioso y complejo.

Dos sensores de temperatura (LM335A) acoplados a las tuberías miden la temperatura de salida y retorno del agua, para mantener estable el calor en los radiadores; y un tercer sensor (concretamente un termopar tipo K) colocado en la chimenea con capacidad hasta 800ºC, controla constantemente la salida de gases para evitar que se desperdicie calor. El objetivo es mantenerlo a unos 350 - 400ºC en la fase de calentamiento, y 250 - 300 cuando tenemos el agua ya caliente.

Para poder leer el termopar con Arduino, utilicé un AD595 en combinación con un divisor de tensión para obtener 5mV / ºC
Instalé, además, dos sensores en la puerta, con la intención de abrir el tiro a la vez que las puertas, evitando que nos ahumemos como chorizos cuando abrimos para cargar leña.
Como actuadores, se colocan un par de servos: Uno mueve el tiro y el otro la portilla de entrada de aire, y un par de relés que actúan sobre un secador de pelo viejo, para dar aire si fuera necesario.
Aquí aparecieron un par de inconvenientes:
Las piezas que abren y cierran el tiro son de fundición y por lo tanto muy pesadas. A la velocidad que se mueve un servo en pocos movimientos reventaba los engranajes (de hecho me cargué uno con sólo tres movimientos), así que hubo que programar aceleración y desaceleración para cada movimiento, incluso para evitar ruidos a altas horas de la madrugada. Además, el servo tenía que estar constantemente haciendo fuerza para soportar el peso de la trampilla. Esto se solucionó con un muelle.
El otro problema, más grave, fue debido a las corrientes inducidas por el motor del secador de pelo. En las conexiones y desconexiones pegaba tal subida que en ocasiones saltaba el relé y llegaba a la placa. La solución fue colocar  un circuito intermedio con otros dos relés, y enchufar el secador en otra toma de corriente, aislada del arduino.
En la toma de aire, se coloca un pequeño cajón que contiene el secador y una nueva trampilla que abre y cierra mediante un servo.
Y ya puestos, un par de botones de control, sensores de puerta abierta, una pantalla LCD y una caja de almendras de chocolate nunca está de mas...

Programación

En cuanto a la programación, el programa sigue el siguiente orden:
1.- Toma de datos
2.- Comprobación de puerta abierta  --> Abrir tiro (Evita que salgan humos cuando se carga leña)
3.- Si temperatura de la chimenea < 60º (fuego apagado)  --> Apagar todo y esperar 60 segundos
4.- Cálculo de la potencia requerida 
5.- Visualización en pantalla
6.- Movimiento de servos según potencia requerida
7.- Encender / apagar secador
8.- Espera 2 segundos.
Como nota interesante, hay que fijarse en la curiosa forma de leer las entradas analógicas para conseguir medir con bastante exactitud décimas de grado con un LM335. Cada termómetro es leído 640 veces.

Video

En la tienda

Arduino UNO Sensor de temperatura LM335A Relé 5V SPDT  Pantalla LCD 20x4 caracteres - Negro/Verde


Comparte esto con tus amigos!

Comentarios:


Miguel ngel de Frutos Carro Miguel ngel de Frutos Carro es un colaborador!
Enviado el 22/06/2011 (11:21)
Qué GRANDE!! Buen trabajo, me ha gustado muchísimo!... (y Puxa Asturies!)

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 22/06/2011 (18:23)
La verdad es que es impresionante. Y la de pasta que se ha ahorrado! :)

Galicia powah! :D

Armando Perez
Enviado el 24/06/2011 (23:18)
El problema del RELE se soluciona usando un diodo en antiparalelo con el RELE de esta forma evitas que la corriente inversa inducida por la bobina del RELE se retorne a la placa y pueda dañar otras cosas, lo mismo puedes usar para el motor, ademas de un capacitor cerámico de 1nf.

Xoel Molejón Otero
Enviado el 26/06/2011 (09:51)
Ambas cosas estaban colocadas, mientras el motor de 220 estaba desconectado, no daba problemas. Sólo cuando conectaba el motor al circuito ocurría esto, lo que me hizo pensar que lo que llegaba a la placa no eran las corrientes inducidas de la bobina del relé, sino de la bobina del motor.

Armando Perez
Enviado el 26/06/2011 (23:47)
Se aplica lo mismo que con el RELE hay que colocar un DIODO en antiparalelo al motor, para evitar que la corriente inducida de este se pase por el circuito, y si el problema existe cuando se enciende el motor se necesita un pequeño banco de capacitores con unos dos capacitores electroliticos (más economicos, aunque son mejor los de tantalio o los de poliester), de unos 470uF cada uno deberia de controlar los sobre picos, porque más que el motor genere corriente inducida genera picos en la señal electrica, además de que el arranque de cualquier motor consume bastante corriente y genera perdidas y ruidos en la linea ;)

En lo que te pueda ayudar para mejorar tu sistema cuantas conmigo.

Atte: Ing. J. Armando Pérez R.
Ingeniero en Mecatrónica.

Brais Vázquez
Enviado el 27/06/2011 (11:21)
Un diodo en antiparalelo con un motor de alterna?? me da que no va a funcionar... En alterna se emplean redes snubber y no diodos en antiparalelo pues en ese caso habria un cortocircuito en el semiciclo negativo. En cambio lo del condensador si es una buena idea.
Ademas, algo sencillo que te puede servir, es poner una simple ferrita en la alimentacion de la electronica, a mi siempre me han dado excelentes resultados.
un saludo!



Xoel Molejón Otero
Enviado el 27/06/2011 (18:18)
Estoy de acuerdo contigo, Brais. De hecho, la velocidad lenta se hace con un diodo en serie al motor. Usé el que ya traía el secador. Lo de la ferrita no se me ocurrió...
De todas formas el problema ya se solventó colocando dos relés en serie.

Armando Perez
Enviado el 27/06/2011 (23:28)
Ha cierto el motor es de alterna je je je je descuido mio, es que estaba revisando algunas cosas de un motor de CD y me quede con la idea del motor de CD, pero lo de los capacitores eso si funciona, igual lo del inductor es buena sugerencia, ahora que si lo tienes solucionado con Reles pues está bien, pero no creo que sea lo mejor ya que estos se irán desgastando y si el arco eléctrico que se genere es considerable, pues terminan por dejar de funcionar en poco tiempo, y más cuando se colocan reles comunes y no de tipo industrial aptos para la conexión y desconexión y pues ya no se llaman reles se llaman contactores.

Pero bueno no se de que tipo de RELE estés usando, pero si son de los comunes y el uso es elevado se terminaran por desgastar en poco tiempo, si el uso no es muy continuo y esos reles son más de tipo industrial entonces si te puede durar mucho tiempo y más aplicándoles su mantenimiento

Enrique Gómez Rodríguez
Enviado el 01/07/2011 (00:01)
Fantastico proyecto, una duda ¿como está hecho el panel en el que esta impreso para lo que sirve cada pulsador o interruptor?¿de que material esta hecho?
Muchas gracias.

Xoel Molejón Otero
Enviado el 04/07/2011 (22:49)
Pues se trata de un simple folio plastificado. Los pulsadores están debajo, de esta forma son funcionales sin perder la protección del plástico.
Eso si, hay que acordarse de recortar el agujero de la pantalla antes de plastificarlo ;)

Miguel Valdebenito Rojas
Enviado el 25/07/2011 (01:48)
Podrias compartir el codigo de programacion?


Joseluis Jaramillo Mujica
Enviado el 24/08/2011 (16:40)
Xoel impresionante post felicitaciones, hay items muy interesantes que me gustaria discutir, seria posible que compartieras el codigo, me gustaria saber como resolviste lo de al encoder rotatory y la seleccion de temepratura..

Xoel Molejón Otero
Enviado el 28/08/2011 (00:25)
José Luis, no se trata de un encoder, sino de un simple potenciómetro colocado en una de las entradas analógicas. Para leerlo, basta con leer la entrada:


modo = map (analogRead (pinProg), 0, 1023, 0, 8);
lcd.setCursor(0, 1);
if (modo == 8) modo = 7;
if (modo == 0) modo = 1;
if (modo == 1) lcd.print("1 TODO AUTO ");
if (modo == 2) lcd.print("2 TIRO MANUAL ");
if (modo == 3) lcd.print("3 AUTO SIN TURB.");
if (modo == 4) lcd.print("4 MAN. SIN TURB.");
if (modo == 5) lcd.print("5 SOLO DATOS ");
if (modo == 6) lcd.print("6 SOLO TURBINA ");
if (modo == 7) lcd.print("7 TODO MANUAL ");

Joseluis Jaramillo Mujica
Enviado el 01/09/2011 (07:46)
y la ultima solicitud espero no ser moleto, y tiene que ver respecto al AD595,ya que tengo un proyecto usando este amplificador, tratando de sensar mas de 1200 grados con solo 10 bist de resolucion, y para ponerle un poco mas de interes quiero usar un trasmisor xbee, pero solo puedo usar maximo por pin 1.2v, alguna sugerencia?? me explicas como hiciste con el ad595


Xoel Molejón Otero
Enviado el 01/09/2011 (17:33)
Pues bien, fue sencillo. El AD595 saca 10mV por cada grado centígrado, partiendo de 0ºC, con los que nos da 0V, mas o menos (Tienes tablas más exactas en el datasheet)
Por tanto, a 1200ºC, tendrás unos 12V de tensión.
Con estos datos, si tu quieres un máximo de 1.2V, no tienes más que meter un divisor de voltaje (En este caso X/10) Ahora, si vas a medir con Arduino, esto te dará una resolución de más o menos cinco grados arriba o abajo.
Además, lo más probable es que te salgan valores muy poco estables debido al ruido eléctrico.

Lo que yo hice, fue medir 640 veces el valor y hacer la media. Operando con cuidado, se obtienen resultados sorprendentes:

void readTemp()
{
for (int lecturaTEMP = 1 ; lecturaTEMP < 5 ; lecturaTEMP++) {

for (int lecturaTemp = 1 ; lecturaTemp < 5 ; lecturaTemp++) {

for (int lecturatemp = 1 ; lecturatemp < 5 ; lecturatemp++) {

temp = analogRead (lectura);
temp1 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp2 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp3 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp4 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp5 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp6 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp7 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp8 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp9 = (map (temp, 0, 1023, 0, 5000)) - 2730;
temp = analogRead (lectura);
temp10 = (map (temp, 0, 1023, 0, 5000)) - 2730;

if (lecturatemp == 1) tempA = (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8+temp9+temp10) / 10;
if (lecturatemp == 2) tempB = (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8+temp9+temp10) / 10;
if (lecturatemp == 3) tempC = (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8+temp9+temp10) / 10;
if (lecturatemp == 4) tempD = (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8+temp9+temp10) / 10;
}
if (lecturaTemp == 1) Temp1 = (tempA + tempB + tempC + tempD)/4;
if (lecturaTemp == 2) Temp2 = (tempA + tempB + tempC + tempD)/4;
if (lecturaTemp == 3) Temp3 = (tempA + tempB + tempC + tempD)/4;
if (lecturaTemp == 4) Temp4 = (tempA + tempB + tempC + tempD)/4;
}
if (lecturaTEMP == 1) TEMP1 = (Temp1 + Temp2 + Temp3 + Temp4) / 4;
if (lecturaTEMP == 2) TEMP2 = (Temp1 + Temp2 + Temp3 + Temp4) / 4;
if (lecturaTEMP == 3) TEMP3 = (Temp1 + Temp2 + Temp3 + Temp4) / 4;
if (lecturaTEMP == 4) TEMP4 = (Temp1 + Temp2 + Temp3 + Temp4) / 4;
}
temp = (TEMP1 + TEMP2 + TEMP3 + TEMP4) / 4;
}

Si te fijas, este script está hecho para leer con el chip LM335A, por eso resta 2730 (273 grados en décimas de grado)
Para leer con el AD595, habrá que quitar esta resta, o sumarlo posteriormente.
Así es como operé con el LM335A:


lectura = pinIda;
readTemp();
temp = temp - 4; //Calibración del termómetro por software
if(turb == 1) temp = temp - 2; //Compensación de caida de tension con la turbina en funcionamiento
if(turb == 2) temp = temp - 5; //Compensación de la caida de tension con la turbina a plena potencia
TempIda = temp / 10;
TempIdaDecimal = temp - (10 * TempIda);


En estos momentos
TempIda es la parte entera de la temperatura que hemos leído
TempIdaDecimal es el decimal.



Xoel Molejón Otero
Enviado el 01/09/2011 (17:43)
Por cierto, ya sé que no es una solución muy elegante, pero para lo que tenía que hacer funciona a la perfección.

Los cambios en este proyecto se producen de forma
t a a a a n l e e e n t a a a
que pude permitirme el lujo de tener el arduino un segundo entero leyendo el mismo termómetro una y otra vez. Obviamente en ese tiempo podemos tener un quadcopter en el suelo, o estampado contra el techo, o contra el que lo intenta manejar ;)

Joseluis Jaramillo Mujica
Enviado el 08/09/2011 (23:06)
Xoel interesante adecuacion, elegante o no lo importante es caer siempre de pie, como los gatos. Muchas gracias por tu aporte. Lo mio es trasmitir via xbee la temperatura de 4 termocuplas a una estacion. pues bien, dividi la tension x/10 pero como lo has dicho los 12v son necesarios para medir temperaturas de mas de 1100 grados. pues bien la idea de los xbee el la coneccion inhalambrica asi que una bateria de Litio o pila seca seria bastante engorrosa para alimentar el AD595. Y como el señor google lo sabe todo, encontre los MAX31855 que trabajando a 3.3 y permiten medir hasta 1800 grados, 14 Bits, y coneccion SPI, usa la misma libreria del MAX6675. Ademas de caerme de perlas porque los xbee trabajan con tarjeta regulada a 3.3 entonces ya se donde sacar el voltaje para alimentar, en mi caso que uso Arduino pro que no tiene 3.3v. Mi inconveniente es imprimir en la LCD via trasmision serial que Xbee trasmite que, ya he jugado con 2, pero vamos a ver como sale con 4, y aunque aun, tengo lios vamos a ver como salen las cosas, contanto que mi profesion es la Arquitectura jeje

Pedro Duran Galan
Enviado el 30/08/2012 (20:02)
Para empezar, he trabajado 20 años de calefactor , y disfruto en mi casa de una caldera de leña Buderus más grande que esa P30 que funciona semiautomática , sin electrónica sujeta a problemas ni nada de nada . ¿ Como ?

Con un baso de compensación , funcionando a termosifón conectado directamente a la caldera , Ese baso debe de tener una capacidad de agua el doble que la que hace la caldera , en su interior debe tener una re-circulaciones entre idas y retornos , de manera que consigamos rápidamente, su temperatura de régimen. A ese baso conectamos, la bomba o bombas circuladoras governadas por un termostado instalado en la vivienda.

La caldera se llena de leña hasta arriba , situando la más densa en la parte inferior si dejar apenas espacios , a modo de ladrillos si puede ser , para terminar arriba con unas simples tablas, y encima de todo pegando ya con el techo unos periódicos o revistas .

Se abre a tope el tiro inferior , y la mía en concreto tiene una mirilla en la parte superior bastante amplia esa también .A través de esa mirilla se prende con un soplete o similar . Los periódicos arderán muy rápidamente calentando el tiro natural de la chimenea , una vez consumido se convertirán en el freno que impida arder excesivamente deprisa a la leña y tablas inferiores , cuando esto ocurra se puede dejar el tiro inferior con una entrada de aire reducida al espesor de una hoja de sierra , . El fuego irá lentamente muy lentamente y al no empezar de abajo hacia arriba nunca se desprenderá de la caldera , poniendo al rojo el tubo de la chimenea , cuando la caldera esté a 80 grados ya podemos cerrar la ventanilla de la puerta superior y la posibilidad de darle paso al termostato ambiente , el tiempo desde que comenzó todo viene a ser 30 minutos ........ A esas alturas tenemos nuestra caldera cargada a tope de leña funcionando lentamente , sin hacer humo al abrir las puertas y con la posibilidad de olvidarnos a dentro de 4 horas por lo menos . Si por casualidad el termostato cierra y para el circulador no pasa nada el doble de agua encerrada en el baso de compensación adsorveran ese sofoco pasajero .

NI que decir tiene que la instalación debe disponer de un baso de expansión del tamaño adecuado a la gran cantidad de agua que tenemos en movimiento así como una válvula de seguridad por lo menos de 3/4 ", y ademas de estar todo correctamente aislado .

Para pasar la noche nada como un último tronco dependiendo de la futura demanda y cerrar totalmente la trampilla , con un pequeño taladro de unos 8 mm practicado en la tranpilla inferior nos vale para alimentar de oxigeno " el brasero " en que ha convertido toda la leña .

Pedro

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 31/08/2012 (10:09)
Impresionante explicación Pedro, se nota la experiencia! :)

Luis Asensio
Enviado el 30/11/2013 (23:43)
Se que esto es antiguo, pero podrias mandarme el esquema y el codigo por mail? o publicarlo aqui.
Te lo agradeceria mucho, ya que tengo una caldera de leña bastante antigua y me gustaria apañarla para no tener que estar todo el dia pendiente de ella.
Muchas gracias.
supermaguila@gmail.com

Mr Zuchero
Enviado el 12/09/2014 (15:34)
Excelente trabajo, camarada¡.


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:


© BricoGeek.com 2005-2014

Demuestra lo que sabes hacer!