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

Đo nhiệt độ dùng IC DS18B20 hiển thị trên LCD

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 (1.05 MB, 33 trang )

ĐẠI HỌC LẠC HỒNG
KHOA CƠ ĐIỆN ĐIỆN TỬ
---

ĐỒ ÁN MÔN HỌC VI ĐIỀU KHIỂN

Đề Tài:

ĐO NHIỆT ĐỘ DÙNG IC DS18B20 HIỂN THỊ
TRÊN LCD
SVTH: ĐỖ BẢO CHÍNH
TRẦN VĂN ĐƯỢC
ĐÀO THÁI HUY
LỚP: 16CD111
GVHD: Ths.NGÔ KIM LONG

Đồng Nai, 2019



CHƯƠNG 1

MỞ ĐẦU

CHƯƠNG 1

MỞ ĐẦU

1.1 Lý do chọn đề tài
DS18B20 là IC cảm biến nhiệt độ, chỉ bao gồm 3 chân nhỏ gọn, và chỉ có
kích thước bằng một con transistor. Dịng IC cảm biến nhiệt độ này có thể đo nhiệt


độ trong khoảng -55 -> +125°C, nên được ứng dụng công nghệ trong việc đo nhiệt
độ ở các tủ lạnh, kho đơng hoặc các lị sấy hoặc đơn giản hơn là chính trong những
ngơi nhà của bạn.
DS18B20 khá phổ biến và được ứng dụng nhiều trong thực tế nên nhóm em
quyết định chọn đề tài “Đo nhiệt độ dùng IC DS18b20 hiển thị trên LCD”.

1.2 Mục tiêu nghiên cứu
Mục đích trước hết là chúng em thực hiện đề tài này là để hoàn thành ĐỒ
ÁN VI ĐIỀU KHIỂN. Ngoài ra, chúng em thực hiện đề tài này là muốn tìm hiểu và
phát huy những thành quả ứng dụng của điện tử vào đời sống thực tế để giúp ích
cho đất nước cũng như trang bị cho chúng em thêm kiến thức trước khi ra trường.
Quá trình thực hiện đề tài là cơ hội để chúng em kiểm tra lại kiến thức đã học
ở trường. Đồng thời là cơ hội để phát huy tính sáng tạo cũng như khả năng giải
quyết vấn đề theo nhu cầu đã đặt ra. Và đây cũng là dịp để chúng em tích lũy kinh
nghiệm để sau này khi ra trường khơng cịn bỡ ngỡ và quen dần trong linh vực điện
tử.

1.3 Phạm vi nghiên cứu
Với đề tài này chúng em có thể giải quyết những vấn đề sau:
- Lập trình trên board Arduino Atmega2560.
- Lấy được nhiệt độ từ IC DS18B20.
- Hiển thị giá trị nhiệt độ trên LCD.
- Cài đặt timer để đếm thời gian phun sương.
- Thiết kế nút nhấn cho việc cài đặt thời gian và nhiệt độ phun sương tùy vào nhu
cầu của người sử dụng.

3


CHƯƠNG 1


MỞ ĐẦU

1.4 Kết quả đạt được
-

Thiết kế và thi cơng một board mạch hồn chỉnh.
Biết và lập trình được giao tiếp 1 Wire của IC DS18B20 trên Arduino.
Cài đặt được timer/counter 1 giây.
Tiếp nhận được cách làm việc và trao đổi tốt khi làm theo nhóm.

4


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN
2.1 Phần cứng
2.1.1 Arduino Atmega2560
2.1.1.1 Giới thiệu
Arduino Mega 2560 là một vi điều khiển hoạt động dựa trên chip ATmega2560. Bao
gồm:


54 chân digital (trong đó có 15 chân có thể được sủ dụng như những chân
PWM là từ chân số 2 → 13 và chân 44 45 46).



6 ngắt ngoài: chân 2 (interrupt 0), chân 3 (interrupt 1), chân 18 (interrupt 5),

chân 19 (interrupt 4), chân 20 (interrupt 3), and chân 21 (interrupt 2).



