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

MẠCH đo mực nước DÙNG PIC (có code và sơ đồ mạch)

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 (505.83 KB, 20 trang )

Đề tài: Mạch đo mực nước

ĐỒ ÁN 1

MẠCH ĐO MỰC NƯỚC DÙNG PIC

1


Đề tài: Mạch đo mực nước
MỤC LỤC

2


Đề tài: Mạch đo mực nước

DANH MỤC CÁC HÌNH VẼ

3


Đề tài: Mạch đo mực nước

DANH MỤC BẢNG BIỂU
Bảng 2.2.1: Chức năng các chân.................................................................................................9
Bảng 2.2.2-1:Sơ đồ chân SRF04...............................................................................................12
Bảng 2.2.3: Sơ đồ chân trong LCD...........................................................................................14

4



Đề tài: Mạch đo mực nước

CHƯƠNG 1: GIỚI THIỆU
1.1 Giới thiệu chung
Ngày này ta có cách thiết bị điều khiển bị động dựa vào tác động hoặc thay đổi bên
ngoài. Nhưng điều đó chưa đủ, Chúng ta cần có những thiết bị tự chuẩn đoán, dự báo để
điều khiển thiết bị một cách thông minh hơn.
1.2 Mục đích thực hiện đề tài
Bằng cách sử dụng sử dụng PIC16F877A và các linh kiện, gồm điện trở, tụ điện, LCD
16x02 và cảm biến siêu âm SRF-04. Ta có thể dễ dàng tạo ra thiết bị có thể đo mực nước.
1.3 Nhiệm vụ đề tài
Thiết kế mạch đo mực nước. Sử dụng PIC16F877A và SRF-04 để đo khoảng cách và
xuất dữ liệu ra LCD. Xây dựng phần cứng hệ thống.

5


Đề tài: Mạch đo mực nước

CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG
2.1. Thiết kế sơ đồ khối

Hình 2.1: Sơ đồ khối của mạch

Khối SRF-04: có chức năng đo khoảng cách từ mạch tới vật cản và đưa giá trị
về khối vi điều khiển.
Khối điều khiển: Có chứa vi điều khiển PIC16F877A. Nhận tín hiệu từ khối
cảm biến đưa về, cho hiển thị trên LCD.
Khối LCD: hiển thị thông tin từ khối khối điều khiển đưa tới.

Khối nguồn: có chức năng biến đổi dòng soay chiều 220v thành dòng 1 chiều
cung cấp cho các khối hoạt động.
Nguyên lý hoạt động: Khi PÍC6F877A nhận được tín hiệu từ SRF-04 đưa về,
khối vi điều khiển xử lý và tính toán ra khoảng cách từ SRF-04 tới vật thể và gửi tín
hiệu cho LCD hiển thị.

2.2. Giới thiệu các linh kiện
2.2.1 Vi điều khiển PIC
PIC16F877A có 40/44 chân với sự phân chia cấu trúc như sau :
+ Có 5 port xuất/nhập.
+ Có 8 kênh chuyển đổi A/D 10-bit.
+ Có 2 bộ PWM.
+ Có 3 bộ định thời: Timer0, timer1 và timer2.
6


Đề tài: Mạch đo mực nước
+ Có giao tiếp truyền nối tiếp: chuẩn RS 232, I2C…
+ Có giao tiếp LCD.

Hình 2.2.1: Sơ đồ chân và hình dạng của PIC 16F877A.
Bảng 2.2.1: chức năng các chân

7


Chân

Tên


Đề1tài: Mạch đo/V
mực
nước
PP
2

RA0/AN0

3

RA1/AN1

4

RA2/AN2/VREF-/CVREF

5

RA3/AN3/VREF+

6

RA4/TOCKI/C1OUT

7

RA5/AN4/

8


RE0/

9

RE1/

/AN6

10

RE2/

/AN7

11

VDD

12

VSS

13

OSC1/CLKI

14

OSC2/CLKO


15

RC0/T1 OCO/T1CKI

16

RC1/T1OSI/CCP2

17

RC2/CCP1

/C2OUT

/AN5

Chức năng
: Hoạt động Reset ở mức thấp
- VPP : ngõ vào áp lập trình
- RA0 : xuất/nhập số
- AN0 : ngõ vào tương tự
- RA1 : xuất/nhập số
- AN1 : ngõ vào tương tự
- RA2 : xuất/nhập số
- AN2 : ngõ vào tương tự
- VREF -: ngõ vào điện áp chuẩn (thấp) của bộ A/D
- RA3 : xuất/nhập số
- AN3 : ngõ vào tương tự
- VREF+ : ngõ vào điện áp chuẩn (cao) của bộ A/D
- RA4 : xuất/nhập số

