Sensor de Temperatura, Pic C Compiler

En esta sección aprenderás a programar un sensor de temperatura conectado a una entrada analógica del microcontrolador PIC. El objetivo es censar la señal de entrada analógica del sensor y calcular la temperatura. 

Sensor LM35 

Para empezar debemos comprender el funcionamiento y característica del sensor LM35 de acuerdo al las especificaciones del fabricante (datasheet).

La serie LM35 son dispositivos de temperatura de circuito integrado de precisión con un voltaje de salida linealmente proporcional a la temperatura centígrada. Tiene un rango de temperatura de −55 ° C a 150 ° C. Como el dispositivo LM35 extrae solo 60 μA del suministro, tiene un auto-calentamiento muy bajo de menos de 0.1 ° C en aire quieto. El dispositivo LM35 está clasificado para funcionar en un rango de temperatura de −55 ° C a 150 ° C.

Características del LM35

  • Calibrado directamente en grados Celsius (centígrado).
  • Factor de escala lineal + 10mV / ° C.
  • 0.5 ° C Precisión asegurada (a 25 ° C).
  • Clasificado para rango completo de −55 ° C a 150 ° C.
  • Apto para aplicaciones remotas.
  • Funciona de 4V a 30V.
  • Drenaje de corriente de menos de 60 μA.
  • Bajo auto-calentamiento, 0.08 ° C en aire quieto.
  • No linealidad solamente ± ¼ ° C Típico.
  • Salida de baja impedancia, 0.1 Ω.

Señal analógica

Una señal analógica es un tipo de señal generada por un sistema electromagnético, esta representada por una variación continua de electrones y sus parámetros son la amplitud, la frecuencia y el periodo de la señal.

Una entrada analógica en un microcontrolador puede tomar un voltaje de 0 a 5V, es importante determinar este valor para evitar dañar el microcontrolador.

En este ejemplo se utilizara un sensor de temperatura como entrada analógica, si el voltaje de alimentación del sensor de temperatura es de 5V este podrá variar el voltaje de censado  de 0 a 5V.

Pines Analógicos 

Los pines analógicos del microcontrolador se definen en su hoja de especificaciones.

Circuito del sistema

En el circuito anterior se definen la conexión de los elementos que se utilizaran. Se utiliza un sensor de temperatura LM35 y un display LCD 16×2 para mostrar el valor medido.

El primer paso para programar una entrada analógica es configurar el módulo convertidor analógico digital (ADC). Cuando el PIC recibe una entrada analógica este convierte el valor a digital en bits mediante el ADC. Dependiendo de los bits del ADC la lectura sera más o menos precisa.

Código archivo .h

El convertidor analógico digital es de 10 bits.

#device ADC=10

Código archivo .c

El siguiente paso es habilitar el modulo ADC y habilitar la entrada analógica en el pin AN0.

setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel (0); //lectura Vout del sensor en PIN A0

Se utiliza una variable para guardar el valor del sensor de temperatura, dado que se esta utilizando un ADC de 10 bits es necesario definir que nuestra variable sea de 10 bits o mayor por lo que se puede coloca una variable entera de 16 bits, pero como se realizaran operaciones matemáticas que involucran números decimales se utiliza una variable flotante.

float sensor;

La siguiente instrucción realiza la lectura en la entrada analógica, esto permite obtener el valor medido del sensor.

sensor=read_adc(); //lectura del valor

La lectura del sensor tomaría valores entre 0 y 1023 dado que el convertidor ADC es de 10 bits por lo que se necesita realizar una la conversión a temperatura de entre 0°c y 155°C.

sensor=(5*sensor*100)/1023;

Finalmente se coloca la instrucción para mostrar el valor en la pantalla LCD.

 
      lcd_gotoxy(1,1); printf(LCD_PUTC, "\fTEMPERATURA");
      lcd_gotoxy(1,2); printf(LCD_PUTC,"%f GRADOS C",sensor);

Código Completo


#FUSES NOMCLR

#define LCD_RS_PIN PIN_B6
#define LCD_RW_PIN PIN_B5
#define LCD_ENABLE_PIN PIN_B4
#define LCD_DATA4 PIN_B3
#define LCD_DATA5 PIN_B2
#define LCD_DATA6 PIN_B1
#define LCD_DATA7 PIN_B0
#include "lcd.c"  

void main()
{
   lcd_init();
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);//lectura Vout del sensor de temperatura en pin AN0
   float sensor;
   while(TRUE)
   {
      sensor=read_adc();//lectura del valor
      sensor=(5*sensor*100)/1023;
      lcd_gotoxy(1,1); printf(LCD_PUTC, "\fTEMPERATURA");
      lcd_gotoxy(1,2); printf(LCD_PUTC,"%f GRADOS C",sensor);
      delay_ms(200);
   }

}

Opción 2


#FUSES NOMCLR

#define LCD_RS_PIN PIN_B6
#define LCD_RW_PIN PIN_B5
#define LCD_ENABLE_PIN PIN_B4
#define LCD_DATA4 PIN_B3
#define LCD_DATA5 PIN_B2
#define LCD_DATA6 PIN_B1
#define LCD_DATA7 PIN_B0
#include "lcd.c"  

void main()
{
   lcd_init();
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);//lectura Vout del sensor de temperatura en pin AN0
   int16 sensor;
   while(TRUE)
   {
      sensor=read_adc();//lectura del valor
      sensor=((int32)sensor*5*100)/1023; //(int32)evita truncar la variable (int16) del sensor
      lcd_gotoxy(1,1); printf(LCD_PUTC, "\fTEMPERATURA");
      lcd_gotoxy(1,2); printf(LCD_PUTC,"%ld GRADOS C",sensor);
      delay_ms(200);
   }

}
Scroll al inicio