viernes, 25 de marzo de 2016

Refrigerador con Arduino UNO y dos sondas DS18B20


Llevo tiempo apartado de este blog porque la obligación está por encima de la devoción. De todos modos, espero compensar ese retraso con la entrega de esta nueva entrada, fruto de la colaboración entre un buen amigo y especialista de frío industrial y yo.
Con un shield de Arduino, el LCD Keypad Shield, un módulo de relés y dos sondas digitales de temperatura DS18B20, controlamos el funcionamiento de un refrigerador, cuyo software nos permitirá controlar su punto de trabajo y producir el desescarche automático del evaporador. Modificando simplemente unos parámetros podremos adaptar el software para trabajar como congelador o refrigerador, ajustando la temperatura desde -20 ºC hasta 15 ºC. El método para deshacernos de la escarcha que se forma en el serpentín del evaporador en un circuito de enfriamiento se denomina desescarche, y el que utilizaremos es el de calentamiento con una resistencia eléctrica. Una sonda detectara la presencia de una capa de hielo en el serpentín del evaporador, que actúa como aislante dificultando el paso del aire a través de los tubos, reduciendo así el coeficiente de transferencia de calor; en ese momento se parará el compresor y entrará en funcionamiento una resistencia eléctrica que calentará el evaporador hasta que la capa de hielo desaparezca, retomando luego el sistema el funcionamiento normal del refrigerador.
En la siguiente imagen os muestro el evaporador que usamos en nuestro frigorífico experimental:


En la siguiente imagen se muestra la primera prueba en el taller del frigorífico experimental controlado por Arduino. Todo un éxito.


Esquemáticamente, el circuito es como sigue:



En el siguiente vídeo podéis ver como trabaja el software sobre Arduino  UNO y el LCD Keypad Shield (Música de Jon Maurer: Burning Bright. Gracias Jon por compartir. Jon thanks for sharing)




En el vídeo observamos que inicialmente el sistema activa el desescarche, luego de calentar el evaporador vuelve al funcionamiento normal. Aquí trabaja con parámetros de prueba con temperatura de ambiente, así pude evaluar que funcionaba correctamente el software final sin tener que recurrir al taller y conectarlo al sistema de frío creado por mi amigo Jero. Intentaré describir los elementos importantes del software, pero ya con parámetros razonables para trabajar con un sistema de frío doméstico.

Comentaré de pasada el programa que esbocé para controlar el sistema. Sé que es un poco complicado para neófitos, pero no tengo mucho tiempo para los detalles, y si se quiere aprender tendrán que currárselo analizando "a pelo" el código que les doy.
En la imagen siguiente muestro el código con el que creé el carácter º(Grado) para visualizarlo en el display, ya que directamente no se puede con el juego de caracteres que posee; cada vez que arranca el sistema lo guarda en un lugar de la memoria del display, y luego lo llamamos para que se imprima en el mismo.



La botonera del LCD Keypad Shield está conectada a la entrada analógica de Arduino A0 a través de un divisor resistivo, y según el umbral de tensión que aplicamos a la entrada analógica al pulsar una tecla, el programa selecciona la acción con la estructura de control Switch Case según el valor que guarda en la variable "tecla" de la entrada A0, asignado un número a la variable "caso", activando así una acción para cada tecla. ¿Fácil no?


En el apartado "default:" de la estructura de control Switch Case se encierra el meollo principal. Ahí se envía al display la información oportuna de la temperatura, se activa y desactiva el compresor, se llama al subprograma de desescarche, se imprime el asterisco en el display durante el ciclo de histéresis  de enfriamiento. Les recuerdo que el módulo de relés HL-54S actúa con lógica inversa, es decir, se activa a nivel bajo y se desactiva a nivel alto en sus entradas.

El subprograma de control de temperatura y el de desescarche creo que están claros con los comentarios contenidos. Para cualquier aclaración agradecería lo hicieran a través de un comentario en este blog.

El código del programa para Arduino UNO (.ino) lo podéis bajar desde aquí.

La librería Dallas de control de temperatura la podéis bajar en zip desde aquí.

