CODE CHƯƠNG TRÌNH

Một phần của tài liệu THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN VÀ CẢNH BÁO QUA HỆ THỐNG SMS (Trang 44)

THIẾT KẾ VÀ THI CÔNG MẠCH HỆ THỐNG

6.4CODE CHƯƠNG TRÌNH

/********************************************************************/ /*****CHUONG TRINH DIEU KHIEN THIET BI VA CANH BAO QUA TIN NHAN SMS****/ /********************************************************************/ #include <htc.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #include <string.h> Nhiệt độ < 25 Nhiệt độ dưới ngưỡng Gởi tin cảnh báo yes no Nhiệt độ 25 35 Nhiệt độ trong ngưỡng yes no Nhiệt độ > 35 Nhiệt độ quá ngưỡng yes no

#include "uart.h" // Cau hinh ket noi va khai bao lenh dung cho giao tiep UART. #include "lcd.h" // Cau hinh ket noi va khai bao lenh dung cho LCD.

__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS); #define _XTAL_FREQ 4000000

#define buff_size 50

const char code_number[]='0','1','2','3','4','5','6','7','8','9'; unsigned char buff_sms[buff_size];

unsigned char flag_isr; unsigned char dk_tb,temp; unsigned char buff;

unsigned char khoa,dem,tinmoi;

//********************************************* const char cgram[]=

{

0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x99// ma chuoi ket thuc

};

//********************************************* void int_PORTA()

{ PORTA=0X0F; TRISA=0X0FF; } void int_PORTB() { PORTB = 0X01; TRISB = 0X01; } void int_PORTD() { PORTD = 0X00; TRISD = 0X00; } //********************************** //chuong trinh tao thoi gian tre 1ms

//================================== void delay(unsigned char ms)

{

unsigned char i; for(i=0;i<ms;i++) {

__delay_ms(100); }

}

//========================= void uart_AT(const char *s)

{ uart_puts(s); uart_putc(13); } //========================= void cauhinh_sim900() {

uart_AT("AT");//kiem tra ket noi mang delay(5);

uart_AT("ATZ");//reset modulm delay(5);

uart_AT("ATZ"); delay(5);

uart_AT("ATE0");//tat che do echo delay(5);

delay(5);

uart_AT("AT+IPR=9600");// thiet lap toc do truyen delay(5);

uart_AT("AT&W");//luu cau hinh hien tai delay(5);

uart_AT("AT+CMGF=1");// dang du lieu dinh dang text de gui tin delay(5);

uart_AT("AT+CNMI=2,0,0,0,0");// thiet lap che do nhan tin nhan tu mang delay(5);

uart_AT("AT+CSAS");// luu thiet lap delay(5);

} (adsbygoogle = window.adsbygoogle || []).push({});

//============================ void send_sms(const char *text)

{

uart_puts("AT+CMGS=");//lenh gui tin nhan AT+CMGS = "0984845579" uart_putc(34);

uart_puts("0984845579"); uart_putc(34);

uart_putc(13);//<cr> delay(5);

uart_puts(text);//data sms delay(5); uart_putc(26); uart_putc(13); delay(35); }

void send_nhietdo(unsigned char temp,const char *text) {

unsigned char nhiet_do[3],i; for (i=0;i<=2;i++) { nhiet_do[i] = code_number[temp%10]; temp=temp/10; } uart_puts("AT+CMGS="); uart_putc(34); uart_puts("0984845579"); uart_putc(34); uart_putc(13);//<cr> delay(5);

if(nhiet_do[2] == '0') uart_putc(' '); else uart_putc(nhiet_do[2]); uart_putc(nhiet_do[1]); uart_putc(nhiet_do[0]); delay(5); uart_putc(' '); uart_puts(text);//data sms delay(5); uart_putc(26); uart_putc(13); delay(35); } //===================== void doc_sms() { uart_AT("AT+CMGR=1,0"); delay(5); } //=====================

void xoa_sms() { uart_AT("AT+CMGD=1,4"); delay(15); } //==================== void xoa_het_sms() { uart_puts("AT+CMGDA ="); uart_putc(34); uart_puts("DEL ALL"); uart_putc(34); uart_putc(13);//<cr> delay(15); } //==================== void huy_call() { uart_puts("ATH"); uart_putc(13);//<cr>

delay(7); }

//*****chuong trinh xoa mang buff_sms***** void clear_buff() { char i=0; for(i=0;i<strlen(buff_sms);i++) { buff_sms[i]=0x00; } } //****************************************************** char test_string(const char buffer[], const char str[])

{

unsigned char leng_buff = 0; unsigned char leng_str = 0; char i, j; leng_buff = strlen(buffer); leng_str = strlen(str); if (leng_buff >= leng_str) {

for (i = 0; i <= leng_buff - leng_str; i++) { for (j = 0; j < leng_str; j++) { if (buffer[i + j] != str[j]) break; } if (j == leng_str) return 1; } return 0; } return 0; } //*********************************************************** void interrupt isr()

{

unsigned char data;

if(RCIE && RCIF) // Kiem tra cho phep ngat thu cua UART.

{

flag_isr =1; data=uart_getc(); if(data=='#') { khoa=0; tinmoi=1; } if(khoa==1) { buff_sms[dem]=data; dem++; } if(data=='*') { khoa=1; dem=0; } } } //********************************************************** unsigned int read_ADC()

__delay_us(5); // Cho ADC thuc hien lay mau.

GODONE = 1; // Bat dau thuc hien chuyen doi AD. while(GODONE); // Cho ADC thuc hien chuyen doi xong. // Tra ve ket qua ADC sau khi chuyen doi xong.

return (((unsigned int)ADRESH)<<8)|ADRESL;// Ghep byte thap va byte cao cua gia tri ADC.

}

