PIC Adicto

22 agosto 2009

Controlado la temperatura con DS18B20

Archivado en: 16F,Código CCS,Simulación — picadicto @ 15:59
Tags: , , ,

ds1820Para quiénes necesiten mantener la temperatura dentro un rango determinado, este post es el indicado. Por medio de un DS18B20 de Dallas (Maxim) podemos medir temperaturas desde -55 ºC a 100ºC con una resolución seleccionable de 9 a 12 bits. En este ejemplo se muestra la temperatura actual en un display inteligente de LCD donde la idea es fijar la temperatura en 27ºC con una ventana de histéresis térmica de 1ºC usando un 16F628A

El protocolo de comunicación entre el PIC y el DS18B20 se hace solamente utilizando un terminal del mismo, se llama 1-Wire interface y hay muchísimos dispositivos que lo utilizan, por lo que el código servirá para cualquiera de ellos.

Como se ve en la imagen de arriba, el DS18B20 viene en un encapsulado TO-92 y es muy sencillo de colocar en el elemento al cual queremos medirle la temperatura. En el circuito se puede ver que no puse ningún dispositivo calefactor, sino un led que enciende emulando que hay un circuito entregando calor en ese momento.

La ventana de histéresis térmica es de 1ºC, con lo cual mientras la temperatura medida esté dentro delñ rango [26..28]ºC el led estará apagado. Al momento de sobrepasar la temperatura de los 28ºC se activará una alarma (y quién desee puede agregar acá un circuito enfriador). Si la temperatura está por debajo de los 26ºC se activará el circuito calefactor hasta que llegue a la temperatura deseada.

Si bien este tipo de control es ON-OFF, dado la propia inercia térmica de la mayoría de los fluidos y elementos que se deben controlar la temperatura, podemos estar seguros que siempre estará en el entorno previsto.

termostato

En el código siguiente se puede ver que los valores máximos y mínimos de temperatura están en variables, por lo que es muy sencillo agregar unos pulsadores en los terminales libres para modificarlos mientras se está ejecutando el sistema. También recomiendo guardar estos valores en la EEPROM para evitar tener que hacer el set-point cada vez que se alimente el circuito.

void alarma();
void main(){
float temperatura;
float minimo;
float maximo;
lcd_init();
minimo=26;
maximo=28;
while (1){
temperatura = ds1820_read();
lcd_gotoxy(1,1);
printf(lcd_putc,"TEMP: %3.1f ", temperatura);
lcd_putc(223);
lcd_putc("C    ");
lcd_gotoxy(1,2);
if (temperatura<=minimo){
printf(lcd_putc,"Frio! Calentando");
 output_high(PIN_A1);}
if (temperatura>=maximo){
printf(lcd_putc,"Caliente!       ");
output_low(PIN_A1);
alarma();}
if ((temperaturaminimo)){
printf(lcd_putc,"Temperatura OK  ");
output_low(PIN_A1);}}
}
void alarma(){
output_high(PIN_B3);
delay_ms(100);
output_low(PIN_B3);
delay_ms(100);}

Las librerías usadas fueron las utilizadas acá y la propia del LCD que trae el CCS.

Simulacion en Proteus

En el video se puede apreciar los tres estados posibles del display el sonido de alarma cuando sube la temperatura. En el momento de grabar el video la simulación se hace bastante lenta (si, ya sé que tengo que cambiar la PC) es por eso que parece que la alarma suena un poco descoordinada.

Advertisement

8 comentarios »

  1. oye compa estoy tratando de hacer este proyecto pa la escu
    pero necesito conectar mas ds18b20 tal vez unos 15, sabes como lo puedo hacer???
    saludos
    esta muy interesante

    Comentario por favian — 29 octubre 2009 @ 21:57 | Responder

  2. lo intente, pero la temperatura siempre me marca 0 grados, alguna idea?

    Comentario por Izquierdo — 29 noviembre 2009 @ 17:42 | Responder

    • La primera pregunta es: ¡te devuelve los 9 bytes y el CRC marca bueno?

      Atte.
      Franklin

      Comentario por Franklin — 19 diciembre 2009 @ 22:11 | Responder

  3. Hola amigo.

    tengo el problema que nunca me marca más de 50°C a pesar que le pongo un cautín al lado, y por el lado bajo nunca me marca menos de 20°C con hielo!!
    El CRC está bueno, qué será??

    …Quién podrá ayudarme?

    Atte
    Franklin

    Comentario por Franklin — 19 diciembre 2009 @ 22:10 | Responder

  4. O ye ya se que es mucho pedir pero no tendras el codigo de el pic ya que yo desconosco
    sobre la programacion de estos bueno boy empesando es solo como pasatiempo

    estoy tratando de realisar una incubadora para huevos de gallina
    y tu programa tiene loq ue yo ocupo

    ueno muchas racias

    Comentario por joel — 5 mayo 2010 @ 17:25 | Responder

  5. Que parte del encapsulado TO-92 es la que mide la temperatura????
    Y por cierto estoy tratando de conectar 300 sensores de estos (ds18b20) si funciona les aviso

    Comentario por Phoebby — 12 mayo 2010 @ 15:43 | Responder

  6. hola estoy probando un DS18B20 y en el proteus solo me sale en la LCD -0,5 ºC y ya no se que hacer. me podria ayudar alguien. los codigos son los mismo que nos dejan en esta web.

    muchas gracias

    Comentario por pcexpos — 27 septiembre 2010 @ 6:49 | Responder

  7. Hola mira sabes que estoy tratando de guardar los datos que tira el ds18b20 en una eeprom externa, tu sabes como lo puedo hacer??, ya he probado tantos codigos y no logro obtener nada y es lo unico que me falta para terminar mi proyecto de titulacion.
    De antemano gracias.

    Comentario por clau — 6 octubre 2010 @ 18:33 | Responder


RSS feed para los comentarios de esta entrada. URI para TrackBack.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Theme: Rubric. Blog de WordPress.com.

Seguir

Get every new post delivered to your Inbox.