Đánh giá đề tài

Một phần của tài liệu kl dinh cong duy 2015 621 384 (Trang 58 - 76)

Trong quá trình thực hiện đề tài, em đã thu được những kết quả nhất định như sau:

Mạch điện với module nhỏ trên mạch được thiết kế, thi công hoàn chỉnh và đã được thử nghiệm nhiều lần và đã hoạt động ổn định trong thực tế.

Xây dựng được mô hình thu tín hiệu sóng GPS và gởi tọa độ về điện thoại di động.

Đồ án đã trình bày khá đầy đủ về chức năng, cấu trúc của từng khối nhỏ trên board mạch điện tích hợp. Như vậy, có thể giúp người đọc có thể nắm bắt, hiểu được chức năng của từng module một cách dễ dàng. Bên cạnh đó, nội dung của đồ án được trình bày khá chi tiết rõ ràng bằng cách sử dụng những từ ngữ thông dụng, các hình ảnh đi kèm giúp người đọc dễ hiểu và có thể thực hiện một cách tương tự, đạt hiệu quả trong thời gian ngắn.

Để thực hiện được các chức năng trong đồ án, em đã tìm hiểu, nghiên cứu các vấn đề có liên quan tới đề tài như: vi điều khiển Arduino Uno, Module Sim908, ngôn ngữ lập trình tương ứng cho vi điều khiển Arduino Uno, bộ lệnh AT Command dành cho Module, và các vấn đề khác liên quan tới đề tài.

4.2 Hướng phát triển đề tài

Do thời gian thực hiện đề tài có hạn và lượng kiến thức bản thân còn hạn chế nên đồ án mới chỉ đáp ứng được một phần nhỏ của một hệ thống hoàn chỉnh.

Vì vậy, để đồ án này thêm phong phú hơn, mang nhiều tính thực tế hơn, có khả năng ứng dụng cao hơn thì cần đưa thêm vào những yêu cầu sau:

 Thực hiện việc tắt máy xe khi bị di chuyển trái phép.

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

 Mở rộng điều khiển được các thiết bị.

 Sử dụng thêm nhiều loại cảm biến khác, chẳng hạn như cảm biến nhiệt độ, độ ẩm để đo nhiệt độ, độ ẩm của vị trí hiện tại, hệ thống báo cháy tự động… để ứng dụng vào đồ án.

Hy vọng với những hướng phát triển nêu trên làm cho đề tài trở nên phong phú hơn, mang tính ứng dụng cao hơn vào trong thực tế cuộc sống, phục vụ những lợi ích của con người trong tương lai.

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

PHỤ LỤC 1: AT COMMAND

Nguồn:

1. Các lệnh khởi tạo

Lệnh AT <cr>

- Nếu lệnh thực hiện được thì trả về: ”OK”, bắt đầu thực hiện các lệnh tiếp theo.

- Nếu lệnh không thực hiện được thì trả về dạng: +CMS ERROR <eer>

Lệnh AT + CMGF= [<mode>] <cr>

- Nếu lệnh thực hiện được thì trả về: ”OK”.

<mode>: 0 dạng dữ liệu PDU.

<mode>: 1 dạng dữ liệu kiểu text.

- Nếu lệnh không thực hiện được thì trả về dạng: +CMS ERROR <eer>

2. Các lệnh xử lý cuộc gọi

Lệnh thực hiện cuộc gọi:

ATD<cr>

Ví dụ: muốn quay tới số điện thoại 01214535834 thì gõ lệnh:

ATD01214535834;<cr>

<cr>: Enter

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

Lệnh nhấc máy:

ATA<cr>

Ví dụ: khi có số điện thoại nào đó gọi đến số điện thoại gắn trên modem Sim, ta muốn nhấc máy để kết nối thì ta gõ lệnh:

ATA<cr>

Lệnh bỏ cuộc gọi:

ATH<cr>

Ví dụ: khi có số điện thoại nào đó gọi đến số điện thoại được gắn trên modem Sim, không muốn nhấc máy mà từ chối cuộc gọi thì gõ lệnh: ATH<cr>

3. Các lệnh về SMS

Lệnh xóa tin nhắn:

AT + CMGD

Ví dụ: muốn xóa một tin nhắn nào đó được lưu trên sim thì ta thực hiện lệnh sau:

AT+CMGD=<index><cr>

<index>: vị trí ngăn nhớ lưu tin nhắn.

- Nếu lệnh thực hiện được thì trả về: ”OK”.

- Nếu lệnh không thực hiện được thì trả về dạng: +CMS ERROR <eer>

Lệnh đọc tin nhắn:

AT+CMGR=<index>[mode]<cr>

