PDA

View Full Version : Cần tìm hiểu về đo nhiệt độ dùng pic


hawinter
10-03-2007, 12:33 AM
Anh nào có tài liệu và mạch đo nhiệt độ dùng pic dúp em với.
(sử dụng LM335 thì càng tốt )
trước đây em có đọc tài liệu của anh LINH về vấn đề này khá hay
nhưng code viết không chú thích nên hơi khó hiểu , xin các tiền bối chỉ giáo .
thanhs!

boys3509_2006
10-03-2007, 03:28 PM
bạn đọc tài liệu đó ở đâu thế chỉ mình với, mình dự định dùng pic 16F877A với LM335 để đo nhiệt độ nhưng chưa tìm được tài liệu. Mình định viết bằng CCS ko biết bạn viết bằng ngôn ngữ nào ?

hawinter
10-03-2007, 09:15 PM
mình với bạn có cùng mục đích đó
mình cũng không nhớ load ở đâu nữa dientuvietnam hay picvietnam
nếu ban thích cho mail mình send cho .
Tại công lực mình thấp nên mãi vẫn không lĩng giáo được hết
bạn đọc thử xem có gì mình chao đổi

boys3509_2006
13-03-2007, 06:22 PM
địa chỉ mail của mình là monkey3698_2005@yahoo.com , mình thấy bạn có mở luồng về đề tài này bên dientuvietnam.net trong đó có cái link ko biết phải ko? Bạn cứ gửi tài liệu qua email co mình, 2 người cùng làm chắc sẽ OK.

