Tải bản đầy đủ (.docx) (25 trang)

Đồ án ĐO NHIỆT ĐỘ HIỂN THỊ LÊN LCD ĐIỀU KHIỂN QUẠT VÀ CÒI BÁO HIỆU

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (477.05 KB, 25 trang )

CHƯƠNG 1: GIỚI THIỆU CHUNG
1.1 Ý tưởng hình thành đồ án
- Nhu cầu hiện đại hoá đang trở thành xu hướng của toàn cầu. Hiện
đại hóa đem lại sự tiện nghi, hiện đại, và giải quyết nhiều vấn đề cho con
người. Do đó, em thực hiện đề tài này với mong muốn hiện đại hóa trong
điện tử sẽ càng ngày càng thịnh hành.
1.2 Các chức năng cơ bản của mạch
- Đo nhiệt độ bằng IC lm35 (từ 25 oC đến 70 oC). Dùng vi xử lý
PIC16F877A để tín hiện nhiệt độ và hiển thị lên LCD.
- Nếu nhiệt độ đo đươc từ cảm biến cao hơn 30 oC, vi xử lý sẽ điều
khiển còi chạy thông qua relay .
- Nếu nhiệt độ quá đạt 40 oC, vi điều khiển sẽ điều khiển quạt chạy
thông qua relay.
- Có thêm 3 nút bấm để điều chỉnh nhiệt độ điều khiển quạt chạy và
còi. ( nút UP, DOWN và MENU ).


CHƯƠNG 2: THIẾT KẾ CÁC MẠCH THIẾT BỊ
2.1 Giới thiệu tổng quan về hệ thống
- Hệ thống bao gồm 5 khối chính liên kết với nhau với trung tâm là vi
điều khiển PIC16F877A.

Sơ đồ chân PIC16F877A
- Khối vi điều khiển trung tâm sử dụng PIC16F877A với nguồn cung
cấp 5V.
- Khối đo nhiệt độ (input) sử dụng cảm biến LM35 đo nhiệt độ. Vận
chuyển dữ liệu thu được về vi điều khiển qua chân AN0.
- Khối hiển thị LCD sử dụng LCD 16x2 kết nối với vi điều khiển để
hiển thị nhiệt độ thu được từ cảm biến.



- Khối cài đặt nhiệt độ gồm các nút nhấn để điều chỉnh nhiệt độ bật
quạt và báo còi thích hợp
- Khối điều khiển thiết bị bao gồm 1 con relay dùng để điều khiển
quạt và 1 con relay dùng để điều khiển còi báo hiệu.

Sơ đồ tổng quát hệ thống
- Ở hệ thống trên , nhìn chung chỉ sử dụng những chân cơ bản của
PIC16F877A với chức năng xuất nhập I/O, hiển thị LCD và module relay để
điều khiển thiết bị. Với những thứ cơ bản đó chúng ta có thể phát triển thêm
nhiều ứng dụng khác làm tăng khả năng cho board như mở rộng để giám sát
thêm nhiều cảm biến hay mở rộng port I/O để có thể điều khiển với số lượng
thiết bị lớn hơn.
2.2 Khối vi điều khiển trung tâm
a) PIC16F877A


- Mạch ứng dụng với yêu cầu không cao, vì vậy PIC16F877A là vi
điều khiển phù hợp do đây là họ VĐK phổ biến và có nhiều tài liệu và phần
mềm hỗ trợ.
- Thiết lập PIC16F877A:
+ Xung clock nội 4 Mhz
+ Sử dụng bộ chuyển đổi tín hiệu tương tự sang tín hiệu số ADC 10
bit đa hợp 8 kênh, giao tiếp với tín hiệu tương tự nhận từ cảm biến LM35.
+ Lập trình trên bộ nhớ Flash cho chương trình chính và EEPROM
cho các biến chức năng đặt cho khối điều khiển.
+ Các ngõ vào I/O nối với các thiết bị ngoại vi là LCD, nút bấm và
relay.
+ Port D được đặt là ngõ ra giao tiếp hiển thị LCD.
+ Port B đặt ngõ vào cho các chân nối với button thực hiện việc ngắt
+ Port A đặt ngõ vào thu nhiệt độ từ sensor LM35