- TOCKI : ngõ vào xung clock bên ngoài cho timer0
- C1 OUT : Ngõ ra bộ so sánh 1
- RA5 : xuất/nhập số
- AN4 : ngõ vào tương tự 4
- SS : ngõ vào chọn lựa SPI phụ
- C2 OUT : ngõ ra bộ so sánh 2
- RE0 : xuất nhập số
- RD : điều khiển việc đọc ở port nhánh song song
- AN5 : ngõ vào tương tự
- RE1 : xuất/nhập số
- WR : điều khiển việc ghi ở port nhánh song song
- AN6 : ngõ vào tương tự
- RE2 : xuất/nhập số
- CS : Chip lựa chọn sự điều khiển ở port nhánh song
song
- AN7 : ngõ vào tương tự
Chân nguồn của PIC.
Chân nối đất
Ngõ vào dao động thạch anh hoặc xung clock bên
ngoài.
- OSC1 : ngõ vào dao động thạch anh hoặc xung
clock bên ngoài. Ngõ vào Schmit trigger khi được
cấu tạo ở chế độ RC ; một cách khác của CMOS.
- CLKI : ngõ vào nguồn xung bên ngoài. Luôn được
kết hợp với chức năng OSC1.
Ngõ vào dao động thạch anh hoặc xung clock
- OSC2 : Ngõ ra dao động thạch anh. Kết nối đến
thạch anh hoặc bộ cộng hưởng.
- CLKO : ở chế độ RC, ngõ ra của OSC2, bằng tần số
của OSC1 và chỉ ra tốc độ của chu kỳ lệnh.

- RC0 : xuất/nhập số
- T1OCO : ngõ vào bộ dao động Timer 1
- T1CKI : ngõ vào xung clock bên ngoài Timer 1
- RC1 : xuất/nhập số
- T1OSI : ngõ vào bộ dao động Timer 1
8 compare 2, ngõ
- CCP2 : ngõ vào Capture 2, ngõ ra
ra PWM2
- RC2 : xuất/nhập số
- CCP1 : ngõ vào Capture 1, ngõ ra compare 1, ngõ
ra PWM1


Đề tài: Mạch đo mực nước

2.2.2 Cảm biến siêu âm SRF04
SRF04 là cảm biến siêu âm dung để đo khoảng cách tới vật cản
Khoảng cách đo: 3cm-4cm.
Ứng dụng: chống trộm, đo mực nước, robot dò đường……

Hình 2.2.2-1: SRF04

2.2.2.1. Thông số kĩ thuật SRF04
+ Nguồn cung cấp: 5V DC
+ Dòng: 30mA (Max 50mA)
+ Tần số hoạt động: 40KHz
+ Khoảng cách lớn nhất đo được: 6m
+ Khoảng cách nhỏ nhất đo được: 3 cm
+ Góc quét: 45 ° [3]


Bảng 2.2.2chân

2.2.2.2. Sơ đồ chân
Chân
Vcc
Trigger
Echo
GND

Chức năng
Nguồn 5V
Chân kích phát song âm đi
Chân phát hiện song âm dội lại
Nguồn GND

1: Sơ đồ
SRF04

2.2.2.3. Giao tiếp với vi điều khiển
• Đo khoảng cách bằng cảm biến siêu âm SRF04 chính là đo thời gian chân
Echo ở mức cao
• Để đo khoảng cách ta làm các bước sau:
+ Kích chân Trigger: xuất mức 1 ra chân Trigger và delay tối thiểu 10ms.
+ Sau đó đợi chân Echo lên mức cao.
+ Khi chân Echo lên mức cao, kích hoạt Timer
+ Khi chân Echo xuống mức thấp (hoặc trong chương trình xử lý ngắt),
dừng Timer và tính toán giá trị từ Timer, sau đó suy ra khoảng cách
+ Reset giá trị đếm cho Timer, chuẩn bị lần đo tiếp theo

9



Đề tài: Mạch đo mực nước

2.2.2.4. Cách tính khoảng cách từ thời gian đo được

d

Hình 2.2.2-2: Khoảng cách từ SRF04 tới vật

Gọi S là quãng đường đi của song âm.
S= 2 x d
Gọi V là vận tốc song âm
V=344m/s = 34400cm/s
V=0.0344m/us
Gọi t là thời gian truyền thì ta có:

Như vậy:

D = t/58

S=2xd=Vxt
D = V x t/2 = 0.0344 x t/2 = (t/58)