huybo02
13-03-2007, 10:44 PM
Trong phần tut của anh Linh về CCSc có trình bày về đo nhiệt độ dùng LM335 đó. Các bạn tìm thử. Nếu không thấy thì mail cho minh` vào huybo02@gmail.com mình sẽ gửi cho

hawinter
14-03-2007, 10:14 PM
Sao không thấy các cao thủ nhà ta ra tay dúp đỡ nhỉ .E rằng các đệ tử phải tự thân vận động thôi.Mong nhận được sự trợ dúp nhiều hơn.
Các bác coi thử cái này xem.

boys3509_2006
17-03-2007, 04:42 PM
cảm ơn mấy cái tài liệu của hawinter mình sẽ về nghiên cứu, nếu ko có gì thứ năm tuần sau mình sẽ trả lời bạn. Hai thằng một túi cộng lại chắc cũng gần bằng tên 2 túi ... :D :D :D

boys3509_2006
29-03-2007, 04:50 PM
sory mấy bữa nay kt dữ quá nen ko pót bài được. E trích bài của anh linhnc308:
Đề tài: Mạch đo nhiệt độ và cảnh báo

Chức năng của mạch:
- Đo nhiệt độ môi trường tại một điểm thông qua sensor nhiệt LM335(Chi tiết về LM335 xem trong
datasheet). LM335 là sensor đo nhiệt, đầu ra là 10mV/K. Do đó để đo độ C ta cần có công thức chuyển đổi giá trị. Vì ta dùng ADC của PIC là 8bit (có thể dùng 10bit) => max=255, Vref=VCC, giả thiết là VCC=5V nên tại 0 độ C hay 273K thì đầu ra của LM335 có giá trị là 2.73V. Như vậy khi muốn tính toán ra độ C ta cần phải trừ đi mức điện áp là 2.73V.

Lấy ví dụ: nhiệt độ là 30 độ C = 303K -> out = 303 x 10mV/K =3.03V. Ta tính toán giá trị đọc được từ
ADC.
ADC 8 bit: V_in = VCC=5V => ADC_value = 255
V_in = 2.73V => ADC_value = (255/5)x2.73=139.23 (tương ứng 0 độ C)
V_in = 3.03V => ADC_value = (255/5)x3.03=154.53 (tương ứng 30 độ C)

Mặt khác do V_ref = VCC=5V nên ADC_value=1 tương ứng 5/255=19.6mV ~ 20mV. Trong khi đó LM335
cho ra điện áp là 10mV/1K nên để giá trị ADC thay đổi 1 đơn vị thì nhiệt độ phải thay đổi là 2K (hay 20mV)
Từ đó ta có công thức đầy đủ sau để tính giá trị độ C:

C = (ADC - 139.25)x(19.6mV/10mV)=(ADC-139.25)x1.96~(ADC-139.25)/0.512
Tương tự ta có công thức cho ADC 10bit và 12 bit:
ADC_10_bit: C= ( reading-558.6)/ 2.048
ADC_12_bit: C= ( reading-2235.9)/ 8.19

- Để hiện thị giá trị nhiệt độ ta có nhiêu phương án như LED 7, LCD, máy tính(qua RS232)... Trong đề tài này ta dùng LED 7 thanh cho việc hiển thị. Gồm có hai LED 7, dùng PIC để giải mã hiển thị cho LED (có thể dùng 7447 để tiết kiệm chân). Để cảnh báo ta đặt khoảng theo dõi nhiệt độ là từ 15 C đến 40 C (cái này tuỳ vào người dùng) khi nhiêt độ nằm ngoài khoảng này thì phát tín hiệu cảnh báo bằng loa và có thể gửi tìn hiệu điều khiển đến các mạch khác nếu có.
- Mạch có sử dụng thêm điện trở tinh chỉnh 10K tại chân ADJ của LM335 để điều chỉnh nhiệt độ ban đầu cho
phù hợp.

Mở rộng của đề tài:
- Nâng cao độ chính xác hiển thị bằng cách dùng ADC có độ phân giải cao hơn (có thể dùng ADC ngoài)
- Thêm bàn phím giao tiếp để có thể thay đổi trực tiếp khoảng nhiệt độ theo dõi, cùng với đó ta thêm vào
LED 7 để hiển thị hai giá trị nhiệt độ này
- Sử dụng EEPROM để lưu giá trị nhiệt độ mà người dùng thiết lập, các lần thay đổi khác...
- Ghép nối máy tính để truyền giá trị nhiệt độ đến máy tính
- Ghép nối LCD và một mạch đếm thời gian thực (DS1307) để ứng với mỗi thời điểm chương trình sẽ tự động
chọn khoảng thiết lập nhiệt độ thích hợp theo từng mùa, từng thời điểm định trước...
- Sử dụng PID trong điều khiển tự động kết hợp với các mạch điều khiển tăng giảm nhiêt độ để đảm bảo nhiệt
độ luôn bám theo một giá trị cho trước, hệ ổn định nhiệt (giá trị thay đổi là rất nhỏ)
- Vân vân và vân vân...anh em nào có thêm cao kiến gì thì bổ sung.

boys3509_2006
29-03-2007, 04:54 PM
còn phần code em nghĩ chúng ta nên tham khảo của anh Linhnc sau đó tự viết lại..... khổ em chưa rành ADC cho lắm ko biết có ai rành cái này ko, chỉ cho e vài chiêu dzới

boys3509_2006
07-04-2007, 06:12 PM
tạm biệt các pác nhé, hẹn đầu tháng 5 em lại tiếp chiêu với các pác. bây giờ em bận ôn thi HK 2. Bye Bye

tuannm
09-04-2007, 02:13 AM
Đầu tháng năm thì lâu quá, hay tiếp tục chủ đề với phần mở rộng là ghép nối với máy tính để hiện thị kết quả đo nhiệt độ.

manhthuc26385
12-04-2007, 05:19 PM
mình với bạn có cùng mục đích đó
mình cũng không nhớ load ở đâu nữa dientuvietnam hay picvietnam
nếu ban thích cho mail mình send cho .
Tại công lực mình thấp nên mãi vẫn không lĩng giáo được hết
bạn đọc thử xem có gì mình chao đổi

MÌNH(em) TÊN LÀ NGUYỄN MẠNH THỨC(manhthuc26385@yahoo.com) VỨA MỚI THAM GIA DIỄN ĐÀN
MÌNH(em) ĐANG CẦN TÀI LIỆU VỀ PIC6F877A CỤ THỂ HƠN LÀ CÓ LIỆN QUAN ĐẾN MẠCH ỨNG DỤNG CỦA NÓ "ĐO NHIỆT ĐỘ"
MONG BẠN(anh) GỬI CHO MÌNH ÍT TÀI LIỆU ĐỂ MÌNH CÓ THỂ THỰC HIỆN ĐỀ TÀI NÀY
XIN CHÂN THÀNNH CẢM ƠN

ThaiVu
13-04-2007, 06:42 PM
Sao không thấy các cao thủ nhà ta ra tay dúp đỡ nhỉ .E rằng các đệ tử phải tự thân vận động thôi.Mong nhận được sự trợ dúp nhiều hơn.
Các bác coi thử cái này xem.

Chao ban hawinter;
day la project minh lam de xu dung cho pedicure spa.
Temp.sensor LM34 for F ,
Pic 16f819
Servo 5vdc, 3.4kg/cm
2000W/120VAC heater etc..
LCD 16x2
Code viet bang PicBasic pro.
----------------------------------------------------
Muc dich: giup nail technician dieu khien nhiet do dung theo y muon va khong ton thi gio theo doi va dieu chinh nhiet do.
Dien tien : Khi an AUTO ,relay R2 cung cap 120V cho adaptor to 12 vdc. Pic 16f819 bat dau lam viec:
Doc nhiet do va so sanh voi nhiet do giu trong ROM
Dung servo de dieu chinh nhiet do.
New nhiet do chua duoc thi Heater (2000W) phu giup.
Khi nuoc day, bom chay de luan chuyen va kiem soat nhiet do
vanvan .......................
Minh rat sung suong khi nhan duoc su dong gop y kien cua cac ban.
Thai Vu

ThaiVu
16-04-2007, 08:31 PM
dinh kem them

hawinter
19-04-2007, 12:54 AM
Code viết bằng PicBasic pro hả Thaivu cái này mình mới nghe qua nhưng thấy nó ko phổ biến cho pic mấy nên cung chưa tìm hiểu .Có khó ko ban??

ThaiVu
19-04-2007, 07:55 AM
PicBasic Pro rat pho bien trong gioi binh dan,ho khong duoc di hoc nhung lai thich tay may . PBP rat de viet , de hieu va co nhieu commands thuc dung cho viec sang che may moc. so di no khong duoc pho bien o VN vi no phat xuat tu Basic Stamp trong gioi hobby dien tu (khong phai nhu C tu cac truong dai hoc VN) o My va Au chau. Hy vong sinh vien cac nghanh khac (khong can phai hoc C) cung co the lam quen de dang de sang kien cua ho de thuc hien trong thuc te. Day la thu vui cho moi gioi.
Chao ban va chuc ban thanh cong.
TV

hatuan296
26-04-2007, 05:06 AM
Sẵn tiện chủ đề này . mình cũng co một câu hỏi mong các bạn giúp mình nha .

mình dùng cảm biến nhiệt là Lm35 , pic là 18f4520 , Vref- nối mass , vref+ nối biến trở , cân chỉnh được 2,7v . Mình lập trình cho hiển thị nhiệt độ trên LCD . code được viết bằng Picbasic Pro .
khai báo các thanh ghi ADC như sau :

ADCON1 = %00011111 ' CHUYEN PORTA , PORTE SANG DIGITAL
ADCON0 = %00010011 ' Set PORTA analog CHON ADC KENH 4

Kết quả , Lcd vẫn hiện thị được nhiệt độ . nhưng khi tăng nhiệt độ tại cảm biến , thì giá trị của LCD lại giảm đi . :confused: .

đây là câu hỏi mình mong các bạn giúp mình nha . Cảm ơn rất nhiều .

ThaiVu
26-04-2007, 09:40 AM
Chao ban Hatuan296,
Minh khong biet nhieu ve 18F4520, nhung dua theo data sheet thi thay ban can coi lai:
1. ADCON0 = %00010011 cho thay ban chon AN4 la analog input cho cam bien, nhu vay ADCON1 = %00011111 cho thay khong co port A nao cho AN4.
theo thien y cua minh thi nen viet ACDCON0 = %00000011, ADCCON1 = %00011110, TRISA = %11111111 .(minh chon AN0 cho cam bien, AN0 la analog input, con lai la digital input).
2. Khong thay ban nhac den ADCON2( noi ve right, left justify, accquisition time, A/D conversion clock ) minh khong ro DEFINE ADC_CLOCK 3 va DEFINE ADC_SAMPLESUS 50 co the dung cho 18F4520 duoc khong. Neu thu chay duoc, cho minh biet voi.
Day cung la dip de minh hoc ve PIC 18FXXXX.
Chuc ban thanh cong.
Thai Vu

hatuan296
26-04-2007, 03:41 PM
Chào bạn THAIVU . chương trình của mình không thể sửa như bạn được , vì yêu cầu phần cứng là thiết kế cho AN4 nhận tín hiệu từ LM35 rồi . Còn các các chân PORTA.0 , PORTA.1 kết nối I2C .

Còn thanh ghi ADCON2 thì mình chưa đụng tới , vì thật sự cũng chưa biết nó là gì . Nếu được mong bạn chia sẽ nha . thanks

hatuan296
26-04-2007, 04:21 PM
mình đã thử sửa chương trình lại như sau :

ADCON1 = %00011010 ' CHUYEN PORTA , PORTE SANG DIGITAL trừ từ AN0 đến AN4

ADCON0 = %00010011 ' Set PORTA analog CHON ADC KENH 4
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 4 ' Set clock source (4 : 4 TOSC)
DEFINE ADC_SAMPLEUS 50 'ADC sampling time in microseconds

thì vẫn bị tình trạng là nhiệt độ tại cảm biến tăng lên . nhưng nhiệt độ hiển thị trên lại bị giảm xuống . Mình cũng thật không biết lài tại sao nữa .
Mặc dù câu lệnh hết sức đơn giản :

MAIN :

ADCIN 4 , TEMP ' đọc giá trị adc kênh 4 , đưa vào biến TEMP

PAUSE 200 ' chờ 200 mili giây

LCDOUT DEC2 TEMP ' xuất biến temp ra lcd dưới dạng số thập phân

PAUSE 500 ' chờ 500 mili giây

GOTO MAIN ' làm lại từ đầu .


Mong bác náo rành cái này thì giúp với . mình đang bí quá . thanks

namqn
26-04-2007, 06:26 PM
Theo cấu hình của bạn, nguồn áp chuẩn cho +VREF sẽ được nối vào AN3, bạn có nối như vậy chứ?

Chương trình của bạn chỉ dùng AN4, vậy các AN2 đến AN0 có được dùng không? Nếu có thì dùng như thế nào? Nếu không thì tại sao lại chọn cấu hình analog từ AN0 đến AN4.

Cái bất lợi của ngôn ngữ cấp cao là chúng ta khó kiểm soát được cách thức các module phần cứng được sử dụng và thiết lập. Ví dụ câu lệnh ADCIN 4 , TEMP của bạn, thực sự là nó đang thực hiện những gì?

Tôi không dùng LM35, nhưng đã từng dùng AD22100 (tương tự LM35) để đo nhiệt độ và hiển thị lên LCD. Tôi đã hiển thị nhiệt độ ở dạng xx.x độ C. Không hề có chuyện nhiệt độ tăng mà giá trị hiển thị giảm.

Thân,

meishun
26-04-2007, 06:34 PM
Chào các bạn, mình đã làm mạch đo nhiệt độ dùng PIC16F877A và cảm biến nhiệt độ LM35DZ, đo nhiệt độ môi trường và hiển thị lên LED 7 đoạn. Nay mình post lên cho mọi người cùng tham khảo.( đề tài này mình viết bằng Hợp Ngữ)

hatuan296
27-04-2007, 03:57 AM
Vậy là mình đã giãi quyết xong rắc rối . sau khi bỏ cả ngày hôm nay để kiểm tra , chỉnh sữa :

. kiểm tra mạch in , thấy không sai . chân vref+ được cân chỉnh ở 2,73 v
. kiểm tra chương trình ( viết lại nhiều chương trình cho nhiều loại 18F như 4520 , 4525 , 458 , 4610 , 4620 , 4680 ) . con nào cũng không chịu chạy . :confused:

rốt cuộc đành chạy ra chợ Nhật Tảo kiếm 2 con LM35 mới nguyên về . thì lại chạy được . , tăng nhiệt độ tại cảm biến thì số trên LCD sẽ tăng chứ không giảm như trước . :D

Sau đây là chương trình mình đã dùng :


ADCON1 = %00011111 ' CHUYEN PORTA , PORTE SANG DIGITAL
ADCON0 = %00010011 ' Set PORTA analog CHON ADC KENH 4
Define ADC_BITS 8 chỉ dùng ADC 8 bit
Define ADC_CLOCK 4 ' Set clock source (4 : 4 TOSC)
DEFINE ADC_SAMPLEUS 50 'ADC sampling time in microseconds


MAIN :

ADCIN 4 , TEMP ' đọc giá trị adc kênh 4 , đưa vào biến TEMP

PAUSE 200 ' chờ 200 mili giây

LCDOUT DEC3 TEMP ' xuất biến temp ra lcd dưới dạng số thập phân 3 chữ số

PAUSE 500 ' chờ 500 mili giây

GOTO MAIN ' làm lại từ đầu .


Chương trình vẫn vậy , không có gì thay đổi cả . và là chương trình rất cơ bản .
To THAIVU : hy vong sẽ có dịp trao đổi thêm về kinh nghiệm lập trình Pic dùng Picbasic Pro với bạn . thân chào !

à , các bạn cho mình hỏi thêm . với Vref+ trong ADC 8 bit thì mình cân chỉnh bao nhiêu , 10 bit thì bao nhiêu là chính xác ? Đề tài trên mình đã cân chỉnh là 2,73 v cho ADC 8 bit như vậy có đúng không ?

boys3509_2006
05-05-2007, 02:45 PM
trời ạ mới có 2 tuần ko đăng nhập mà cái luồng này đã loạn xì ngầu lên cả rùi, vùa có 16F877A vừa có 16F4520, LM35DZ, lại còn sài cả BASIC nữa chứ, rối quá. giao trước là chỉ dùng LM335, 16F877A và CCS thui mừ.

huybo02
06-05-2007, 09:37 PM
#include <16F877.h>
#device 16F877*=16 ADC=10
#include <math.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=1000000)
#define use_portd_lcd TRUE
#include<lcd.c>
long adc,nhietdo;
int8 a,b,c,d;
void tachhang(int&a,int&b,int&c,int&d);
char so[11] ="0123456789";
void main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(100);

while(true)
{
adc=read_adc();
nhietdo = (adc-559)/0.2024;
tachhang(a,b,c,d);
lcd_init();
delay_ms(100);
lcd_putc(so[a]);
lcd_putc(so[b]);
lcd_putc(so[c]);
lcd_putc('.');
lcd_putc(so[d]);
delay_ms(900);
}
}

void tachhang(int&a,int&b,int&c,int&d)
{
a=nhietdo/1000;
b=(nhietdo%1000)/100;
c=(nhietdo%100)/10;
d=nhietdo%10;
}


/* 5V = 1024 muc =>1 muc ADC ung voi ap =4.88 => 10mV tuong ung voi 2.048 muc ADC
0oC = 273oK => 0oC ung voi muc dien the 2.73V ung voi 559 muc ADC
Nhiet do = dien the Analog/10 - 273
Tuong ung
Nhiet do = (adc -559)/2.024
Xuat gia tri nhiet do ra LED 7 doan hay LCD*/


Làm được rồi hi`. Dùng ADC 10bit Vref =5V Xuất ra LCD 4bit