+ Port C là ngõ ra thực hiện việc phát còi báo và bật quạt.
b) Thạch anh
- Thạch anh là bộ dao động khá ổn định để tạo tần số dao động cho
chíp PIC16F877A hoạt động.
- PIC16F877A sử dụng một dao động thạch anh có tần số dao động là
4MHz. Hai tụ 22pF và thạch anh để tạo xung nhịp cho PIC16F877A ở 2
chân OSC1 (chân số 13) và OSC2 (chân số 14).


Thạch anh 4 MHz

Kết nối thạch anh với PIC16F877A
c) Reset button
- PIC16F877A sẽ tự động reset nếu chân reset bị kéo xuống đất (tức
nối xuống âm), điện trở R1 phải có giá trị nhỏ hơn 40K để bảo đảm điện áp
cung cấp cho vi điều khiển. Thời gian tích cực của chân reset phải tối thiểu
trong 2 chu kì máy thì mới xác nhận là reset. Khi bấm reset tụ sẽ bị xả, khi


nhả nút reset ra, tụ đc nạp nên chân reset sẽ từ từ bị kéo xuống 0 tạo khoảng
thời gian lớn hơn 2 chu kì máy và chống nảy cho phím bấm. Như vậy để
reset mạch ta dùng một button và mắc như hình trên.

Reset button
d) Mạch nạp
- Sử dụng mạch nạp đa năng Burn E dùng cho các loại PIC. Mạch nạp
được kết nối với PIC qua 1 dãy chân nạp được thiết kế sẵn trên board. Các
chân nạp có trình tự kết nối như sau:
+ Chân 1 Burn E kết nối với chân MCLR của vi điều khiển.
+ Chân 2 kết nối với 2 chân nguồn của PIC là chân số 11 và 32.

+ Chân 3 kết nối với 2 chân nối đất của PIC là chân số 12 và 31.
+ Chân 4,5 lần lượt kết nối với port RB7 và RB6 của PIC.


Sơ đồ kết nối chân mạch nạp
e) Khối nguồn
- Nguồn chính 5v cung cấp nguồn cho toàn mạch và các thiết bị ngoại
vi.
- Nguồn phụ 12V được cung cấp cho quạt thông qua relay

Bộ nguồn 5V và 12V

2.3 Khối đo nhiệt độ


a) Cảm biến nhiệt độ LM35
Sơ lược
- Hiệu chỉnh trực tiếp qua độ C
- Ngõ ra điện áp tuyết tính 10mV/oC
- Tầm đo -55oC tới 150oC
- Giá thành rẻ, thông dụng

Sơ lược về LM35
b) Chuyển đổi giá trị ADC sang nhiệt độ
- Như chúng ta đã biết tín hiệu đầu vào của cảm biến nhiệt độ LM35
là giá trị ADC. Như vậy, cần phải biến đổi giá trị ADC này thành giá trị nhiệt
độ để có thể hiển thị lên LCD
- Theo lý thuyết ta có:
Cứ


5000mV

Vậy

X

-->

1023adc

-->

Giá trị ADC thu được

Trong đó X là ngõ ra điện áp của cảm biến vào vi điều khiển
==> X =


Mặ khác ta có:
Cứ 10mV thì ta được 1oC
==> Nhiệt độ =
=
c) Kết nối
- LM35 có kết nối đơn giản với 2 chân nối nguồn đất và 1 chân dữ
liệu cho PIC.
- Tuy nhiên nếu mắc như vậy vẫn chưa tối ưu hóa được nhiệt độ đo
vào do có sự ảnh hưởng của nhiễu.
- Cách giả quyết cho vấn đề này là lọc nhiễu cho cảm biến bằng 1
mạch lọc RC do có giá trị do nhà phát hành PIC đưa ra.


LM35 với mạch lọc RC
- Vì trở 75Ω không có nhiều trên thị trường nên ta có thể linh động
chọn trở 100Ω
- Để đảm bảo tính chống nhiễu cao cho khối đo nhiệt độ, hệ thống còn
sử dụng 1 bộ lọc nhiễu trên code bằng cách lấy 10 lần đo nhiệt độ rồi chia
lấy giá trị trung bình. Như vậy khả năng chống nhiễu của khối sẽ cao hơn


