ĐIỀU KHIỂN và GIÁM sát THIẾT bị TRONG NHÀ QUA điện THOẠI SMS dùng pic16f877a (có code và layout bên dưới) ĐIỀU KHIỂN và GIÁM sát THIẾT bị TRONG NHÀ QUA điện THOẠI SMS dùng pic16f877a (có code và layout bên dưới) ĐIỀU KHIỂN và GIÁM sát THIẾT bị TRONG NHÀ QUA điện THOẠI SMS dùng pic16f877a (có code và layout bên dưới) ĐIỀU KHIỂN và GIÁM sát THIẾT bị TRONG NHÀ QUA điện THOẠI SMS dùng pic16f877a (có code và layout bên dưới) ĐIỀU KHIỂN và GIÁM sát THIẾT bị TRONG NHÀ QUA điện THOẠI SMS dùng pic16f877a (có code và layout bên dưới)
ĐỒ ÁN ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ TRONG NHÀ QUA ĐIỆN THOẠI (SMS) MỤC LỤC DANH MỤC CÁC HÌNH VẼ HÌNH 2-1: SƠ ĐỒ CÁC CHÂN TRONG PIC16F877A[1] .5 HÌNH 2-2: SƠ ĐỒ KHỐI CỦA PIC16F877A[1] .7 HÌNH 2-3: SƠ ĐỒ CÁC CHÂN TRONG LCD 16X2[1] .8 HÌNH 2-4: SƠ ĐỒ CHÂN TRONG SIM900A[1] HÌNH 2-5: SENSOR CẢM BIẾN ÁNH SÁNG[1] 11 HÌNH 2-6: MODULE THỜI GIAN THỰC DS1307[1] 11 HÌNH 3-: MẠCH NGUYÊN LÝ TRÊN PROTEUS .14 HÌNH 3-2: LAYOUT MẠCH TRÊN PROTEUS 15 DANH MỤC CÁC BẢNG BIỂU BẢNG 2-1: CHỨC NĂNG CÁC CHÂN PIC16F877A BẢNG 2-2: CHỨC NĂNG CÁC CHÂN TRONG LCD 16X2 BẢNG 2-3: CHỨC NĂNG CÁC CHÂN TRONG SIM900A BẢNG 2-4: TẬP LỆNH AT TRONG SIM900A 10 BẢNG 2-5: CHỨC NĂNG CÁC CHÂN TRONG DS1307 12 BẢNG 2-6: BẢNG CHI TIẾT CÁC THANH GHI .12 DANH MỤC CÁC TỪ VIẾT TẮT LCD Liquid Crystal Display IC Integrated Circuit EEPROM Electrically Erasable Programmable Read-Only Memory RAM Random Access Memory SRAM Shadow Random Access Memory ISP Internet Service Provider RISC Reduced Instructions Set Computer ĐỒ ÁN Trang 6/32 CHƯƠNG GIỚI THIỆU ĐỀ TÀI 1.1 Đặt vấn đề Ngày nay, yếu tố tự động thiếu để sống đại, điều khiển thiết bị dân dụng hay nông nghiệp từ xa giúp người sử dụng thuận tiện bật tắt, hẹn giờ, hay đảm bảo độ xác q trình hoạt động thiết bị: thời gian tưới nước, lượng nước, tự động tắt quên… Vì vậy, với nhu cầu đó, mạch điều khiển thiết bị qua SMS giúp nhiều nơng nghiệp, gia đình 1.2 Nhiệm vụ đề tài - Dùng VDK PIC - Bật tắt đèn, kết hợp sensor quang - Cài đặt thời gian tưới qua SMS - Giám sát trạng thái thiết bị - Thiết kế thi công hệ thống 1.3 Đã thực - Sử dụng điện thoại để điều khiển bật tắt thiết bị ( đèn LED) trực tiếp qua - SMS Dùng cảm biến ánh sáng để tự động bật tắt đèn thiếu ánh sang, đèn thay đổi trạng thái, hệ thống gửi tin nhắn lên điện thoại người - dùng Hẹn thời gian bật tắt thiết bị, ứng dụng hệ thống tưới nước tự động, có sử dụng module thời gian thực thị thời gian lên LCD 1.4 Các đối tượng nghiên cứu - Tìm hiểu vi xử lý PIC16F877A Module SIM900A Ngơn ngữ lập trình PIC Sensor cảm biến ánh sang Module thời gian thực DS1307 Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 7/32 CHƯƠNG THIẾT KẾ HỆ THỐNG 1.5 Sơ đồ khối hệ thống Khối truyền nhận lệnh (SIM900) Thiết bị Khối điều khiển Thiết bị điều khiển (PIC16F877A) Cảm biến ánh sáng (điện thoại) Module thời gian Khối thị Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) thực (LCD 16x2) ĐỒ ÁN Trang 8/32 Chức khối: - Khối điều khiển, đảm bảo mạch hoạt động bình thường, điều khiển, xử lý liệu từ module, gửi nhận thông tin từ Sim900, module thời gian, cảm - biến ánh sang, thiết bị Khối hiển thị (LCD) hiển thị thời gian thực, trạng thái thiết bị SIM900A nhận lệnh điều khiển từ người dùng, gửi khối điều khiển, sau - nhận lệnh từ khối điều khiển, thông báo cho người dùng Thiết bị hiển thị trạng thái bật tắt 1.6 Tìm hiểu linh kiện 1.1.1 PIC16F877A 1.1.1.1Giới thiệu PIC16F877A dòng PIC phổ biến nay, ứng dụng nhiều mạch điện tử thông dụng, cấu trúc tổng quát gồm: - 8K Flash ROM 368 bytes RAM ports vào với tín hiệu điều khiển độc lập định thời bits ( Timer 0,2 ) định thời 16 bits (Timer 1) CCP( Capture - Compare - PWM) biến đổi AD 10 bits, ngõ vào so sánh tương tự Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 9/32 - định thời giám sát (WatchDog Timer) cổng song song bits với tín hiệu điều khiển cổng nối tiếp 15 nguồn ngắt Có chế độ tiết kiệm lượng Nạp chương trình cổng nối tiếp ICSP(In-Circuit Serial Programming) Được chế tạo công nghệ CMOS 35 tập lệnh có độ dài 14 bits Tần số hoạt động tối đa 20MHz 1.1.1.2Sơ đồ chân HÌNH 2-1: SƠ ĐỒ CÁC CHÂN TRONG PIC16F877A[1] OSC1/CLKIN Chân ngõ vào mạch dao động thạch anh Định tần cho xung nhịp chân ngõ vào mạch tạo xung Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 10/32 OSC2/CLKOUT nhịp Chân ngõ mạch dao động thạch anh ngõ xung nhịp (Master Chân Reset Lệnh tác dụng mức áp thấp MCLR Clear) RA0, RA1, RA2, Chân xuất nhập Port A RA3 RA4/TOCKI Chân đa nhiệm, vừa làm chân xuất nhập Port A lại RB0/INT chân lấy xung cho đếm đồng hồ Timer Chân đa nhiệm, vừa làm chân xuất nhập Port B lại chân phát động theo ngắt Các chân Port B lập trình để có trở kháng lớn dùng để làm ngả vào, nhập trạng thái vào PIC RB1, RB2, RB3 Chân xuất nhập Port B RB4, RB5 Chân xuất nhập Port B phát động ngắt theo thay đổi chân RB6 Chân xuất nhập Port B phát động ngắt theo thay đổi chân Nó lập trình để dùng chân phát xung nhịp dùng cho công truyền liệu nối tiếp RB7 Chân xuất nhập Port B phát động ngắt theo thay đổi chân Nó lập trình để dùng chân trao đổi liệu dùng cho công truyền liệu nối tiếp VSS Chân nối đất để lấy dòng (ở dòng điện tử) VDD Chân nối vào nguồn dương (từ 2V đến 5.5V) BẢNG 2.1: CHỨC NĂNG CÁC CHÂN TRONG PIC16F877A Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 22/32 TÀI LIỆU THAM KHẢO Tiếng Việt: [1] http://www.arduino.vn Tiếng Anh: [2] http://www.codebender.cc [3] http://www.ykh.io [4] http://www.arduinotcu.wordexpress.com [5] http://www.electroschematics.com Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 23/32 PHỤ LỤC #include #include / ******************************************************************* ******************************************************************* ***/ / ******************************************************************* ******************************************************************* ***/ //Khai bao bien toan cuc char sms[90]; //Luu tin nhan nhan duoc vao mang char c,c1,c2,c3,c4;//Kiem tra co tin nhan moi unsigned int8 i=0,j=0,k=0; unsigned int8 new_sms=0,hen; unsigned int8 index=0; char st[4]; #define as input(pin_D5) int Giay,Phut , Gio ,tam; / *******************,************************************************ ******************************************************************* ***/ void Delete_SMS(); //Ham xoa tin nhan Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 24/32 void send_sms(unsigned char n); //Ham gui tin nhan xac dinh sim900a khoi dong xong void call(); void anh_sang(); void khoi_tao(); //Cau hinh SIM void clear_buffer(unsigned int8 time); //Reset lai bo nho dem de tranh bi treo void Turn_ON(char name); //Ham bat thiet bi void Turn_OFF(char name); //Ham tat thiet bi void All_ON(); //Ham tat ca bat thiet bi void All_OFF(); //Ham tat ca tat thiet bi //Khi gui tin nhan den SIM900A se xay ngat RDA #INT_RDA void Serial(){ //Ngat du lieu truyen nhan (Ngat UART) // - Phan nhan xu ly tin nhan c= getc(); //Gan ki tu vua moi nhan dc vao bien tam sms[index++]=c; //Nap ki tu vao mang if(index>90) {index=0;} if(c=='+') c1=c; if(c=='C') c2=c; if(c=='M') c3=c; if(c=='T') c4=c; Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 25/32 if(c1=='+' && c2=='C' && c3=='M' && c4=='T') new_sms=1; //Kiem tra du lieu ban dau no nhan duoc chinh la tin nhan moi } void main() { // set_tris_C(0b10000000); lcd_init(); //Ham khoi tao LCD lcd_putc('\f'); //Xoa trang man hinh enable_interrupts(INT_RDA); //Cho phep ngat UART enable_interrupts(GLOBAL); delay_us(10); All_OFF(); khoi_tao(); clear_buffer(1); lcd_gotoxy(1,1); printf(lcd_putc," He thong khoi "); lcd_gotoxy(1,2); printf(lcd_putc," dong hoan tat! "); delay_ms(5000); while(true) { Turn_ON(sms[0]); Turn_OFF(sms[0]); Mạch điều khiển giám sát thiết bị nhà qua điện thoại (SMS) ĐỒ ÁN Trang 26/32 anh_sang(); second = BCDtoDEC(read_DS1307(0)); minute = BCDtoDEC(read_DS1307(1)); hour = BCDtoDEC(read_DS1307(2)); thu = BCDtoDEC(read_DS1307(3)); lcd_gotoxy(1,1); printf(lcd_putc," T%d %02d:%02d:%02d ",thu,hour,minute,second); lcd_gotoxy(1,2); printf(lcd_putc,"TB:%c TB1:%c TB2:%c ",st[0],st[1],st[2]); if(hour==Gio && minute==Phut && second >= Giay) { if(tam==0){ Turn_OFF(hen); send_sms(hen); } if(tam==1) { Turn_ON(hen); send_sms(hen); } } if(new_sms==1)//Neu la tin nhan moi { for(int i=0;i