La última versión del protocolo de un hilo de Dallas Semiconductor (Dallas Semiconductor's 1-Wire Protocol) la podéis bajar desde aquí.

En el siguiente vídeo podemos ver las primeras pruebas en el taller.

15 comentarios:

  1. Eduardo Arbetman Argentina22 de enero de 2018, 14:54

    No logro ver cómo arranca el desescarchador. En algunos equipos es por tiempo ( 6 u 8 horas ). Yo quiere experimentar con un sensor optico reflectivo activado por la escarcha. Me agustaria tu comentario (y sugerencia tambien )

    ResponderEliminar
    Respuestas
    1. Hola Eduardo. Antes de nada, agradecerte el interés mostrado por el contenido de este blog. En fin, casi dos años pasaron ya de esta experiencia, y tuve que echar mano de algo más que la memoria para poder contestarte. El desescarche trata de evitar que se acumule hielo grueso en los tubos y aletas del evaporador. Los cristales de escarcha no son preocupantes, porque actúan como una extensión de la superficie mejorando el intercambio de calor, pero el problema surge cuando hay un montón de hielo que no favorece el funcionamiento del sistema. En mi caso, arranca el desescarche cuando en las aletas hay -5ºC (hielo), activando una pequeña resistencia para derretir el hielo, y cuando llega a 5ºC la temperatura de las aletas y tubos del evaporador, toma el control de nuevo el sistema, trabajando como normalmente lo haría un refrigerador. Un sistema automático de desescarche muy simple es un temporizador, de tal modo que se para el sistema periódicamente durante un momento para evitar que se produzca el hielo, y luego se vuelve a activar. El sensor óptico puede funcionar activando un temporizador que tenga asignado un tiempo suficiente para derretir el hielo, y luego activar de nuevo el sistema, pienso yo. De todos modos, en Internet puedes encontrar un montón de ideas interesantes sobre esto, que pueden iluminarte para realizar un sistema automático para controlar el desescarche. Muchas gracias. Un saludo

      Eliminar
  2. Hola Nacho! creo que algo mal está en el esquema, puede ser? no sale de la primer pantalla a menos que toque las teclas de reset y select a la vez. Creo que los sensores están mal conectados. Gracias!

    ResponderEliminar
    Respuestas
    1. Hola Corelc. Gracias por interesarte por este blog. No, lo que te está pasando es que debido a la importante tolerancia de los resistores empleados en el divisor del teclado, los valores obtenidos en la entrada A0 pueden variar. Mira el siguiente artículo de este blog para verificarlo, por eso tienes que pulsar varias teclas para lograr el valor correspondiente.
      https://cotidianaplace.blogspot.com.es/2016/01/verificando-los-valores-del-teclado-del.html
      Un saludo

      Eliminar
  3. hola, a mi refrigerador se le quemo la tarjeta por un rayo hace un año. y un amigo me sujirio ponle un arduino y eso hice. pero no he podido controlar el sistema de deshielo. como puedes notar no soy mu ducho pero si emprendedor. puse el refrigerador a trabajar en nevera 4 a 7 cc y en congelador -1 a 3 para evitar la acumulacion de hielo. mi pregunta puedo usar tu programa de control en el arduino leonardo. gracias de ante mano mi correo jemrpmila@gmail.com

    ResponderEliminar
    Respuestas
    1. Hola Juan. Creo que es posible, pero deberías verificar que las entradas y salidas tengan una adecuada correspondencia con el programa indicado para el Arduino UNO. En fin, quizás solo probando sabrás si te sirve tal como está. De todos modos, puedes adaptarlo o crear uno nuevo basándote en él. Muchas gracias por interesarte por este blog. Un saludo

      Eliminar
  4. Hola Nacho, excelente proyecto, tendrás un diagrama de conexión completo para subir o mandarme. Muchas graciass

    ResponderEliminar
    Respuestas
    1. Hola Alan. Muchas gracias por interesarte por este blog. La verdad, esta entrada tiene poco hardware, y lo poco que tiene dispones detalles del mismo en la siguiente entrada de este propio blog: https://cotidianaplace.blogspot.com/2016/02/ds18b20-con-el-monitor-serie-de-arduino.html
      Sólo tiene un Arduino UNO, dos sondas DS18B20, el módulo de relés, y todo está vinculado a una entrada o salida del Arduino UNO. Las dos sondas comparten la resistencia de 4K7 Pull-Up en su patilla central DATA, tal como puedes apreciar en el cuadro esquemático de esta entrada y de la entrada sugerida que mires, en ésta igual se aprecia con más detalle. La resistencia de 4K7 será menor si la distancia del cable de la sonda supera los 10m, que en mi caso no fue así. Los cables de las sondas suelen ser el color rojo para el positivo, el negro para el negativo y el amarillo el DATA. Las entradas y salidas están definidas en el software, y coinciden con la serigrafía de la placa. El módulo de relés tiene definido si la salida se invierte o no, y puedes usar cualquiera; ya incluye el transistor amplificador de corriente, y con saber a que punto de la placa Arduino va ya funciona. Espero haber podido ayudarte. Muchas gracias. Un saludo

      Eliminar
    2. Muchas gracias Nacho por tu predisposición y rapida respuesta, había bajado otro código cualquiera y tenia un montón de cosas por eso te pedí el esquemático, después baje bien tu codigo y me di cuenta. Lo modifique para hacer una estufa de laboratorio con una heladera exhibidora vertical, usando un solo sensor y dos relees para prender frio o calor (resistencia con forzador), mas o menos como lo tuyo pero pudiendo setear temperatura minima y máxima de trabajo. Lo que no entendí es en un comentario que pusieron que el pin de la sonda deber ser menor al del rele pero bueno me funciono igual. al menos en las pruebas. te agradezco nuevamente

      Eliminar
    3. Gracias a ti, Alan. Tal como te lo muestro me funcionó correctamente, y no importa mucho que en alguna ocasión los comentarios no estén bien fundados. Estupenda idea la tuya. Espero que en cualquier otra momento puedas encontrar en este blog inspiración para otro proyecto. Muchas gracias. Saludos

      Eliminar
  5. Hola Nacho obvio que agradezco que hayas realizado este proyecto, ya que aunque haya parecido un proyecto más es único ya que nadie a emprendido en esto, dicho esto mi idea es reemplazar una placa electrónica de una heladera no frost por un arduino, una heladera no frost esta compuesta por dos compartimientos el congelador y la nevera propiamente dicha, en la primera esta el evaporador que es donde se produce el frío y esta entre °-15 a °-20 y el segundo compartimiento a °4C y cuyo frío se produce por el aire que es desplazodo desde el compartimiento del freezer por un forzador hacia el mimo por unos conductos.
    Por lo cual para controlar los dos compartimiento habría que controlar ambas temperaturas y el descongelamiento, desescarche o defrost se podría usar un temporizador de 8 horas, o usar el sistema que vos utilizas, la pregunta es la siguiente vos has puesto ambos sensores en la nevera, una a °-18 y la otra al serpentin para que realice el descongelamiento a °-5, pero como hace ese sensor para activarse si en su medio tenes °-18C??? Digo, vos hiciste la prueba de campo en donde la nevera arranca y da parametros de temperatura, pero verificaste si el defrost se hacia correctamente?? Me gustaría conocer tu parecer.

    ResponderEliminar
    Respuestas
    1. Hola Dario:
      Gracias por la lectura de este blog. Como puedes apreciar, el trabajo es una maqueta que usamos como prototipo para probar, dentro de lo posible, un sistema de enfriamiento con Arduino UNO. El desescarche es una de las cosas que no pudimos probar como queríamos. De todos modos, tradicionalmente se sigue usando el desescarche temporizado, pero usando un sensor de temperatura, como en nuestro caso, suele ser mejor, porque permite el desescarche en un momento oportuno, cuando la sonda detecta un enfriamiento mayor al de trabajo porque la capa de hielo formada en el serpentín actúa como aislante; así, por ejemplo y de forma empírica, cuando la temperatura en el evaporador es mucho más fría de lo que sería normal, se activaría una resistencia para eliminar el hielo acumulado, y es así como en esta maqueta lo establecimos. Quizás, en una nevera normal requiera un repaso plantearte un sistema con Arduino como el que hicimos, ya que no sé cuál sería la temperatura adecuada en el que establecer cuando realizar el desescarche. Puedes añadir más sondas, ya que van conectadas por un bus paralelo, y modificando el programa quizás podrías lograr lo que te propones.
      Muchas gracias.
      Un saludo

      Eliminar
  6. hola nacho, me encanta porque andaba de hace tiempo hacer algo asi. mi idea era mas que nada controlar esto pero atraves del compresor, es decir, alcanza 0 grados y se apaga mi compresor, entonces en lugar de usar un termostato el que usualmente trae, usarlo con un relevador y arduino y una sonda, al detectar la temperatura, que este corte el trabajo del compresor, que opinas, un saludo

    ResponderEliminar
    Respuestas
    1. Hola. Gracias por interesarte por este blog. Sobre lo que me comentas, todo es posible siempre que al final obtengas el resultado que realmente quieres. Es una versión más simple que la que propongo, pero si al final refrigera bien y no se acumula demasiado hielo en el serpentín del evaporador que impida que enfríe, todo bien. Gracias. Un saludo

      Eliminar
  7. hola, me gusta mucho este proyecto porque de hace tiempo se me habia ocurrido algo parecido, mi idea era mas enfocada al termostato que trae adentro, desconectar este y usar un relevador que abra y cierre el paso con un arduino y una sonda que tome la temperatura que abra o corte segun la temperatura configurada, que opinas?

    ResponderEliminar