16 chân vào analog (từ A0 đến A15).
Bảng 2.1 4 cổng Serial giao tiếp với phần cứng
CỔNG SERIAL

CHÂN RX

CHÂN TX

Cổng 0

0

1

Cổng 1

19

18

Cổng 2

17

16


Cổng 3

15

14



1 thạch anh với tần số dao động 16 MHz.



1 cổng kết nối USB.



1 jack cắm điện.



1 đầu ICSP.
5


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN



1 nút reset.


2.1.1.2 Thơng số kĩ thuật.
Bảng 2.2 Thông số kĩ thuật Atmega2560
Chip xử lý

ATmega2560

Điện áp hoạt động

5V

Điện áp vào (đề nghị)

7V-15V

Điện áp vào (giới hạn)

6V-20V

Cường độ dòng điện trên mỗi 3.3V pin

50 mA

Cường độ dòng điện trên mỗi I/O pin

20 mA

Flash Memory

256 KB


SRAM

8 KB

EEPROM

4 KB

Clock Speed

16 MHz

2.1.2 Khối cảm biến nhiệt độ.
2.1.2.1 Giới thiệu.
DS18B20 là nhiệt kế số có độ phân giải 9 – 12 bit giao tiếp với bộ điều khiển trung
tâm thông qua 1 dây duy nhất (1 wire communication).
Nếu cấu hình cho DS18B20 theo 9,10,11,12 bit thì ta có độ chính xác tương ứng
là : 0.5°C, 0.25°C ,0.125°C, 0.0625°C.(Theo mặc định của nhà sản xuất nếu chúng
ta khơng cấu hình chế độ chuyển đổi thì nó sẽ tự cấu hình là 12 bit).
DS18B20 hoạt động với điện áp từ 3V-5,5V ,có thể được cấp nguồn thơng qua chân
DQ - chân trao đổi dữ liệu.DS18B20 có thể đo được nhiệt độ trong tầm 55 –
125°C với độ chính xác (+ - 0,5°C).Mỗi DS18B20 có một serial code 64 bit duy
nhất, điều này cho phép kết nối nhiều IC trên cùng đương Bus.

6


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Chuẩn 1 wire có đặc điểm sau:

-Chỉ có 1 master trong hệ thống.
-Gía thành thấp.
-Tốc độ đạt tối đa là 16kbps.
-Khoảng cách truyền xa nhất là 300m.
-Lượng thơng tin trao đổi nhỏ.

Hình 2.1 Cấu tạo DS18b20.

2.1.2.2 Thơng số kĩ thuật.


Nguồn: 3 - 5.5V



Dải đo nhiệt độ: -55 - 125 độ C ( -67 - 257 độ F)



Sai số: +- 0.5 độ C khi đo ở dải -10 - 85 độ C



Độ phân giải: người dùng có thể chọn từ 9 - 12 bits



Chuẩn giao tiếp: 1-Wire (1 dây).




Có cảnh báo nhiệt khi vượt ngưỡng cho phép và cấp nguồn từ chân data.



Thời gian chuyển đổi nhiệt độ tối đa: 750ms (khi chọn độ phân giải 12bit).



Mỗi IC có một mã riêng (lưu trên EEPROM của IC) nên có thể giao tiếp
nhiều DS18B20 trên cùng 1 dây



Ống thép khơng gỉ (chống ẩm, nước) đường kính 6mm, dài 50mm



Đường kính đầu dị: 6mm



Chiều dài dây: 1m

7


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

2.1.3 Khối hiển thị LCD.

2.1.3.1 Hình dáng và kích thước của LCD 16x02
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên
hình là một trong những loại LCD thơng dụng.

Hình 2.2 Hình dáng của LCD.

Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên
trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số thứ
tự và đặt tên như bên dưới:

Hình 2.3 Sơ đồ chân của LCD 2002.

2.1.3.2 Chức năng các chân
Bảng 2.3 chức năng các chân LCD
Chân số

Tên

1

Vss

Chức năng
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này
với GND của mạch điều khiển.
8


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN


2

Vdd

3