<index>: số nguyên, đó là vị trí ngăn nhớ chứa tin nhắn cần đọc.

<mode>: 0 dạng dữ liệu PDU.

<mode>: 1 dạng dữ liệu kiểu text.

- Nếu lệnh bị lỗi thì trả về dưới dạng: +CMS ERROR <eer>

Lệnh gởi tin nhắn SMS:

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

AT+CMGS

- Nếu gởi tin nhắn dưới dạng text: (+CMGT=1)

+CMGS:<da>,[<toda>]<CR> text is entered <ctrl-Z/ESC>

- Nếu gởi tin nhắn dưới dạng PDU: (+CMGR=0) +CMGS=<length><CR> PDU is given <ctrl-Z/ESC>

Lệnh viết tin nhắn rồi lưu vào ngăn nhớ: AT+CMGW - Nếu viết tin nhắn dưới dạng text:

AT+CMGW=[<oa/da>[,<tooa/toda>[,<stat>]]]<CR> text is entered <ctrl- Z/ESC><ESC>

- Lệnh được thực hiện đúng thì dữ liệu trả về dạng: +CMGW:<index> OK - Nếu lệnh bị lỗi thì trả về dưới dạng: +CMS ERROR <eer>

4. Các lệnh về GPS

SimCom cung cấp hệ thống các lệnh AT Command để điều khiển GPS, nhiệm vụ quan trọng là khả năng áp dụng lệnh vào từng ứng dụng cụ thể mà người dùng mong muốn.

STT Lệnh Chức năng

1 AT+CGPSPWR Điều khiển nguồn GPS.

2 AT+CGPSRST Đặt lại chế độ GPS (Hot/Warm/Cold) 3 AT+CGPSINF Nhận thông tin vị trí GPS hiện tại.

4 AT+CGPSOUT Điều khiển dữ liệu ra NMEA GPS

5 AT+CGPSSTATUS Tình trạng GPS

6 AT+CGPSIPR Set tốc độ baudrate

Bảng 4: Chức năng các lệnh GPS

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

5. Cấu hình các tập lệnh cơ bản về GPS

Lệnh AT+CGPSPWR:

a. Lệnh test:

AT+CGPSPWR=?

Phản hồi: + CGPSPWR (danh sách các mode).

b. Lệnh đọc AT+CGPSPWR?

Phản hồi: + CGPSPWR:[mode]

c. Lệnh ghi

AT+CGPSPWR=[mode]

[mode]: 0 tắt nguồn GPS [mode]: 1 bật nguồn GPS

Lệnh AT+CGPSRST:

a. Lệnh test:

AT+CGPSRST=?

Phản hồi: + CGPSRST: (danh sách các mode) b. Lệnh đọc:

AT+CGPSRST?

Phản hồi: + CGPSRST:[mode]

c. Lệnh ghi:

AT+CGPSRST=[mode]

[mode]: 0 reset GPS in COLD start mode [mode]: 1 mode tự động

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

Lệnh AT+CGPSINF a. Lệnh test:

AT+CGPSINF=?

Phản hồi: +CGPSINF:(0,2,4,8,16,32,64,128) b. Lệnh đọc:

AT+CGPSINF=[mode]

Nếu [mode] là 0 thì phản hồi:

[mode],[kinh độ],[vĩ độ],[độ cao],[UTC time],[TTFF],[num],[tốc độ],[course]

Lệnh AT+CGPSOUT a. Lệnh test:

AT+CGPSOUT=?

Phản hồi: +CGPSOUT:(0-255) b. Lệnh đọc:

AT+CGPSOUT?

Phản hồi: +CGPSOUT:[mode]

c. Lệnh ghi:

AT+CGPSOUT=[mode]

Nếu mode là 0 thì: giảm thiểu thông tin ngõ ra GPS NMEA từ debug UART Nếu: Bit1=1, cho phép dữ liệu ngõ ra NMEA

Lệnh AT+CGPSSTATUS a. Lệnh test:

AT+CGPSSTATUS=?

Phản hồi: +CGPSSTATUS: (danh sách các mode) b. Lệnh đọc:

AT+CGPSSTATUS?

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

Phản hồi: +AT+CGPSSTATUS:[mode]

Các thông số GPS MODE RESET và [mode] là một giá trị chuỗi:

“Location Not Fix”: GPS đã chạy và không cố định

“Location 2D Fix”: trạng thái GPS cố định 2D

“Location 3D Fix”: trạng thái GPS cố định 3D

Lệnh AT+CGPSIPR a. Lệnh test:

AT+CGPSIPR=?

Phản hồi: +CGPSIPR: (danh sách các mode) b. Lệnh đọc:

