Autor Tema: Termometro digital  (Leído 12684 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Termometro digital
« en: 25 de Junio de 2005, 08:18:00 »
Bueno pues hace poco hice un termómetro digital  y lo postee en otro foro (aunque es de modding, hay mucho relacionado con la electronica), y me gustaria hacerlo aquí tb, puesto que este me tiene enamorado Payaso

El realidad el proyecto es motivo por la reciente adquisicion de mi hermana de un acuario con peces de agua fria y como el tipico termómetro de mercurio no me llama la atencion me puesto manos a la obra con uno digital que usara un PIC16F84A con un lm35, con el que podremos visualizar la temperatura por medio de 2 display de 7 segmentos.

Es economico, divertido y facil de hacer ... aqui dejo el esquema:

<a href="http://img277.echo.cx/my.php?image=termometro2et.jpg" target="_blank"><img src="http://img277.echo.cx/img277/9494/termometro2et.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" />[/url]


Lleba 2 sondas, una que marcara para el exterior (el aire) y otra el interior (para el agua), quien lo quiera usar para otros fines puede añadir mas sonas puesto que quedan patillas del puerto A (el del conversor A/D) libres. Decir tb que tiene la precision de 1 grado (Vref+ = 2.5V, para valores entre 0 y 255).

El sensor, cada uno lo hará como pueda, yo he metido el LM35 en un tubito relleno de aceite de oliva (que transmite muy bien el calor) y lo he sellado con la pistola de pegamento termica. Los que lo useis para el PC nos hace falta (a no ser que lo querais dentro del deposito de la RL  jeje, que esta buena la idea).

<a href="http://img276.echo.cx/my.php?image=sensor1ov.jpg" target="_blank"><img src="http://img276.echo.cx/img276/8766/sensor1ov.th.jpg" border="0" alt="Free Image Hosting at www.ImageShack.us" />[/url]

Que más ... weno llebara 2 pulsadores (aparte del de reset) que será para conmutar las temperaturas de los sensores y otro para encender y apagar el zumbador (que pitara cuando las temp este fuera del rango que yo adjudique -pa los peces de 22 a 27º C supongo-, ademas de la señalización luminosa con 2 leds).

Ahh ... por cierto, hay lm35 mas pequeño en encapsulado del tipico transistor solo que en la tienda donde los compro solo hay este, asi que ... consultar el datasheet que según el encapsulado tb varia el patillaje de Vs, GND y Vout.


Si usais el sprint-layout he hecho el fotolito en http://usuarios.lycos.es/r4don/termometro.LAY

Si no, podeis haceros el mismo partiendo del esquema del 1er post

Bueno tal como prometi, hoy he acabado la pcb del termometro digital y ha quedado algo así:

La pcb por la cara de las pistas:



La pcb por delante sin pinchar algunos componentes en los zócalos:



Y la pcb completa:



Como se puede obserbar (más arriba hay un post donde indique la causa de meter la sonda en un "recipiente" con aceite (es para el acuario), los que la dispongais en el PC no hace falta (es más, seria una gilipollez), el encapsulado del lm35 que escojido viene de fabula por ejemplo para aquellos que querais medir la temp del HD (y con el otro lm35 mediria la temp ambiente en la caja), o incluso tal como lo tengo para el deposito de una RL.


(queda claro ke estaria bien atornillarlo al HD).

Me pienso hacer otro para el PC, jeje espero que os guste, ahora queda el soft Sonrisa

Weno, terminado el soft, queda hacerle un poco de modding al acuario, y con dremel en mano practicamos unos abujeritos por aquí y otros por allí ... y queda algo como esto:

Espero que os guste, y me deis vuestra opinión Sonrisa





Bueno en la pagina uno teneis el esquema y fotolito para el Sprint Layout, os dejo el codigo que podeis modificar a vuestro antojo (por ejemplo a no ser que tengais un acuario de agua fria y querais mantenerlo dentro de 15-30ºGiño lo cambiareis :P

Siento el codigo un poco engorroso, en realidad es sencillo, pero como ido probando pa hacer varias cosas hasta que lo deje así al final parece un poco feo jeje. Lo que hace es conmutar los 2 canales, y en caso que este el canal de la sonda del agua (la de la foto de la pagina uno), si no esta dentro del intervalo indicado se ilumina parpadeando un led, y en caso de que lo quieras con el otro pulsador se conmuta el zumbador que "parpadea" a  ritmo del led. Todo se indica en el display, los canales y el estado del zumbador mas o menos como postee arriba.

Codigo:


//***********************************************
//* Termometro digital
//* Por Daniel G - by RaDoN (30/4/05)
//* *********************************************
//* - Conección Display C.C.:
//* * RC0 -> Led (punto), RC1 -> G ... RC7 -> A
//* - Multiplexado displays 7 seg:
//* * RB4 -> 1er Dígito, RB3 -> 2o Dígito
//* RB0 -> Led Inidicador, RB5 -> Zumbador
//* RB7 -> 1er pulsador, RB6 -> 2o pulsador
//* - Entradas analogicas RA0 & RA1
//***********************************************

  #include "16F876.h"
  #fuses NOLVP,XT,NOWDT,NOPROTECT,PUT
  #use delay (clock=4000000)
  #use fast_io(A)
  #use fast_io(B)
  #use fast_io(C)

  #byte port_a = 5
  #byte port_b = 6
  #byte port_c = 7

  int i, zumbador=1, canal=0, flag_estado=1;
  const int estado[4] = {0x1C,0xFC,0x6E,0x60};

  #int_RB
  void control_rb(void) {
  const int c = 0x1A;
  const int canales[2] = {0x60, 0xDA};
  output_bit(PIN_B0,0);
  output_bit(PIN_B5,0);
  if(input(PIN_B7) == 0) {
      if(canal == 0) {canal = 1;}
      else {canal = 0;}
    for(i=1;i<=100;++i) {
      port_c = c;
      output_bit(PIN_B4,1);
      delay_ms(10);
      output_bit(PIN_B4,0);
      port_c = canales[canal];
      output_bit(PIN_B3,1);
      delay_ms(10);
      output_bit(PIN_B3,0); }
      set_adc_channel(canal);
      delay_us(30);}            // Tiempo de adquisición
   if(input(PIN_B6) == 0) {
         if(flag_estado == 0) {
               flag_estado = 1;
               for(i=1;i<=100;++i) {
                port_c = estado[2];
                output_bit(PIN_B4,1);
                delay_ms(10);
                output_bit(PIN_B4,0);
                port_c = estado[3];
                output_bit(PIN_B3,1);
                delay_ms(10);
                output_bit(PIN_B3,0); }
                set_adc_channel(canal);
                delay_us(30);}
           else {
               flag_estado = 0;
               for(i=1;i<=100;++i) {
                port_c = estado[0];
                output_bit(PIN_B4,1);
                delay_ms(10);
                output_bit(PIN_B4,0);
                port_c = estado[1];
                output_bit(PIN_B3,1);
                delay_ms(10);
                output_bit(PIN_B3,0); }
                set_adc_channel(canal);
                delay_us(30);} }
  }

  void main(void) {

  int sw=1, temperatura, unidades, decenas;
  const int digitos[10]={0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,0xFF,0xF7};

  set_tris_a(0x0B);        // RA0,RA1 y RA3 como entradas
  port_b_pullups(TRUE);    // Resistencias de polarización del puerto B
  set_tris_b(0xC0);        // RB7,RB6,RB2 & RB1 como entradas, RB3:5 & RB0 salidas
  set_tris_c(0x00);        // Puerto C entero como salida
  setup_adc_ports(AN0_AN1_VSS_VREF);  // RA0 y RA1 entradas analógicas
                                      // RA3 referencia voltaje de entrada (2.5V)
  enable_interrupts(INT_RB);
  enable_interrupts(GLOBAL);
  setup_adc(ADC_CLOCK_INTERNAL);
  set_adc_channel(0);
  delay_us(30);            // Tiempo de adquisición
  while(1) {
   temperatura = read_adc();
   decenas = (int)temperatura/10;
   unidades = (int)temperatura-(decenas*10);

   if(canal == 0) {

    if(temperatura < 15) {
        if(sw == 1) { sw = 0;}
        else { sw = 1;}
        if(flag_estado == 1 && sw == 1) {
        output_bit(PIN_B5,1);}
        if(sw ==1) { output_bit(PIN_B0,1);}
        for(i=1;i<=15;++i) {
           if(decenas != 0) {
            port_c = digitos[decenas];
            output_bit(PIN_B4,1);
            delay_ms(10);}
            else {delay_ms(10);}
           output_bit(PIN_B4,0);
           port_c = digitos[unidades];
           output_bit(PIN_B3,1);
           delay_ms(10);
           output_bit(PIN_B3,0);}
      output_bit(PIN_B0,0);
      output_bit(PIN_B5,0);}

   if(temperatura >= 15 & temperatura <= 30) {
      for(i=1;i<=15;++i) {
         if(decenas != 0) {
            port_c = digitos[decenas];
            output_bit(PIN_B4,1);
            delay_ms(10);}
        output_bit(PIN_B4,0);
        port_c = digitos[unidades];
        output_bit(PIN_B3,1);
        delay_ms(10);
        output_bit(PIN_B3,0); }}

    if(temperatura > 30) {
        if(sw == 1) { sw = 0;}
        else { sw = 1;}
        if(flag_estado == 1 && sw == 1) {
        output_bit(PIN_B5,1);}
        if(sw ==1) { output_bit(PIN_B0,1);}
        for(i=1;i<=15;++i) {
           if(decenas != 0) {
            port_c = digitos[decenas];
            output_bit(PIN_B4,1);
            delay_ms(10);}
            else {delay_ms(10);}
           output_bit(PIN_B4,0);
           port_c = digitos[unidades];
           output_bit(PIN_B3,1);
           delay_ms(10);
           output_bit(PIN_B3,0);}
      output_bit(PIN_B0,0);
      output_bit(PIN_B5,0);}

   } // fin: if(canal == 0);

     if(canal == 1) {
      for(i=1;i<=15;++i) {
         if(decenas != 0) {
            port_c = digitos[decenas];
            output_bit(PIN_B4,1);
            delay_ms(10);}
        output_bit(PIN_B4,0);
        port_c = digitos[unidades];
        output_bit(PIN_B3,1);
        delay_ms(10);
        output_bit(PIN_B3,0); }}

   }} // fin while



Si juegas contra el mejor, pierdes como los demás.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Termometro digital
« Respuesta #1 en: 25 de Junio de 2005, 08:19:00 »
Siento toda la parrafada, pero lo tenido que copiar del otro foro en cuestion, espero que alguien le sirva de algo.

Salu2
Si juegas contra el mejor, pierdes como los demás.

Desconectado CygnusX

  • PIC10
  • *
  • Mensajes: 6
RE: Termometro digital
« Respuesta #2 en: 17 de Agosto de 2005, 13:05:00 »
Oye de que frecuencia es el oscilador X1 que manejaste en tu proyecto?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Termometro digital
« Respuesta #3 en: 17 de Agosto de 2005, 14:17:00 »
Segun dice en el codigo del programa es de 4 MHz....Sonrisa GigantePayasoSonrisa Gigante
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado bobote

  • PIC10
  • *
  • Mensajes: 6
RE: Termometro digital
« Respuesta #4 en: 16 de Febrero de 2006, 15:26:00 »
Hola, quisiera hacer un termometro digital y las salidas representarlas en un lcd pero no se como hacerlo, os agradeceria k m pasarais el circuito y el archivo .asm para poder hacerlo, mi correo es bobote69@homtail.com, gracias x adelantado

Desconectado d_b85

  • PIC10
  • *
  • Mensajes: 2
RE: Termometro digital
« Respuesta #5 en: 28 de Febrero de 2006, 03:25:00 »
Hola. A mi tambien me interesaria hacer un termometro digital lo que pasa es que no puedo ver el fotolito.Lo teneis con el Arees o el esquema con el Isis. No me importa si con los displays o con una patallita lcd. Gracias.

Desconectado LokoMx

  • PIC10
  • *
  • Mensajes: 6
Re: Termometro digital
« Respuesta #6 en: 11 de Junio de 2009, 19:10:39 »
buen día, disculpe mi ignorancia pero... ese es un 16f84? el que tengo es de 18 pines, y por lo poco que sé no tiene convertidor ADC :( estoy haciendo algo parecido a lo que el compañero hizo, lo vi y me interesó, pero el caso es que no puedo ver el circuito :( y en la imagen solo veo un integrago y quiero imaginar que es el pic, pero y el adc?  :?

les agradecería su ayuda, saludos :)

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Termometro digital
« Respuesta #7 en: 11 de Junio de 2009, 23:49:29 »
Es que este hilo es del 2006  :shock:
El papel lo aguanta todo

Desconectado LokoMx

  • PIC10
  • *
  • Mensajes: 6
Re: Termometro digital
« Respuesta #8 en: 11 de Junio de 2009, 23:53:26 »
Es que este hilo es del 2006  :shock:

 :D orale, sino me dices no me doy cuenta  :D lo sé lo sé, pero viejas cosas siguen sirviendo  :P

el 16f87 era distinto? esa es mi duda :( habeeer si por ahí alguien me ayuda un poco por favor, se lo agradecería mucho :) saludos

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Termometro digital
« Respuesta #9 en: 12 de Junio de 2009, 00:25:34 »
El micro que utiliza es su proyecto RaDoN en un 16F876, que tiene conversor A/D. Si quieres uno de 18 pines con A/D podrías usar un 16F88, esa es la duda?
No contesto mensajes privados, las consultas en el foro

Desconectado LokoMx

  • PIC10
  • *
  • Mensajes: 6
Re: Termometro digital
« Respuesta #10 en: 12 de Junio de 2009, 05:12:49 »
El micro que utiliza es su proyecto RaDoN en un 16F876, que tiene conversor A/D. Si quieres uno de 18 pines con A/D podrías usar un 16F88, esa es la duda?
Citar
El realidad el proyecto es motivo por la reciente adquisicion de mi hermana de un acuario con peces de agua fria y como el tipico termómetro de mercurio no me llama la atencion me puesto manos a la obra con uno digital que usara un PIC16F84A con un lm35, con el que podremos visualizar la temperatura por medio de 2 display de 7 segmentos.


tienes mucha razón compañero, esque no vi el código, y solo puse atención a la descripción al principio

otra duda, en este momento solo tengo un 16f873, bueno yo no, un amigo pero me lo puede prestar, podría funcionar de la misma forma que el 16f876? vi la hoja de especificaciones y al parecer los pines coinciden, alguien me podría corroborar esta información, soy nuevo en el área de los pics


Gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Termometro digital
« Respuesta #11 en: 12 de Junio de 2009, 11:19:42 »
El 16F873 posee ADC, USART, SPI, I2C, comparadores, PWM, corre a 20MHz maximo, tiene 8k de ROM, 368B de RAM y 256B en la EEPROM
El papel lo aguanta todo

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Termometro digital
« Respuesta #12 en: 12 de Junio de 2009, 11:22:17 »
Si podes usarlo, los periféricos son exactamente iguales, en lo que varia es en la capacidad de la memoria de programa, memoria RAM, y eeprom, que en tu caso no va a tener problemas.
No contesto mensajes privados, las consultas en el foro

Desconectado LokoMx

  • PIC10
  • *
  • Mensajes: 6
Re: Termometro digital
« Respuesta #13 en: 12 de Junio de 2009, 14:15:34 »
Gracias Suky y MLO__ por sus respuestas, haré algunas modificaciones ya que lo que pretendo hacer es que accione una válvula neumática, pero cuando el rango de temperatura sea el correcto, la parte de potencia la tengo solucionada, ahora el problemita será unir todos los pines, ya que el esquema no se ve claramente, como lo dije... soy nuevo en el area de pic :( apenas 1 semana leyendo sobre como programar  :D estaba con el 16f84 pero necesitaba el convertidor ADC y el decodificador para los displays, mas componentes y mas gasto, y lo que se pretente es que sea un poco pequeño, veré si de alguna forma radon visita su post, espero que si, mientras tanto seguiré uniendo puntos :D


saludos :-/

Desconectado LokoMx

  • PIC10
  • *
  • Mensajes: 6
Re: Termometro digital
« Respuesta #14 en: 10 de Julio de 2009, 04:01:51 »
buen día compañeritos, después de un tiempo ando de nuevo por aquí, logré ponerme en contacto con Radon me indicó que no tenía el circuito pero logré hacerlo de nuevo, em... espero que esté bien  :shock:



haber si no me pasé con el tamaño, ahora tengo otro problemita, el compilador es pic c, bajé el de hi-tech pero al momento de compilar me dice que no encuentra la librería :( realmente estoy perdido


 

anything