boys3509_2006
31-05-2007, 09:14 AM
Bạn ko dùng ngắt ngoài àh, nếu vậy thì khi truyền dữ liệu qua PC bằng RS232 nó sẽ liên tục thông báo nhiệt độ đo được. chẳng hạn khi bạn viết câu thông báo ('nhiệt độ đo được là',temp) thì nó sẽ liên tục viết ra câu thông báo trên. Ko biết có pác nào biết cách khắc phục ko ? :confused:

dientudong
21-01-2009, 02:03 AM
đề tài này sao không thấy ai tích cực viết tiếp nhỉ !

vuvulinh_8x
21-01-2009, 11:42 AM
đề tài này sao không thấy ai tích cực viết tiếp nhỉ !

:D. Mình cũng muốn thảo luận một tý. Mình tham khảo code của bác Linh, công nhận Tutorial bác ấy viết hay, mình viết code để PIC đọc 2 kênh ADC. Vấn để ở đây là mình muốn truyền kết quả đo được lên mobile( việc truyền lên mobile khó quá) hoặc máy tính.Mình đang làm nhưng chưa được, mình post code đo 2 kênh lên trước nhé. Mong các bác cho ý kiến, để truyền kết quả cho mobile hoặc PC.

dientudong
21-01-2009, 04:12 PM
bạn có thể cho mình biết sao cách kết nối LCD có vẻ khác so với cách kết nối mà mình hay dùng để hiển thị.