//********************************************************** void init_ADC()

{

unsigned char i,do_C; unsigned long adc_val;

ADCON1 = 0; //khoi dong thanh ghi ADCON1

ADCON0 = 0; //KHOI DONG THANH GHI ADCON0

ADFM = 1; (adsbygoogle = window.adsbygoogle || []).push({});

CHS0 = 1; CHS1 = 0; CHS2 = 0;

ADCS0 = 1; //CHON XUNG TRONG CHIP.

ADCS1 = 1;

adc_val = read_ADC(); delay(1);

do_C = (char)(adc_val*445/1023);

temp = do_C;//gia tri adc de dieu khien thiet bi. }

//********************************************************** void kt_cgram(void)

{ unsigned char i;

i = 0; // Dia chi ky tu dac biet trong bo ma cgram_dat. lcd_put_byte(0,0x40); // Lenh = 40H - Dat CGRAM co dia chi bat dau la 00H.

while(lcd_busy()); // Kiem tra LCD bao ban.

while(cgram[i]!=0x99) // Kiem tra nap xong du lieu cho cac ky tu dac biet, { // ky tu ket thuc chuoi la 99H.

lcd_put_byte(1,cgram[i]);

// Ghi cac ma ky tu dac biet vao CGRAM theo dia chi.

while(lcd_busy()); // Kiem tra LCD bao ban. i++;

} }

//**********************************************************

{

unsigned char i;

lcd_puts("\f NHIET DO LA:"); kt_cgram();

lcd_gotoxy(9,1); lcd_puts("\2C");

for (i=8;i>=6;i--) //Hien thi gia tri ADC cua bien tro R5 len LCD {

lcd_gotoxy(i,1);

lcd_putc(code_number[itemp%10]); //Tach NG-TR-CH-DV va giai ma hien thi LCD

itemp=itemp/10; } } //*********************************************************** void dieukhien() {

if(test_string(buff_sms,"BAT1")) // BAT THIET BI 1 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 1"); delay(7);

RB5 = 0; delay(7);

lcd_puts("\f Thiet Bi 1\n Da Bat"); send_sms("Thiet Bi 1: Da Bat"); clear_buff();

xoa_sms(); return; } (adsbygoogle = window.adsbygoogle || []).push({});

if(test_string(buff_sms,"BAT2")) // BAT THIET BI 2 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 2"); delay(7);

RB6 = 0; delay(7);

lcd_puts("\f Thiet Bi 2\n Da Bat"); send_sms("Thiet Bi 2: Da Bat"); clear_buff();

return; }

if(test_string(buff_sms,"BAT3")) // BAT THIET BI 3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 3"); delay(7);

RB7 = 0; delay(7);

lcd_puts("\f Thiet Bi 3\n Da Bat"); send_sms("Thiet Bi 3: Da Bat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"TAT1")) //TAT THIET BI 1 {

lcd_puts("\f Co Tin Hieu"); delay(7);

delay(7);

RB5 = 1; delay(7);

lcd_puts("\f Thiet Bi 1\n Da Tat"); send_sms("Thiet Bi 1: Da Tat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"TAT2")) // TAT THIET BI 2 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Tat\n Thiet Bi 2"); delay(7);

RB6 = 1; delay(7);

lcd_puts("\f Thiet Bi 2\n Da Tat"); send_sms("Thiet Bi 2: Da Tat"); clear_buff();

return; }

