Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
4,2 MB
Nội dung
VIẾT CHƯƠNG TRÌNH GIÁM SÁT VÀ ĐIỀU KHIỂN MỰC NƯỚC DÙNG PIC ĐỒ ÁN HỆ THỐNG NHÚNG KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HĨA VIẾT CHƯƠNG TRÌNH GIÁM SÁT VÀ ĐIỀU KHIỂN MỰC NƯỚC DÙNG PIC ĐỒ ÁN HỆ THỐNG NHÚNG KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG MỤC LỤC • DANH MỤC CÁC HÌNH VẼ ĐỒ ÁN HỆ THỐNG NHÚNG Trang 4/64 CHƯƠNG 1.1 GIỚI THIỆU ĐỀ TÀI Giới thiệu: Ngày với phát triển công nghệ, hoạt động sản xuất sinh hoạt hàng ngày chuyển đổi theo hướng tự động hóa Với mục đích nghiên cứu, ứng dụng kiến thức lập trình vi điều khiển học vào dự án thực tế nên em định nghiên cứu đề tài dùng cảm biến siêu âm để đo, hiển thị mực nước điều khiển mực nước bồn 1.2 Đối tượng nghiên cứu Để hệ thống đo khoảng cách điều khiển mực nước hoạt động tốt cần phải nghiên cứu đối tượng sau: • PIC 16f877A – Bộ điều khiển hệ thống • Cảm biến siêu âm • Màn hình LCD để hiển thị giá trị • Máy bơm 1.3 Phạm vi nghiên cứu Phạm vi nghiên cứu bao gồm: • Tìm hiểu vi sử lý cảm biến • Thiết kế sơ đồ nguyên lý cho hệ thống • Viết chương trình hoạt động cho hệ thống • Chạy mơ • Thiết kệ mạch in làm mạch thực tế cho hệ thống • Thiết kế phần cứng hoàn thiện chạy hệ thống 1.4 Kết dự kiến • Cảm biến siêu âm hoạt động đo khoảng cách • LCD nhận giá trị trả từ chương trình cảm biến để thị khoảng cách Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 5/64 • Khi mức nước xuống đến giá trị càu đặt kích hoạt máy bơm • Khi bơm đến giá trị giới hạn ngừng bơm CHƯƠNG 2.1 Linh kiện IC 7805: 2.1.1 Tổng Quan: • LÝ THUYẾT LIÊN QUAN LM7805 hay 7805 IC điều chỉnh điện áp dương đầu 5V Nó IC dịng ổn áp dương LM78xx IC sử dụng rộng rãi thiết bị thương mại giáo dục, dễ sử dụng không cần nhiều linh kiện bên ngồi IC có nhiều tính tích hợp lý tưởng để sử dụng nhiều ứng dụng điện tử dòng điện đầu 1.5A, chức bảo vệ tải, bảo vệ q nhiệt, dịng điện tĩnh thấp Hình Linh kiện LM7805 2.1.2 Các linh kiện cần có mạch: Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 6/64 Hình 2 Các linh kiện chi tiết mạch • Cọc nguồn đầu vào 3A • Diode 3A • Cầu chì 1A • Tụ điện hóa • LED báo nguồn • Ôn áp • Cọc nguồn đầu 2.1.3 Cấu tạo chân: Pin 1: Input chức chân cung cấp điện áp đầu vào (12VDC-40VDC) Nó phải năm khoảng từ 7V đén 35 V Ap dụng điện áp khơng kiểm sốt cho chân để điều chỉnh Đối với đầu vào 7.2 V IC đạt hiệu suất tối đa Pin 2-Ground: Chân nối đất, input output chân trung tính Pin 3- Output: chân dùng để lấy điện áp đầu hiệu chỉnh 5V Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 7/64 Hình Sơ đồ chân 2.2 Linh kiện PIC 16F877A 2.2.1 Cấu trúc tổng quát • PIC16F877A Vi điều khiển PIC 40 chân sử dụng hầu hết dự án ứng dụng nhúng Nó có năm cổng cổng A đến cổng E Nó có ba định thời có định thời bit định thời 16 Bit Nó hỗ trợ nhiều giao thức giao tiếp giao thức nối tiếp, giao thức song song, giao thức I2C PIC16F877A hỗ trợ ngắt chân phần cứng ngắt định thời Hình Cấu trúc tổng quát PIC16F877A • 8K x 14 bits/word Flash ROM Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 8/64 • 368 x Bytes RAM • 256 x Bytes EEPROM • Port xuất/nhập (A, B, C, D, E) tương ứng 33 chân • Bộ định thời bit Timer Timer • Bộ định thời 16 bit Timer 1, hoạt động chế độ tiết kiệm lượng (SLEEP MODE) với nguồn xung clock ngồi • Bộ Capture/ Compare/ PWM.(Bắt Giữ/ So Sánh/ Điều Biến Xung) • Bộ biến đổi Analog to Digital 10 bit, ngõ vào • Bộ so sánh tương tự (Compartor) • Bộ định thời giám sát (Watch Dog Timer) • Cổng giao tiếp song song bit • Port nối tiếp • 15 Nguồn ngắt (Interrupt) • Tập lệnh gồm 35 lệnh có độ dài 14 bit • Tần số hoạt động tối đa 20 MHz 2.2.2 Sơ đồ chân Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 9/64 Hình Sơ đồ chân LCD 2.2.3 Chức chân Chân Tên Chức – MCLR: Hoạt động Reset mức thấp MCLR/VPP – VPP : ngõ vào áp lập trình – RA0: xuất/nhập số RA0/AN0 – AN0 : ngõ vào tương tự – RA1 : xuất/nhập số RA1/AN1 – AN1: ngõ vào tương tự RA2/AN2/VREF-/CV – RA2: xuất/nhập số REF Dùng cảm biến siêu âm đo mực nước – AN2: ngõ vào tương tự ĐỒ ÁN HỆ THỐNG NHÚNG Trang 10/64 – VREF -: ngõ vào điện áp chuẩn (thấp) A/D – RA3: xuất/nhập số RA3/AN3/VREF+ – AN3: ngõ vào tương tự – VREF+ : ngõ vào điện áp chuẩn (cao) A/D – RA4: xuất/nhập số RA4/TOCKI/C1OUT – TOCKI: ngõ vào xung clock bên cho timer0 – C1 OUT : Ngõ so sánh – RA5: xuất/nhập số RA5/AN4//SS – AN4: ngõ vào tương tự /C2OUT – SS: ngõ vào chọn lựa SPI phụ – C2 OUT : ngõ so sánh – RE0: xuất nhập số RE0//RD/AN5 – 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ố RE1//WR/AN6 – WR: điều khiển việc ghi port nhánh song song – AN6 : ngõ vào tương tự Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 50/64 // Chuong trinh Bom Nuoc float Distance() { float timer1 = 0; //int1 result = 0; output_high(trigger); delay_us(20); output_low(trigger); while(!input(echo)){} //result = 1; set_timer1(0); while(input(echo)) { if (get_timer1() >= 65300) { timer1 = 0xffff; } } float timer = timer1 + get_timer1(); set_timer1(0); float Dis = timer / 58.0; timer2 = timer; return Dis; } float Get_Distance() { float Dist = 0; for (int i = 0; i < 1; i++) Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 51/64 { Dist += Distance(); delay_us(10); } Dist = (Dist/1)*0.2; Dist = abs(((float)High_tank + (float)Posi) - (Dist )); return Dist; } float Get_Distance_2() { float Dist = 0; Dist = Distance(); //delay_us(100); //} Dist = (Dist)*0.2; //Dist = abs(((float)High_tank + (float)Posi) - (Dist + (float)Posi)); return Dist; } void Run_Pump(float range_in, float Max, float Min) { if (range_in > (Max*1.0)) { output_low(pin_c2); lcd_gotoxy(1,2); printf(lcd_putc," "); Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 52/64 lcd_gotoxy(1,2); printf(lcd_putc,"Pump is Stop"); } if (range_in < (Min*1.0)) { output_high(pin_c2); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc,"Pump is running"); } } void Display_LoiChao() { lcd_gotoxy(3,1); printf(lcd_putc,"Do An HTN"); delay_ms(2000); lcd_putc("\f"); lcd_gotoxy(3,1); printf(lcd_putc,"GVHD"); lcd_gotoxy(1,2); printf(lcd_putc,"TS.DONGSITHIENCHAU"); delay_ms(2000); lcd_putc("\f"); lcd_gotoxy(1,1); printf(lcd_putc,"Ngo Hong Quan"); lcd_gotoxy(1,2); printf(lcd_putc,"41703021"); Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 53/64 delay_ms(2000); lcd_putc("\f"); } void Display_main() { Diss = Get_Distance(); float range = (Diss*100)/High_tank; lcd_gotoxy(1,1); printf(lcd_putc,"PV:%fcm", Diss); if (Diss >= (float)Max_value) { printf(lcd_putc,"| Full"); } else { printf(lcd_putc,"| "); } Run_Pump(Diss, (float)Max_value, (float)Min_value); } /*void Display_main_test() { Diss = Get_Distance(); float range = (Diss*100)/High_tank; lcd_gotoxy(1,1); printf(lcd_putc,"PV:%fcm", Diss); printf(lcd_putc,"|%f", range); //Run_Pump(Diss, Max_value, Min_value); }*/ Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 54/64 void Manual() { if (input(pin_e1) == 0) { while (input(pin_e1) == 0){} output_high(pin_c2); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc,"Pump is running"); } if (input(pin_e2) == 0) { while (input(pin_e2) == 0){} output_low(pin_c2); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc,"Pump is Stop"); } } // Chuong trinh Cai dat float Change_value(float Value) { if (input(pin_e1) == 0) { while (input(pin_e1) == 0){} Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 55/64 Value += 1; } if (input(pin_e2) == 0) { while (input(pin_e2) == 0){} Value -= 1; } return value; } //****************************************************************** ****** void main () { lcd_init(); setup_timer_1(T1_INTERNAL || T1_DIV_BY_1); int Mode = 0; Display_LoiChao(); Max_value = read_eeprom(0x00); Min_value = read_eeprom(0x01); High_Tank = read_eeprom(0x02); Posi = read_eeprom(0x03); while(true) { // Doc lai du lieu tu eeprom Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 56/64 // Chuong trinh Bom Nuoc while (Setting == 0) { if (Mode == 0) { Display_main(); if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting += 1; lcd_putc("\f"); } delay_ms(100); } if (Mode == 1) { lcd_gotoxy(1,1); printf(lcd_putc,"Manual"); Manual(); if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting += 1; lcd_putc("\f"); } } if (input(pin_e2) == && input(pin_e1) == 0) { while (input(pin_e2) == || input(pin_e1) == 0){} Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 57/64 Setting = 6; lcd_putc("\f"); } if (input(pin_e0) == && input(pin_e1) == 0) { while (input(pin_e0) == || input(pin_e1) == 0){} lcd_putc("\f"); int1 c = 0; while (c == 0) { lcd_gotoxy(2,1); printf(lcd_putc,"Mo Van "); if (input(pin_e1) == 0) { while (input(pin_e1) == 0){} Setting = 7; set = 0; lcd_putc("\f"); c = 1; } } } } // Chuong trinh cai dat muc max while (Setting == 1) { Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 58/64 output_low(pin_c2); Max_value = Change_value(Max_value); lcd_gotoxy(1,1); printf(lcd_putc,"Gia tri muc tren:"); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(4,2); printf(lcd_putc,"%f", (float)Max_value); if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting += 1; write_eeprom(0x00,Max_value); Max_value = read_eeprom(0x00); lcd_putc("\f"); } delay_ms(100); } // Chuong trinh cai dat muc while (Setting == 2) { output_low(pin_c2); Min_value = Change_value(Min_value); lcd_gotoxy(1,1); printf(lcd_putc,"Gia tri muc duoi:"); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(4,2); printf(lcd_putc,"%f", (float)Min_value); Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 59/64 if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting += 1; write_eeprom(0x01,Min_value); Min_value = read_eeprom(0x01); lcd_putc("\f"); } delay_ms(100); } // Chuong trinh cai dat chieu cao Tank while (Setting == 3) { output_low(pin_c2); High_Tank = Change_value(High_Tank); lcd_gotoxy(1,1); printf(lcd_putc,"Chieu cao tank:"); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(4,2); printf(lcd_putc,"%f", (float)High_Tank); if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting += 1; write_eeprom(0x02,High_Tank); High_Tank = read_eeprom(0x02); lcd_putc("\f"); } Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 60/64 delay_ms(100); } // Chuong trinh cai dat Position cua cam bien while (Setting == 4) { output_low(pin_c2); Posi = Change_value(Posi); lcd_gotoxy(1,1); printf(lcd_putc,"Hieu chinh:"); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(4,2); printf(lcd_putc,"%f", (float)Posi); if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting += 1; write_eeprom(0x03,Posi); Posi = read_eeprom(0x03); lcd_putc("\f"); } delay_ms(100); } // Chuong trinh Cai dat Mode chay while (Setting == 5) { output_low(pin_c2); Mode = Change_value(Mode); Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 61/64 if (Mode > 1) { Mode = 0; } lcd_gotoxy(1,1); printf(lcd_putc,"Che Do:"); if (Mode == 0) { lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(4,2); printf(lcd_putc,"Auto"); delay_ms(10); } if (Mode == 1) { lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(4,2); printf(lcd_putc,"Manual"); delay_ms(10); } if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting = 0; lcd_putc("\f"); } Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 62/64 delay_ms(100); } // Chuong trinh test cam bien while (Setting == 6) { delay_ms(100); output_low(pin_c2); lcd_gotoxy(1,1); printf(lcd_putc,"Distane: "); lcd_gotoxy(4,2); printf(lcd_putc,"%f", Get_Distance_2()); if (input(pin_e0) == 0) { while (input(pin_e0) == 0){} Setting = 7; lcd_putc("\f"); } if (input(pin_e2) == && input(pin_e1) == 0) { while (input(pin_e2) == || input(pin_e1) == 0){} Setting = 0; lcd_putc("\f"); } delay_ms(100); } while (Setting == 7) { while (set == 0) Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 63/64 { lcd_gotoxy(2,1); printf(lcd_putc,"C.Dai Bon: "); printf(lcd_putc,"%d", (int8)Get_Distance_2()); if (input(pin_e1) == 0) { while (input(pin_e1) == 0){} } delay_ms(300); } if (input(pin_e0) == && input(pin_e1) == 0) { while (input(pin_e2) == || input(pin_e1) == 0){} Setting = 0; lcd_putc("\f"); } delay_ms(100); } } delay_ms(100); } //lenh chuyen doi float sang char //sprintf(c, "%f", range); Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG NHÚNG Trang 64/64 //printf(lcd_putc,": %s", c); Dùng cảm biến siêu âm đo mực nước ... RD 1, RD2 PIC chấn D 4, D 5, D 6, D7 linh kiện nối với Ngoài để điều khiển máy bơm kích hoạt máy bơm ta nối chân RC2 PIC vào Motor, chân E 0, E 1, E2 vi điều khiển nối vào nút nhấn để điều khiển chế... Phần mềm CCS • CCS trình biên dịch lập trình ngơn ngữ C cho vi điều khiển PIC • CCS trình biên dịch lập trình ngơn ngữ C cho Vi điều khiển PIC hãng Microchip CHƯƠNG 3.1 THIẾT KẾ VÀ THI CÔNG Sơ đồ... chấp hành lệnh điều khiển, gồm có phần switch điều khiển, màng hình LCD hiển thị thơng số đo tình trạng hoạt động mạch, máy bơm nước vào hệ thống Dùng cảm biến siêu âm đo mực nước ĐỒ ÁN HỆ THỐNG