AT+CGPSIPR:[mode]

c. Lệnh ghi:

AT+CGPSIPR=[mode]

[mode]: 4800,9600,19200,38400,57600,115200,230400,460800

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

PHỤ LỤC 2: MÃ NGUỒN CHƯƠNG TRÌNH

#include "LiquidCrystal.h"; //THU VIEN LCD

#include <string.h>;

#include <math.h>

#include <stdlib.h>

#include <stdio.h>

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

int8_t answer;

int onModulePin= 8;

int PWR = A3;

short sms_mode = false;

const int buffer_size = 300;

char c=0;

char *ptr1_p=0;

char *ptr1_l=0;

char *ptr1_u=0;

char *ptr2=0;

char *buffer_map=0;

char aux_string[30];

char map_string[100];

char aux1_string[30];

char latitude_data[12];

char longitude_data[13];

char tocdo_data[12];

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

float tocdo=0;

float tocdo_map=0;

float latitude=0;

float latitude_map=0;

float longitude=0;

float longitude_map=0;

char tr_tocdo_map[13];

char tr_latitude_map[12];

char tr_longitude_map[13];

char latitude_map1[12];

char longitude_map1[13];

char number[]="0975861101"; // so dien thoai cua chu xe char buffer[buffer_size]; // Du lieu tu UART

int xbuff=0;

int k,m,b,d,e,f;

char positions[]="odau";

char lock[]="luuvitri";

char unlock[]="movitri";

char cgpsinf[]="32";

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