Vee

Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân
này với VCC=5V của mạch điều khiển.
Chân này dùng để điều chỉnh độ tương phản của LCD.
Chân chọn thanh ghi (Register select). Nối chân RS với
logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh

4

Rs

IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm
địa chỉ của LCD (ở chế độ “đọc” - read).
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ
liệu DR bên trong LCD.
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với

5

R/w

logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với

logic “1” để LCD ở chế độ đọc.
Chân cho phép (Enable). Sau khi các tín hiệu được
đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có
1 xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển
vào (chấp nhận) thanh ghi bên trong nó khi phát

6

E

hiện một xung (high-to-low transition) của tín hiệu
chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0DB7 khi phát hiện cạnh lên (low-to-high transition)
ở chân E và được LCD giữ ở bus đến khi nào chân E
xuống mức thấp.
Tám đường của bus dữ liệu dùng để trao đổi thơng tin

7-14

DB0DB7

với MPU. Có 2 chế độ sử dụng 8 đường bus này:
+ Chế độ 8 bit. Dữ liệu được truyền trên cả 8 đường,
với bit MSB là bit DB7.
+ Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ
DB4 tới DB7, bit MSB là DB7

9



CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

2.1.3.3 Các thanh ghi
-

Chip HD44780 có 2 thanh ghi 8 bit quan trọng: Thanh ghi lệnh IR (Instructor

-

Register) và thanh ghi dữ liệu DR (Data Register)
Thanh ghi IR: Để điều khiển LCD, người dùng phải “ra lệnh” thông qua tám
đường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng.
Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR.
Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8 bit, chíp HD44780 sẽ tra

-

bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó.
Thanh ghi DR: Thanh ghi DR dùng để chứa dữ liệu 8bit để ghi vào vùng
RAM DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2
vùng RAM này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi
thông tin vào DR, mạch nội bên trong chíp sẽ tự động ghi thông tin này vào
DDRAM hoặc CGRAM. Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ
liệu ở địa chỉ này trong vùng RAM nội của HD44780 sẽ được chuyển ra DR
để truyền cho MPU. Bằng cách điều khiển chân RS và R/W chúng ta có thể
chuyển qua lại giữ 2 thanh ghi này khi giao tiếp với MPU. Bảng sau đây tóm
tắt lại các thiết lập đối với hai chân RS và R/W theo mục đích giao tiếp.
RS
0

0

Bảng 2.4 Bảng thiết lập hai chân RS và RW.
R/W
Khi cần
0
Ghi vào thanh ghi RS để ra lệnh cho thanh ghi.
1
Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-

1
0
1
1
2.1.4 Khối nút nhấn

DB6.
Ghi vào thanh ghi DR.
Đọc dữ liệu từ DR.

Sử dụng nút nhấn 2 chân để điều chỉnh thời gian phun sương, đặt nhiệt độ và hiển
thị thông tin của cảm biến nhiệt độ.

10


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Hình 2.4 Hình dạng của nút nhấn 2 chân.


2.1.5 Khối điều khiển thiết bị ngoại vi Relay.
Sử dụng relay 5VDC để điều khiển động cơ phun sương.

Hình 2.5 Hình dạng của relay 5VDC

2.1.6 Khối đèn Led.
Sử dụng đèn led để báo relay hoạt động.

11


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Hình 2.6 Hình dạng Led đơn

2.2.1 Thống kê I/O, địa chỉ kết nối
Bảng 2.5: Số lượng Input của đề tài
STT
1
2
3
4

TÊN INPUT
Giao tiếp 1
wire IC
DS18B20
Nút nhấn
Mode
Nút nhấn Up


ĐỊA CHỈ
PB7

MÔ TẢ CHỨC NĂNG
Nhận dữ liệu từ IC DS18b20.

PD0

Vào chế độ Cài đặt.

PD1

Tăng giá trị nhiệt độ phun sương hoặc
thời gian phun sương.
Nút nhấn
PD2
Giảm giá trị nhiệt độ phun sương hoặc
Down
thời gian phun sương.
Bảng 2.6: Số lượng Output của đề tài