2.2.3. LCD 16x02
Trong đồ án, khối hiển thị sử dụng LCD 16x02. LCD là viết tắt của từ Liquid Crystal
Display được khá nhiều thiết bị điện tử sử dụng. Là loại hiển thị cấu tạo bởi các tế bào
( các điểm ảnh) chứa tinh thể lỏng có khả năng thay đổi tính phân cực của ánh sáng do đó
thay đổi cường độ ánh sáng truyền qua khi kết hợp với các kính lọc phân cực. Ưu điểm là
phẳng, cho hình ảnh sáng, chân thật và tiết kiệm năng lượng.


Hình 2.2.3: LCD 16x02

10


Đề tài: Mạch đo mực nước

Chức năng

Số thứ tự chân

Tên

Ground
Nguồn cho
LCD
Tương phản

1

Vss(GND)

Trạng Thái
Logic
-

2

Vdd(Vcc)


-

5V

3

Vee

4

RS

5

RW

6

E

7
8
9
10
11
12
13
14


D0
D1
D2
D3
D4
D5
D6
D7

0
1
0
1
0
1
Từ 1 xuống 0
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1

0-Vdd
D0-D7: Lệnh
D0-D7:Dữ liệu
Ghi (Từ IC vào LCD)
Đọc (Từ LCD vào IC)

Vô hiệu hóa LCD
LCD hoạt động
Bắt đầu ghi/đọc
Bit 0 LSB
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7 MSB

Điều khiển
LCD

Dữ liệu/lệnh

Bảng 2.2.3: Sơ đồ chân trong LCD

11

Mô Tả
0V


Đề tài: Mạch đo mực nước

CHƯƠNG 3: PHẦN MỀM
3.1. Lưu đồ hoạt động


Hình 3.1: Lưu đồ hoạt động

12


Đề tài: Mạch đo mực nước

3.2 Mô phỏng

Hình 3.2: Mạch mô phỏng proteus

3.3 Thi công mạch

Hình 3.3: Mạch in

13


Đề tài: Mạch đo mực nước

CHƯƠNG 4: KẾT LUẬN
4.1 Kết luận
Sau hơn một thời gian tìm hiểu, nghiên cứu, tham khảo nhiều tài liệu và được sự hướng
dẫn của thầy cô, em đã thực hiện xong đề tài : ‘‘Mạch đo mực nước. Việc hoàn thành đề
tài với những nội dung và mục tiêu đề ra ban đầu đã đem lại cho em thực hiện một lượng
kiến thức bổ ích, thiết thực và có khả năng ứng dụng trong thực tế. Sau thời gian thực
hiện đồ án, em đã hoàn thành được những công việc sau :


Xây dựng, thiết kế thi công mạch




Tìm hiểu vầ thiết kế mạch

4.2. HƯỚNG PHÁT TRIỂN ĐỀ TÀI
Đề tài ‘‘mạch đo mực nước” được thực hiện trên mô hình thí nghiệm. Để đưa đề tài này vào áp
dụng trong thực tiễn đời sống và sản xuất thì cần phải nâng cấp và mở rộng hệ thống hơn nữa.
Ngoài ra, dựa vào ứng dụng và tầm khả năng hoạt động , chúng ta có thể phát triển thành các đề
tài khác như hệ thống ổn định lò nhiệt, hệ thống ổn định áp suất……

14


Đề tài: Mạch đo mực nước

Tài liệu tham khảo
[1] Giáo trình vi điều khiển: 123doc.org //document/1250977-giao-trinh-vi-dieu-khienpic-16f877a.htm
[2] Vi điều khiển PIC16f877A: tailieu.tv/tai-lieu/vi-dieu-khien-pic16f877a-17967/
[3] />[4] Hocavr.com

15


Đề tài: Mạch đo mực nước

PHỤ LỤC
#define LCD_EN
#define LCD_RS


PIN_D1
PIN_D0

#define LCD_D4
#define LCD_D5
#define LCD_D6
#define LCD_D7

PIN_D7
PIN_D6
PIN_D5
PIN_D4

// misc display defines#define Clear_Scr
0x01
// prototype statements
#separate void LCD_khoitao (void);
#separate void LCD_thietlap (unsigned int cX);
#separate void LCD_VIETKITU (unsigned int cX);
#separate void LCD_GUILENH (unsigned int cX);
#separate void LCD_Kichhoatxung (void);
#separate void LCD_SetData (unsigned int cX);
#use standard_io (B)
#use standard_io (A)
//khoi tao LCD**********************************************
#separate void LCD_khoitao (void)
{
LCD_SetData (0x00);
delay_ms (200);
output_low (LCD_RS);

LCD_SetData (0x03);
L CD_PulseEnable ();
LCD_Kichhoatxung ();
LCD_Kichhoatxung ();
LCD_SetData (0x02);
LCD_Kichhoatxung ();
LCD_GUILENH (0x2C);
LCD_GUILENH (0X0C);
LCD_GUILENH (0x06);
LCD_GUILENH (0x01);
}
16