void setup() {

pinMode(PWR, OUTPUT);

power_on(); // bật Module SIM908

init_SIM908(); // thiet lap cho module SIM908 erase_buffer(); }

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

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

void loop() { while (1) {

receive_uart(); // giao tiep UART if (k==2)

{unlocked();

k=0;

m=0;}

if (k==3) {vitri();

k=0;}

if (k==4) {luuvitri();

m=1;

k=0;

b = (int)tr_longitude_map;

d = (int)tr_latitude_map;}

while (m==1) {get_position();

e = (int)tr_longitude_map; //chuyển sang cùng một hệ f = (int)tr_latitude_map;

if (b!=e && d!=f)

{ sprintf(aux_string,"ATD%s;",number);

do{ answer = sendAT(aux_string,"BUSY",52000);} while(answer==0);

m=0;

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

break;}

else if (b==e && d==f) { break;}}}

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

void vitri() { get_position();

sprintf(aux_string,"AT+CMGS=\"%s\"",number);

do { answer = sendAT(aux_string,">",2000);} while(answer==0); //

gui tin nhan den chu xe

sprintf(aux1_string, "Toa do: %sN %sE \nVan toc: %s Km/h "

,tr_latitude_map,tr_longitude_map,tr_tocdo_map);

Serial.println(aux1_string);

sprintf(map_string,"Hien thi tren Google Map:

http://maps.google.com/maps?q=%s,%s&t=m&z=36",tr_latitude_map,tr_longitu de_map);

Serial.println(map_string);

Serial.write(26);

erase_buffer();

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

void luuvitri() { get_position();

sprintf(aux_string,"AT+CMGS=\"%s\"",number);

do { answer = sendAT(aux_string,">",2000);} while(answer==0); //

Send the SMS number

sprintf(aux1_string,"Da luu vi tri!");

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

Serial.println(aux1_string);

sprintf(map_string, "Vi tri da luu:

http://maps.google.com/maps?q=%s,%s&t=m&z=36",tr_latitude_map,tr_longitu de_map);

Serial.println(map_string);

Serial.write(26);

erase_buffer(); }

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

void unlocked() { get_position();

sprintf(aux_string,"AT+CMGS=\"%s\"",number);

do { answer = sendAT(aux_string,">",2000);} while(answer==0); //

Send the SMS number

sprintf(aux1_string,"Da mo vi tri!");

Serial.println(aux1_string);

sprintf(map_string,"Vi tri hien tai:

http://maps.google.com/maps?q=%s,%s&t=m&z=36",tr_latitude_map,tr_longitu de_map);

Serial.println(map_string);

Serial.write(26);

erase_buffer();

}

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

void init_SIM908() {

do { answer = sendAT("AT+CREG?","+CREG: 0,1",1000);}

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

while(answer==0); // ket noi voi mang // thiết lập GSM

do { answer = sendAT("ATE0","OK",1000);} while(answer==0);

do { answer = sendAT("AT+CMGF=1", "OK",1000);} while(answer==0);

// cai dat che do SMS

do { answer = sendAT("AT+CNMI=2,2,2,0,0", "OK",1000);} while(answer==0);

Serial.write(26);

// thiết lập GPS

do { answer = sendAT("AT+CGPSIPR=9600","OK",1000);} while(answer==0);

do { answer = sendAT("AT+CGPSPWR=1","OK",1000);} while(answer==0);

do { answer = sendAT("AT+CGPSRST=0","OK",1000);} while(answer==0);

do { answer = sendAT("AT+CGPSOUT=32","OK",1000);} while(answer==0);

do { answer = sendAT("AT+CGPSSTATUS?","Location 3D Fix",2000);}

while(answer==0);

sprintf(aux_string,"AT+CMGS=\"%s\"",number);

do {answer = sendAT(aux_string,">",2000); } while(answer==0);

Serial.write(26); }

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

int sendAT(char* ATcommand, char* expected_answer, unsigned int timeout) { int x=0, answer=0;

char response[100];

unsigned long previous;

memset(response, '\0', 100); // Initialize the string delay(100);

while( Serial.available() > 0) Serial.read();

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

Serial.println(ATcommand);

x = 0;

previous = millis();

do {

if(Serial.available() != 0){

response[x] = Serial.read();

x++;

if (strstr(response, expected_answer) != NULL) { answer = 1; buffer_map=response; } } }

while((answer == 0) && ((millis() - previous) < timeout));

return answer; }

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

void power_on(){

answer = sendAT("AT", "OK", 2000);

if(answer==0)

{digitalWrite(PWR,HIGH); // Create pulse trigger on pin power key of Module SIM908

delay(2000);

digitalWrite(PWR,LOW);

while(answer==0) {answer = sendAT("AT", "OK", 2000);} } } //****************************************************************

void erase_buffer() { unsigned int i;

for(i=0;i<buffer_size;i++){buffer[i]=0x00; } for(i=0;i<100;i++) {map_string[i]=0x00; }

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

for(i=0;i<30;i++) {aux_string[i]=0x00; aux1_string[i]=0x00; }

for(i=0;i<12;i++){ longitude_data[i]=0x00; tr_longitude_map[i]=0x00; } for(i=0;i<11;i++){ latitude_data[i]=0x00; tr_latitude_map[i]=0x00; } for(i=0;i<3;i++){tocdo_data[i]=0x00; tr_tocdo_map[i]=0x00;}

xbuff=0x00;

c=0x00;

sms_mode=false;

return; }

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

void receive_uart() {

while(Serial.available()==0) {}

while(Serial.available()>0) { c= Serial.read();

if(c=='#')

sms_mode=true;

}

if (xbuff >= buffer_size) { xbuff=0;

} else{

buffer[xbuff++]=c;

}

if(sms_mode) // nhan tin nhan de lay vi tri len Google Map {

ptr1_p=strstr(buffer,positions); // kiểm tra tin nhắn đến là lấy vị trí

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

ptr1_l=strstr(buffer,lock); // kiểm tra tin nhắn đến là khóa xe ptr1_u=strstr(buffer,unlock); // kiểm tra tin nhắn đến là mở khóa xe if(strncmp(ptr1_u,unlock,9)==0)

{ k=2;

m=0;}

else if(strncmp(ptr1_p,positions,9)==0) {k=3;}

else if(strncmp(ptr1_l,lock,9)==0) {k=4;}}}

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

void get_position() { int i = 0;

int temp1 = 0;

float temp2 = 0;

do{answer=sendAT("AT+CGPSINF=32","OK",2000);} while(answer==0);

ptr2=strstr(buffer_map,cgpsinf);

for (i=0;i<=10;i++){latitude_data[i]=ptr2[i+16];}

latitude=atof(latitude_data);

temp1=latitude/100;

temp2=latitude-(temp1*100);

temp2=temp2/60;

latitude_map=temp1+temp2;

for (i=0;i<=11;i++){longitude_data[i]=ptr2[i+30];}

longitude=atof(longitude_data);

temp1=longitude/100;

Định vị và theo dõi phương tiện giao thông SVTH: Đinh Công Duy

temp2=longitude-(temp1*100);

temp2=temp2/60;

longitude_map=temp1+temp2;

dtostrf(latitude_map,0,4,tr_latitude_map);

dtostrf(longitude_map,0,4,tr_longitude_map);

for (i=0;i<=3;i++){tocdo_data[i]=ptr2[i+45];}

tocdo=atof(tocdo_data);

tocdo_map=tocdo*1,852;

dtostrf(tocdo_map,0,2,tr_tocdo_map);

}

*****************************************************************

Một phần của tài liệu kl dinh cong duy 2015 621 384 (Trang 58 - 76)

Tải bản đầy đủ (PDF)

(76 trang)