Kết nối của khối đo nhiệt
2.4 Khối hiển thị LCD
- LCD 16x2 hiển thị được tất cả các kí tự trong bảng mã ASCCI được
nối với Port D của vi điều khiển.
- Giống như led 7 thanh, LCD là một thiết bị ngoại vi dùng để giao
tiếp với người dùng, so với led 7 thanh thì LCD có ưu điểm là hiển thị được
tất cả các kí tự trong bảng mã ascci, trong khi đó led 7 thanh chỉ hiển thị
được một số kí tự, nhưng LCD lại có nhược điểm là giá thành cao và khoảng
cách nhìn gần.
- LCD là từ viết tắt của Liquid Crystal Display (màn hình tinh thể
lỏng). Có nhiều loại màn hình LCD với các kích cỡ khác nhau, nhưng trong
mạch ứng dụng này ta sài loại LCD 16x2 bán phổ biến trên thị trường.
- Gồm 2 chân nguồn VCC và VDD, chân 3 tùy chỉnh độ tương phản.
- Theo đó là 3 chân điều khiển hoạt động của LCD là RS RW và E.


- Dữ liệu từ chân D0 đến D7 theo chế độ 4 bit hoặc 8 bit. Ở thiết kế
này em sử dụng chế độ 4 bit nhằm tiết kiệm chân ngoại vi của vi điều khiển
- Chân 15 là chân dương đèn led nền của LCD được nối vào nguồn
5V.

LCD 16x2

2.5 Khối cài đặt nhiệt độ
- Sử dụng chân RB0, RB1, RB2 gắn với nút nhấn.
- Khi chưa nhấn nút. Nguồn điện chạy qua trở rồi chạy vào các chân
input RB0 tới RB2. Khi này ở các chân đang nhận đầu vào là mức cao.
- Khi thực hiện việc bấm nút, chân của vi điều khiển được nối mass.
Sử dụng lệnh ngắt khi có đầu vào là mức thấp trong code của vi điều khiển.
- Như vậy khi ta bấm nút vi điều khiển sẽ ngắt sang chế độ làm việc
khác . Cho phép ta cài đặt điều chỉnh nhiệt độ báo đèn và nhiệt độ bật quạt.


Sơ đồ nguôn lý của khối cài đặt nhiệt độ
2.6 Khối điều khiển thiết bị
a) Điều khiển còi.
- Công dụng: khi nhiệt độ cao quá mức 30 độ (nhiệt độ mặc định có
thể điều chỉnh) thực hiện việc bật còi báo hiệu.
- Vận hành: khi nhiệt độ tăng quá 30 oC, vi điều khiển xuất 1 mức tín
hiệu cao 5V ra chân RC1 kết nối với còi.


b) Điều khiển quạt relay.
RELAY
- Relay có nhiệm vụ điều khiển các thiết bị ngoại vi thông qua tiếp
điểm thường đóng và thường hở. Mạch sử dụng các oppto kích transistor và
relay cách li điều khiển thiết bị với khả năng ứng dụng cao, có thể sử dụng
điều khiển được cho rất nhiều loại thiết bị khác nhau kể cả thiết bị dùng
nguồn 220V xoay chiều.
- Nguyên lí hoạt động của 1 kênh tiêu biểu trong khối như sau: nhìn
vào sơ đồ nguyên lí ta thấy, khi có tín hiệu ngỏ ra từ chân vi diều khiển ở
mức cao 5V kích vào Anot led của oppto làm led oppto sáng, khi đó
transistor quang của oppto dẫn nguồn VCC qua điện trở 10K kích vào cực B

của transistor C1815. Khi đó transistor C1815 dẫn tiếp tục làm nguồn VCC
qua cuộn dây relay đổ xuống mass. Khi có điện qua cuộn dây relay thì công
tắc của relay sẽ bật và kết thúc quá trình điều khiển thiết bị.

Sơ đồ nguyên lý relay.
- Quạt được kết nối với chân COM và NO của module relay. Khi có
tín hiệu mức cao kích vào, chân NO sẽ đóng làm cho quạt chạy.


Kết nối quạt với module relay
2.7 Xây dựng lưu đồ thuật toán và viết chương trình


Sơ đồ thực hiện Code