if(test_string(buff_sms,"TAT3")) // TAT THIET BI 3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Tat\n Thiet Bi 3"); delay(7);

RB7 = 1; delay(7);

lcd_puts("\f Thiet Bi 3\n Da Tat"); send_sms("Thiet Bi 3: Da Tat"); clear_buff();

xoa_sms(); return; } (adsbygoogle = window.adsbygoogle || []).push({});

if(test_string(buff_sms,"TAT@123")) //TAT HET CAC THIET BI 1-2-3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

delay(7);

RB5 = 1 ; RB6 = 1; RB7 = 1; delay(7);

lcd_puts("\f Da Tat Het\n Thiet Bi 1 2 3");

send_sms("Thiet Bi 1 - Thiet Bi 2 - Thiet Bi 3: Da Tat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"BAT@123")) // BAT HET CAC THIET BI 1-2-3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 1 2 3"); delay(7);

RB5 = 0 ; RB6 = 0; RB7 = 0; delay(7);

lcd_puts("\f Da Bat Het\n Thiet Bi 1 2 3");

send_sms("Thiet Bi 1 - Thiet Bi 2 - Thiet Bi 3 Da Bat"); clear_buff();

return; }

if(test_string(buff_sms,"BAT@2@3")) // TAT TB1 - MO TB2 VA TB3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 2 3"); delay(7);

RB5 = 1 ; RB6 = 0; RB7 = 0; delay(7);

lcd_puts("\f Da Bat\n Thiet Bi 2 3");

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2 - Thiet Bi 3: Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@1@3")) // TAT TB2 - MO TB1 VA TB3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

delay(7);

RB5 = 0 ; RB6 = 1; RB7 = 0; delay(7);

lcd_puts("\f Da Bat\n Thiet Bi 2 3");

send_sms("Thiet Bi 2: Da Tat \n Thiet Bi 1 - Thiet Bi 3: Da Bat");

clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@1@2")) // TAT TB3 - MO TB1 VA TB2 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 1 2"); delay(7);

RB5 = 0 ; RB6 = 0; RB7 = 1; delay(7);

lcd_puts("\f Da Bat\n Thiet Bi 1 2"); (adsbygoogle = window.adsbygoogle || []).push({});

send_sms("Thiet Bi 3: Da Tat \n Thiet Bi 1 - Thiet Bi 2: Da Bat"); clear_buff();

return; }

if(test_string(buff_sms,"KIEMTRA")) // kiem tra thiet bi dang hoat dong {

lcd_puts("\f Dang Kiem Tra\n Thiet Bi"); if(RB5==0&&RB6==0&&RB7==0)

{

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Bat");

}

if(RB5==1&&RB6==1&&RB7==1) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Tat");

}

if(RB5==0&&RB6==1&&RB7==1) {

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Tat");

}

if(RB5==1&&RB6==0&&RB7==1) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Tat");

}

if(RB5==0&&RB6==0&&RB7==1) {

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Tat");

}

if(RB5==1&&RB6==1&&RB7==0) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Bat");

}

if(RB5==0&&RB6==1&&RB7==0) {

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Bat");

}

if(RB5==1&&RB6==0&&RB7==0) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Bat");

} delay(5); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"TEST@NHIETDO")) {

lcd_puts("\f DANG KIEM TRA \n NHIET DO"); delay(5); send_nhietdo(temp," "); delay(5); clear_buff(); xoa_sms(); return; }

lcd_puts("\f SAI CU PHAP\n KIEM TRA LAI"); delay(5); (adsbygoogle = window.adsbygoogle || []).push({});

send_sms("GUI TIN SAI CU PHAP \n VUI LONG KIEM TRA LAI CU PHAP");

delay(5); clear_buff();

xoa_sms(); }

//*************CHUONG TRINH CHINH***************** void main()