Đề tài: Mạch đo mực nước

#separate void LCD_thietlap (unsigned int cX)
{
LCD_SetData (swap ( cX ) | 0x08);
LCD_Kichhoatxung ();
LCD_SetData (swap (cX));
LCD_Kichhoatxung ();
}
#separate void LCD_VIETKITU (unsigned int cX)
{
output_high (LCD_RS);
LCD_GUILENH (cX);
output_low (LCD_RS);
}
#separate void LCD_GUILENH (unsigned int cX)

{
LCD_SetData (swap (cX)); /* send high nibble */
LCD_Kichhoatxung ();
LCD_SetData (swap (cX)); /* send low nibble */
LCD_Kichhoatxung ();
}
#separate void LCD_Kichhoatxung (void)
{
output_high (LCD_EN);
delay_us (3);
// was 10
output_low (LCD_EN);
delay_ms (3);
// was 5
}
#separate void LCD_SetData (unsigned int cX)
{
output_bit (LCD_D4, cX & 0x01);
output_bit (LCD_D5, cX & 0x02);
output_bit (LCD_D6, cX & 0x04);
output_bit (LCD_D7, cX & 0x08);
}
#DEFINE
#DEFINE

TRIGGER
PIN_C4
ECHO
PIN_C5


FLOAT KC1, KC2;
UNSIGNED INT32 I, GT_TRAN, K,KQ;
17


Đề tài: Mạch đo mực nước

#int_timer1
void interrupt_timer1()
{
GT_TRAN++;
}
VOID TAO_XUNG_TRIGGER()
// tao xung de day tin hieu ra ngoai
{
DELAY_MS(50);
OUTPUT_HIGH(TRIGGER);
DELAY_MS(1);
OUTPUT_LOW(TRIGGER);
// kich muc thap thi tao duoc 1 xung
SET_TIMER1(0);
//chuong trinh ngat reset ve 0
WHILE(!(INPUT(ECHO)));
SETUP_TIMER_1(T1_INTERNAL);
WHILE(INPUT(ECHO));
KC1 = GET_TIMER1();
SETUP_TIMER_1(T1_DISABLED); // khong cho doc gia tri timer
}
VOID SETUP_SRF04()
{

SETUP_TIMER_1(T1_DISABLED);
ENABLE_INTERRUPTS(GLOBAL);
ENABLE_INTERRUPTS(INT_TIMER1);
K=1;
}

// cho phép ngat
// cho phep ngat timer 1

VOID DOC_SRF04()
{
KC2=0;
// reset gia tri
FOR(I=0;I// dem 1 lan tinh trung binh
{
GT_TRAN=0;
//bao gia tri tran
TAO_XUNG_TRIGGER(); // khi tran thi doc gia tri
KC2 = KC2 +KC1 +GT_TRAN*65536;
}
KC2 = KC2/K;
KC2 = KC2/5;
18


Đề tài: Mạch đo mực nước

KC2 = (KC2/58);
KC2 = KC2*100;

KQ = KC2;
IF(KC2<45000)
{
LCD_GUILENH (0X06);
LCD_GUILENH (0X0C);
LCD_GUILENH (0XC0);
LCD_VIETKITU (" ");
LCD_GUILENH (0XCC);
LCD_VIETKITU ("
");
LCD_GUILENH (0XC5);
LCD_VIETKITU (KQ/10000+0x30);
LCD_VIETKITU (KQ/1000%10+0X30);
LCD_VIETKITU (KQ/100%10+0X30);
LCD_VIETKITU (".");
LCD_VIETKITU (KQ/10%10+0X30);
LCD_VIETKITU("cm");
}
}
VOID DOC_KHOANG_CACH()
{
}
VOID MAIN()
{
SET_TRIS_D(0X00);
LCD_KHOITAO();
SETUP_SRF04();
LCD_GUILENH(0X82);
LCD_VIETKITU("DIEN-DIEN TU");
LCD_GUILENH(0XC5);

LCD_VIETKITU("DO AN 1");
DELAY_MS(2000);
LCD_GUILENH(0X80);
LCD_VIETKITU("PHUNG MINH THUAN");
LCD_GUILENH(0XC4);
LCD_VIETKITU("41302392");
DELAY_MS(3000);
LCD_GUILENH(0X80);
19


Đề tài: Mạch đo mực nước

LCD_VIETKITU("DO KHOANG CACH

");

WHILE(TRUE)
{
DOC_SRF04();
}
}
END;

20



×