CHƯƠNG 3: KẾT QUẢ
3.1 Ưu điểm
- Mạch nhỏ gọn, ứng dụng cao
- Sử dụng module relay cách ly nguồn điện của các thiết bị với mạch
- Cảm biến được chống nhiễu cao qua 2 bộ lọc nhiễu
- Nguồn cung cấp mạch không nhiều, tiết kiệm năng lượng.
- Mạch được thiết kế linh động có thể tái sử dụng
3.2 Nhược điểm
- Code chưa được tối ưu
- Kích thước vẫn chưa tối ưu
- Giá trị đọc vẫn chưa chính xác
- Điều khiển quạt và đèn báo
Code chương trình
#include <main.h>

int8 CheDo=0;
int8 NhietDoMax = 40;
int8 NhietDoMin = 30;

void _DieuKhien(int8 TenTai, int1 TrangThai);


#INT_EXT
void NgatINT0(void)
{
CheDo=CheDo+1;
if(CheDo>2)
{
CheDo=0;
}
}

void main()
{
//khai bao cac bien cuc bo o day nay
int16 GiaTriADC;
float Tam;
int8 NhietDo;
int8 i;
int32 Tong;


setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);


clear_interrupt(INT_EXT);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT_H2L);
enable_interrupts(GLOBAL);

lcd_init();
lcd_putc('\f');

//output_bit(PIN_C0,0);
//output_bit(PIN_C1,0);
_DieuKhien(1,0);
_DieuKhien(2,0);

while(TRUE)
{


//TODO: User Code
/*
theo ly thuyet ta co
cu 5000mv
vay x

-->
<--

1023 adc
GiaTriADC

=> x = (5000*GiaTriADC)/1023

mat khac theo datasheet thi:
cu 10mv

-->

1C

vay (5000*GiaTriADC)/1023 -->

y

=> y = ((5000*GiaTriADC)/1023)/10 = (500*GiaTriADC)/1023
*/

while(CheDo==0)
{
Tong=0;
for(i=1;i<=10;i++)
{
GiaTriADC = read_adc();
Tong += GiaTriADC;


//Tong = Tong + GiaTriADC;
}
Tong = Tong/10;

Tam = (500f*(float)Tong)/1023f;
NhietDo = (int8)Tam;


lcd_gotoxy(1,1);
printf(lcd_putc,"NHIET DO: %02d *C ",NhietDo);
lcd_gotoxy(1,2);
printf(lcd_putc,"DO AN1 Q.HUY

if(NhietDo>=NhietDoMax)
{
_DieuKhien(1,1);
}
else
{

");


_DieuKhien(1,0);
}
if(NhietDo<=NhietDoMin)
{
_DieuKhien(2,1);
}
else
{
_DieuKhien(2,0);
}
}

while(CheDo==1)
{
lcd_gotoxy(1,1);

printf(lcd_putc,"CAI DAT NHIET ");
lcd_gotoxy(1,2);
printf(lcd_putc,"DO MAX :%02d ",NhietDoMax);


if(UP==0)
{
while(UP==0);
NhietDoMax=NhietDoMax+1;
if(NhietDoMax>60)
{
NhietDoMax=40;
}
}
else if(DOWN==0)
{
while(DOWN==0);
NhietDoMax=NhietDoMax-1;
if(NhietDoMax<=NhietDoMin)
{
NhietDoMax=40;
}
}
}


while(CheDo==2)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"CAI DAT NHIET ");

lcd_gotoxy(1,2);
printf(lcd_putc,"DO MIN :%02d ",NhietDoMin);

if(UP==0)
{
while(UP==0);
NhietDoMin=NhietDoMin+1;
if(NhietDoMin>=NhietDoMax)
{
NhietDoMin=30;
}
}
else if(DOWN==0)
{


while(DOWN==0);
NhietDoMin=NhietDoMin-1;
if(NhietDoMin<20)
{
NhietDoMin=30;
}
}
}
}
}

void _DieuKhien(int8 TenTai, int1 TrangThai)
{
switch(TenTai)

{
case 1:
{
output_bit(PIN_C0,TrangThai);
break;


}
case 2:
{
output_bit(PIN_C1,TrangThai);
break;
}
default:
{
break;
}
}
}


×