{

int_PORTD(); //Khoi dong portD. RD0 = 1;

delay(8); RD0 = 0;

delay(2);

int_PORTB(); //Khoi dong portA. int_PORTA(); //Khoi dong portB. RB5 = 1;

RB6 = 1; RB7 = 1;

uart_init(); //Khoi dong UART. lcd_init(); //Khoi dong lcd. GIE = 1; // Cho phep ngat toan cuc. PEIE = 1; // Cho phep ngat ngoai vi. lcd_puts("\f Dang Cau Hinh \n Waiting!!!!"); cauhinh_sim900();

delay(50);

lcd_puts("\f Cau Hinh Xong \n Start...."); delay(20);

lcd_puts("\f Welcome To ... \n DO-AN-2A"); delay(15);

lcd_puts("\f--TRONG HIEU--\n--LINH VUONG--"); xoa_het_sms();

clear_buff(); xoa_sms(); flag_isr = 0;

tinmoi = 0;

unsigned char ix=1,iy=1,iz=1; while(1) { init_ADC(); if(temp<=25) { display_temp(temp); delay(15); if(iz) {

lcd_puts("\f Bao Nhiet Do\n Dang Gui Tin");

send_nhietdo(temp,"Nhiet Do Dang Duoi Nguong"); delay(20);

lcd_puts("\f Da Gui Xong"); delay(10); iz=0; } ix =1; iy=1; } if(temp<=35&&temp>25) { display_temp(temp); delay(15); if(ix) {

lcd_puts("\f Bao Nhiet Do\n Dang Gui Tin");

send_nhietdo(temp,"Nhiet Do Dang Trong Nguong"); delay(20);

lcd_puts("\f Da Gui Xong"); delay(10);

ix = 0; } iy =1; iz =1; } if(temp>35) { display_temp(temp); delay(15); if(iy) {

lcd_puts("\f Bao Nhiet Do\n Dang Gui Tin");

send_nhietdo(temp,"Nhiet Do Dang Vuot Qua Nguong"); delay(20);

lcd_puts("\f Da Gui Xong"); delay(10); iy = 0; } ix = 1; iz = 1; }

if(tinmoi) {

dieukhien(); //CHUONG TRINH DIEU KHIEN THIET BI tinmoi = 0; (adsbygoogle = window.adsbygoogle || []).push({});

} }

}

CHƯƠNG 5

KẾT LUẬN HƯỚNG PHÁT TRIỂN ĐỀ TÀI

5.1 KẾT LUẬN

Qua gần 3 tháng tiến hành làm việc, nhóm thực hiện đề tài đã hoàn thành tập báo cáo đúng thời gian quy định và thu được những kết quả nhất định. Nhóm đã thiết kế thành công mạch điều khiển thiết bị và cảnh báo dùng PIC 16F877A.

• Hệ thống điều khiển được 3 thiết bị dân dụng như quạt, máy lạnh,…

• Hệ thống có cảm biến nhiệt độ và báo cho người dùng qua tin nhắn SMS.

• Hệ thống bao gồm các khối Module SIM900, vi điều khiển, khối công suất, thiết bị cảm biết nhiệt độ được mắc cố định đặt tại địa điểm chứa thiêt bị điều khiển.

• Khi người sử dụng ở xa không thể trực tiếp điều khiển thiết bị, người sử dụng có thể kiểm tra trạng thái hoặc điều khiển thiết bị bằng cách gửi tin nhắn SMS.

Ưu khuyết điểm của hệ thống

Ưu điểm:

 Sử dụng mạng viễn thông GSM trong truyền thông mang tính công nghiệp.

 Hệ thống hoạt động ở những vị trí khó khăn mà đường dây điện thoại không có, chỉ cần được mạng di động phủ sóng.

 Hệ thống có thể sử dụng các loại sim của các nhà cung cấp khác nhau như Viettel, Mobile, Vinaphone,…

 Phần cứng được thiết kế đơn giản, sử dụng số linh kiện tối thiểu, kết nối chân ra đáp ứng nhu cầu phát triển đề tài sau này.

 Hệ thống có thể điều khiển thiết bị công cuất nguồn 220V.

 Hệ thống có sử dụng LCD hiển thị quá trình làm việc của vi điều khiển nên dễ dàng phát hiện sai và sữa chữa cho phần mềm.

Khuyết điểm:

 Muốn thay đổi số điện thoại phải lập trình lại CODE và nạp lại chương trình cho PIC 16F877A.

 Hệ thống chỉ hoạt động ở vùng có phủ sóng điện thoại di động.  Hệ thống chỉ điều khiển thiết bị dùng tin nhắn SMS dạng text.  Phải tốn chi phí gửi tin nhắn SMS.

Một phần của tài liệu THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN VÀ CẢNH BÁO QUA HỆ THỐNG SMS (Trang 44)