Muchas veces es necesario medir la temperatura pero sin contacto físico determinando la temperatura por el nivel de radiación infrarroja emitida por un objeto. En esos casos el sensor MLX90614 es una solución ideal, bajo costo, gran precisión y fácil de conseguir. Este sensor puede medir tanto la temperatura ambiente como la de un objeto apuntado por el sensor. El sensor tiene una exactitud mas que discreta de 0.02 grados, incorpora un conversor analógico de 17 bits y un DSP como centro de procesamiento de los datos obtenidos. Puede medir la temperatura ambiente con un rango que va desde los -40 a 125 grados centígrados y el objeto apuntado tiene un rango de -70 a 380 grados centígrados. El sensor se comunica con el microcontrolador mediante PWM o el bus I2C. En este ejemplo estamos usando el puerto I2C conectado a un PIC18F4620, el código que interpreta los datos enviados por sensor esta escrito en C,
El siguiente es el código completo del ejemplo que se ve en el vídeo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/********************************************************************************** Descripción : Manejo de un termómetro infrarrojo MLX90614por puerto I2C** Target : 40 PIN PIC18F4620** Compiler : MikroC para PIC v 7.1** XTAL : 40MHZ - (XTAL 10Mhz con PLLx4)*********************************************************************************/// Pines asignados al LCDsbitLCD_RSatLATE1_bit;sbitLCD_ENatLATE2_bit;sbitLCD_D4atLATD4_bit;sbitLCD_D5atLATD5_bit;sbitLCD_D6atLATD6_bit;sbitLCD_D7atLATD7_bit;sbitLCD_RS_DirectionatTRISE1_bit;sbitLCD_EN_DirectionatTRISE2_bit;sbitLCD_D4_DirectionatTRISD4_bit;sbitLCD_D5_DirectionatTRISD5_bit;sbitLCD_D6_DirectionatTRISD6_bit;sbitLCD_D7_DirectionatTRISD7_bit;const_IR_THERMO_ADDR=0x5A;const_AMB_TEMP=0x06;const_OBJ_TEMP=0x07;floatTemp;/****************************************************************************** Función para leer el sensor por I2C.* Vectores de Lectura * 0x06 Para temperatura ambiente* 0x07 Para la temperatura del objeto* Retorna el valor de temperatura en grados Kelvin.*****************************************************************************/floatLeer_Sensor(charTemp_Source){unsignedintTemp_var;I2C1_Start();I2C1_Wr(_IR_THERMO_ADDR<<1);I2C1_Wr(Temp_Source);I2C1_Repeated_Start();I2C1_Wr(_IR_THERMO_ADDR<<1);Temp_var=I2C1_Rd(0);Temp_var=(I2C1_Rd(0)<<8)+Temp_var;I2C1_Stop();returnTemp_var;}/****************************************************************************** Muestra los valores de temperatura tanto del objeto como el ambiente.*****************************************************************************/voidMostrar_Temperatura(charTemp_Source,floattemperatura){chartext[15];sprintf(text,"%2.1f",temperatura);if(Temp_Source==_AMB_TEMP)Lcd_Out(2,2,text);Lcd_Chr(2,6,223);Lcd_Chr(2,7,0x43);if(Temp_Source==_OBJ_TEMP)Lcd_Out(2,10,text);Lcd_Chr(2,14,223);Lcd_Chr(2,15,0x43);}voidmain(){CMCON|=7;ADCON1=0x0f;Lcd_Init();Lcd_Cmd(_LCD_CLEAR);Lcd_Cmd(_LCD_CURSOR_OFF);Lcd_Out(1,1,"Sensor PIR");I2C1_Init(100000);// Configura el puerto I2CLcd_Out(2,1,"Iniciando......");Delay_ms(2000);Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Ambiente ");Lcd_Out(1,9," Objeto");while(1){Temp=Leer_Sensor(_AMB_TEMP);// Lee Temp. ambienteTemp=(Temp*0.02)-273.15;// Convierte a grados CelsiusMostrar_Temperatura(_AMB_TEMP,Temp);// Muestra los datos Temp=Leer_Sensor(_OBJ_TEMP);// Lee la temperatura del objetoTemp=(Temp*0.02)-273.15;// Convierte a CelsiusMostrar_Temperatura(_OBJ_TEMP,Temp);// Muestra los valoresDelay_ms(500);// Espera}}
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.