STT TÊN OUTPUT ĐỊA CHỈ
1
Relay
PE3
2
Led xanh
PE5
3

Chân Register
PF0
Select (RS) của
LCD
4
5

Chân kích cho
transitor (RW)
của LCD
Chân (E) của
LCD

MƠ TẢ CHỨC NĂNG
Điều khiển động cơ phun sương.
Báo relay chạy.
Lựa chọn thanh ghi:
• RS=0 chọn thanh ghi lệnh.
• RS=1 chọn thanh ghi dữ liệu.

PF1

Xuất ra xung kích điều khiển bật/tắt của
LCD.

PF2

Cho phép ghi vào LCD.

12



CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

6
7
8
9

Truyền dữ liệu
LCD
Truyền dữ liệu
LCD
Truyền dữ liệu
LCD
Truyền dữ liệu
LCD

PF4

Truyền dữ liệu đến LCD

PF5

Truyền dữ liệu đến LCD

PF6

Truyền dữ liệu đến LCD


PF7

Truyền dữ liệu đến LCD

2.2.2 Sơ đồ khối

Hình 2.7 Sơ đồ khối của sản phẩm.

13


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

2.2.3 Sơ đồ kết nối tổng thể

Hình 2.8 Sơ đồ nguyên lý

14


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Hình 2.9 Sơ đồ mạch in

2.3 Phần mềm
2.3.1 Phân tích các task vụ
Bảng 2.7: Thống kê số tác vụ thực hiện
ST
T
1

2

TÊN TÁC VỤ
vao_menu
hien_thi_nhiet_do

TÊN BIẾN (NẾU CĨ)

MƠ TẢ
Tăng biến dem lên 1 đơn vị,
xóa màn hình và hiển thị bước
setting, gán biến start bằng 0.
Lấy giá trị nhiệt độ thực và
hiển thị lên LCD.
15


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

3

set_phut

4

set_giay

5

set_nhiet_do


6

hoan_tat

7

gan_gia_tri

8

phun_suong

9

timer1_ovf_isr

Tăng giảm giá trị phút, hiển thị
trên LCD và gán biến set cho
biến đếm phút.
Tăng giảm giá trị giây, hiển thị
trên LCD và gán biến set cho
biến đếm giây.
Tăng giảm giá trị nhiệt độ, hiển
thị trên LCD .
Hiển thị hoàn tất và tăng giá trị
start lên 1 khi đã set phút và set
nhiệt độ.
Gán lại giá trị đếm giây và đếm
phút cho giá trị đã set.

Hiển thị nhiệt độ thực, bật
timer1, bật relay. Nếu thời gian
set về 0 hoặc nhấn nút khẩn
cấp thì tắt timer và tắt relay.
Ngắt tràn thời gian 1s.

2.3.2 Code _Lưu đồ giải thuật :
Tác vụ 1:
Code tác vụ void timer1_ovf_isr

Lưu đồ giải thuật của tác vụ void
timer1_ovf_isr

16


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

interrupt
[TIM1_OVF]
timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xBDC >> 8;
TCNT1L=0xBDC & 0xff;

void

setgiay--;
if (setgiay >= 60)

{
setgiay = 59;
setphut--;
if (setphut >= 180)
{
setphut = 179;
}
}
}

17


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Tác vụ 2
Code tác vụ vao_menu
void vao_menu()
{
dem++;
while(!PIND.0);
lcd_clear();
lcd_printfxy(15,0,"%u",dem);
start = 0;
}

Lưu đồ giải thuật của tác vụ vao_menu

Tác vụ 3
Code tác vụ hien_thi_nhiet_do


Lưu đồ giải thuật của tác vụ
hien_thi_nhiet_do

