Friday, December 12, 2014

Đo nhiệt độ sử dụng nhiệt điện trở

 Đo nhiệt độ sử dụng nhiệt điện trở


Nhiệt điện trở (tiếng anh: Thermistor) là loại điện trở mà trở kháng của nó thay đổi một cách rõ rệt dưới tác dụng nhiệt, hơn hẳn so với các loại điện trở thông thường. Từ thermistor được kết hợp bởi từ themal (nhiệt) và resistor (điện trở). Nhiệt điện trở được ứng dụng rộng rãi trong việc hạn chế các dòng xung kích, làm cảm biến nhiệt.
Sử dụng Nhiệt điện trở ưu điểm hơn hẳn các loại cảm biến thường dùng như thời gian đáp ứng nhanh, có thể đo ở nhiệt độ cao, và rất rẻ ....

Phương trình phụ thuộc nhiệt độ và điện trở của Nhiệt điện trở:

[​IMG] 

Trong đó: T, T0 tính theo độ Kevin.
R0 là điện trở khi nhiệt độ T0 = 25 độ C, phụ thuộc loại Nhiệt điện trở.
B là hệ số phụ thuộc vào loại Nhiệt điện trở.
Ở đây chúng ta sẽ sử dụng ADC để tìm giá trị điện trở của nhiệt điện trở, rồi từ đó dễ dàng tìm ra được nhiệt độ theo công thức.

Sơ đồ kết nối vi điều khiển:

[​IMG] 
Hình ảnh thực tế: (Trời hơi lạnh )
[​IMG]

Mình sử dụng Nhiệt điện trở có R0=10k, hệ số B=3470.

Sau đây là code sử dụng chip 16f887:
#include <main.h>
#include <math.h>
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C0
#define LCD_RW_PIN PIN_C1
#define LCD_DATA4 PIN_C3
#define LCD_DATA5 PIN_C4
#define LCD_DATA6 PIN_C5
#define LCD_DATA7 PIN_C6
#include <lcd.c>

float value,A,C,T;
int16 R=4700,B=3470,R0=10000;


void main()
{
setup_adc (ADC_CLOCK_INTERNAL);
setup_adc_ports (sAN0);
delay_us (20);
set_adc_channel (0);

lcd_init();
printf(lcd_putc,"ready....");
delay_ms(500);

unsigned char mychar[8] = {12, 18, 18, 12, 0, 0, 0, 0};
lcd_set_cgram_char(1,mychar);

while(TRUE)
{

value = read_adc ();
delay_us (20);
float RT=(value*R)/(1024 - value);
A=log(RT/R0);
C=(A/B) + 0.003355704698; // 1/(25+273)
T=(1/C) - 273;

printf(lcd_putc,"\fT=%lf",T);
lcd_putc(1);
lcd_putc("C");
delay_ms(100);
}
}
File "main.h":
#include <16F887.h>
#device adc=10
#device *=16

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=20000000)
Cám ơn các bạn đã theo dõi!

Tác giả : Ngô Thiện Đức

Version 2: download


1 comment:

inmoov finger voice test

Inmoov finger voice test