vuvulinh_8x
29-01-2009, 03:47 PM
bạn có thể cho mình biết sao cách kết nối LCD có vẻ khác so với cách kết nối mà mình hay dùng để hiển thị.

Không biết bác kết nối LCD như thế nào, và khác ở điểm nào? Mình tham khảo sơ đồ trên forum thôi, theo mình hiểu thì kết nối như vậy với LCD 4bit là đủ : các chân được nối đất mặc định mức logic 0 để chúng làm việc ở một chế độ thôi nếu muốn bác có thể nối vào chân vdk để thay đổi, và ở chế độ 4 bit chỉ cần nối 4 chân. Mình có một tài liệu ở bên vagam rất hay, bạn có thể tham khảo!.............:(( ủa up mãi không được nè! Tại server lỗi khi khác mình up nhé! :D

pdkxlily
04-05-2011, 09:23 PM
:D. Mình cũng muốn thảo luận một tý. Mình tham khảo code của bác Linh, công nhận Tutorial bác ấy viết hay, mình viết code để PIC đọc 2 kênh ADC. Vấn để ở đây là mình muốn truyền kết quả đo được lên mobile( việc truyền lên mobile khó quá) hoặc máy tính.Mình đang làm nhưng chưa được, mình post code đo 2 kênh lên trước nhé. Mong các bác cho ý kiến, để truyền kết quả cho mobile hoặc PC.

cai này nhiệt độ sao chạy tầm bậy vậy bạn

nhox_lun
27-11-2011, 11:24 AM
các bác cho em hoi chut nha. nếu lm335 đuợc dùng trong mạch báo cháy cam biến nhiệt , thì công dụng và hoạt động của nó sẽ như thế nào nha? và còn thông tin về opamp 741 nữa? Em tìm trên datasheep oi nhung ko dung y em cần, mong các bác jup đỡ?