void hien_thi_nhiet_do()
{
ketqua = ds18b20_temperature
(&rom_code[0][0]);
lcd_clear();
lcd_printf("Nhiet Do =
%u\xdf""C",ketqua);
}

18


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Tác vụ 4:
Code tác vụ set_phut()
void set_phut()
{
if (PIND.1 == 0) { setphut++;
delay_ms(250);
if (setphut >= 180){setphut =
0;}}
if (PIND.2 == 0)
{setphut--;delay_ms(250);if
(setphut >= 180){setphut =
179;}}

lcd_printfxy(4,0,"CAI DAT\n
PHUT : %u%u:%u%u ",
setphut/10, setphut%10,
setgiay/10,setgiay%10);
phut = setphut;
}

Lưu đồ giải thuật của tác vụ set_phut()

19


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Tác vụ 5:
Code tác vụ set_giay()
void set_giay()
{
if (PIND.1 == 0){setgiay+
+;delay_ms(250);if (setgiay >=
60){setgiay = 0;}}
if (PIND.2 == 0)
{setgiay--;delay_ms(250);if
(setgiay >= 60){ setgiay = 59;}}
lcd_printfxy(4,0,"CAI DAT\n
GIAY : %u%u:%u%u ",
setphut/10,setphut%10,
setgiay/10,setgiay%10);
giay = setgiay;
}


Lưu đồ giải thuật của tác vụ set_giay()

Tác vụ 6:
Code tác vụ
set_nhiet_do()

Lưu đồ giải thuật của tác vụ set_nhiet_do()

20


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

void set_nhiet_do()
{
if (PIND.1 == 0){
nhietdo_phunsuong++;
delay_ms(250);if (
nhietdo_phunsuong >=
86)
{nhietdo_phunsuong =
0;}}
if (PIND.2 == 0)
{nhietdo_phunsuong--;d
elay_ms(250);if (
nhietdo_phunsuong >=
86){nhietdo_phunsuong
= 85;}}
lcd_printfxy (4,0," CAI

DAT\nNHIET DO :
%u\xdf""C ",
nhietdo_phunsuong);
}

Tác vụ 7:
Code tác vụ hoan_tat()

Lưu đồ giải thuật của tác vụ hoan_tat()

21


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

void hoan_tat()
{
lcd_printfxy(4,0,"CAI
DAT");
for (i=0;i<=5;i++)
{
lcd_printfxy(i,1,"
HOAN THANH ");
delay_ms(250);
if (i == 5)
{ lcd_clear(); }
}
if ( (setgiay !=0 || setphut !
= 0 ) &&
nhietdo_phunsuong != 0 ){

start = 1; }
dem = 0;
}

Tác vụ 8:
Code tác vụ gan_gia_tri()

Lưu đồ giải thuật của tác vụ

22


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

gan_gia_tri()
void gan_gia_tri()
{
setphut = phut;
setgiay = giay;
}

Tác vụ 9:
Code tác vụ phun_suong()

Lưu đồ giải thuật của tác vụ phun_suong()

23


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN


void phun_suong()
{
while (1)
{
hien_thi_nhiet_do();
lcd_printfxy(0,1,"Run :
%u%u:%u%u
",setphut/10,setphut%10,
setgiay/10,setgiay%10);
TIMSK1=(0<(0<(0<(0<(1<timer1
PORTH = 0b00010000;
//khi dem nguoc ve khong
if (setphut == 0 &&
setgiay == 0)
{
lcd_printfxy(12,1,"Off1");
TIMSK1=(0<(0<(0<(0<(0<PORTH = 0b00000000;
break;
}

//khi nhan nut khan cap
if (PIND.1 == 0)
{
while(!PIND.1);
start = 0;
lcd_printfxy(12,1,"Off2");
TIMSK1=(0<(0<(0<(0<(0<PORTH = 0b00000000;
break;
}
24


CHƯƠNG 2 THIẾT KẾ VÀ TÍNH TỐN

Tác vụ 10:
Code tác vụ main
while (1)
{
if (PIND.0 == 0)
{
vao_menu();
}
switch (dem)
{
case 0:

hien_thi_nhiet_do();
break;

Lưu đồ giải thuật của tác vụ
Phụ lục trang i

case 1:
set_phut();
break;
case 2:
set_giay();
break;
case 3:
set_nhiet_do();
break;
case 4:
hoan_tat();
break;
}
if (ketqua >= nhietdo_phunsuong &&
start == 1)
{
phun_suong();
}
gan_gia_tri();
}

25



×