Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
1,87 MB
Nội dung
TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THỦ ĐỨC KHOA ĐIỆN – ĐIỆN TỬ BÁO CÁO KẾT QUẢ THỰC HIỆN ĐỀ TÀI NGHIÊN CỨU KHOA HỌC ĐỀ TÀI: XÂY DỰNG MƠ HÌNH ĐỊNH VỊ TỌA ĐỘ SỬ DỤNG MODULE SIM908 VÀ MẠCH ARDUINO Đơn vị chủ trì: KHOA ĐIỆN – ĐIỆN TỬ Chủ nhiệm đề tài: Ths Trần Thị Thu Lý Tp Hồ Chí Minh, tháng năm 2017 MỤC LỤC Trang Chương 1: TỔNG QUAN VỀ MẠCH ARDUINO 1.1 Giới thiệu mạch Arduino 1.2 Mạch Arduino UNO R3 1.2.1 Thông số kỹ thuật Arduino Uno R3 1.2.3 Các chân lượng mạch Arduino R3 1.2.3 Bộ nhớ Arduino Uno R3 1.2.4 Cổng vào/ra Arduino Uno R3 1.3 Mạch Arduino Easy Shield Chương 2: GIỚI THIỆU MODULE SIM 908 2.1 Giới thiệu định vị GPS 2.1.1 Hoạt động GPS 2.1.2 Tín hiệu GPS 2.1.3 Tính tọa độ GPS 2.2 Mạng thông tin di động GSM 11 2.2.1 Vài nét lịch sử mạng GSM 11 2.2.2 Các tiêu kỹ thuật mạng GSM 13 2.2.3 Cấu trúc hệ thống GSM 14 2.3 GSM/GPS SIM908 Easy 15 2.3.1 Giới thiệu GSM/GPS SIM908 Easy 15 2.3.2 Tính GSM/GPS SIM908 Easy 17 2.3.3 Sơ đồ kết nối GSM/GPS SIM908 Easy 20 2.3.4 Kích thước GSM/GPS SIM908 Easy 21 Chương 3: MƠ HÌNH ĐỊNH VỊ TỌA ĐỘ SỬ DỤNG MODULE SIM 908 VÀ MẠCH ARDUINO 22 3.1 Sơ đồ kết nối mạch 22 3.2 Định vị tọa độ qua tin nhắn SMS 28 3.3 Hiển thị vị trí lên Google map 32 Chương 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 34 4.1 Kết luận 34 4.2 Hướng phát triển đề tài 34 TÀI LIỆU THAM KHẢO 35 PHỤ LỤC 36 Chương 1: TỔNG QUAN VỀ MẠCH ARDUINO 1.1 Giới thiệu mạch Arduino Arduino bo mạch vi điều khiển nhóm giáo sư sinh viên Ý thiết kế đưa vào năm 2005 Mạch Arduino sử dụng để cảm nhận điều khiển nhiều đối tượng khác Nó thực nhiều nhiệm vụ từ lấy tín hiệu từ cảm biến đến điều khiển đèn, động cơ, nhiều đối tượng khác Ngồi mạch cịn có khả liên kết với nhiều module khác module đọc thẻ từ, ethernet shield, sim908, ….để tăng khả ứng dụng mạch Phần cứng bao gồm board mạch nguồn mở thiết kế tảng vi xử lý AVR Atmel 8bit, ARM, Atmel 32-bit,… Hiện nay, phần cứng Arduino có tất phiên Tuy nhiên phiên thường sử dụng nhiều Arduino Uno Arduino Mega Arduino Uno sử dụng rộng rãi giới, nhiều ví dụ youtube trang hướng dẫn Arduino sử dụng mạch Vì bạn học Arduino, việc chọn Arduino Uno giúp bạn tự học dễ dàng Phần mềm để lập trình cho mạch Arduino phần mềm IDE Đây phần mềm mã nguồn mở, download từ trang web Arduino Hiện giới có nhiều kênh youtube nhiều trang web, nhân chuyên hướng dẫn chia miễn phí dự án Arduino Vì bạn có vốn tiếng Anh tự học từ internet, từ trang web nước ngồi Ở Việt Nam có nhiều trang web kênh youtube hướng dẫn tự học Arduino Bản thân tác giả có kênh youtube để chia sẻ code dự án Arduino Hiện Việt Nam giới có nhiều bo mạch vi điều khiển khác Tuy nhiên Arduino có số ưu điểm mà khiến trở nên tiếng sử dụng rộng rãi giới Những ưu điểm là: rẻ, tương thích với nhiều hệ điều hành, chương trình lập trình đơn giản, rõ ràng, dễ sử dụng, sử dụng mã nguồn mở kết hợp với nhiều module khác 1.2 Mạch Arduino UNO R3 1.2.1 Thông số kỹ thuật Arduino Uno R3 Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động 5V DC (chỉ cấp qua cổng USB) Tần số hoạt động 16 MHz Dòng tiêu thụ khoảng 30mA Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC Số chân Digital I/O c h Số chân Analog â nDòng tối đa chân I/O 14 (6 chân hardware PWM) C c n ă n g (độ phân giải 10bit) 30 mA Dòng tối đa (5V) 500 mA Dòng tối đa (3.3V) 50 mA Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bootloader l SRAM ợ EEPROM n g mạch Arduino R3 KB (ATmega328) KB (ATmega328) - GND (Ground): cực âm nguồn điện cấp cho Arduino UNO Khi bạn dùng thiết bị sử dụng nguồn điện riêng biệt chân phải nối với - 5V: Cấp điện áp 5V đầu Dòng tối đa cho phép chân 500mA - 3.3V: cấp điện áp 3.3V đầu Dòng tối đa cho phép chân 50mA - Vin (Voltage Input): để cấp nguồn cho Arduino UNO, bạn nối cực dương nguồn với chân cực âm nguồn với chân GND - IOREF: điện áp hoạt động vi điều khiển Arduino UNO đo chân Và dĩ nhiên ln 5V Mặc dù bạn không lấy nguồn 5V từ chân để sử dụng chức khơng phải cấp nguồn - RESET: việc nhấn nút Reset board để reset vi điều khiển tương đương với việc chân RESET nối với GND qua điện trở 10KΩ Lưu ý: - Arduino UNO khơng có bảo vệ cắm ngược nguồn vào Do bạn phải cẩn thận, kiểm tra cực âm – dương nguồn trước cấp cho Arduino UNO Việc làm chập mạch nguồn vào làm Arduino không sử dụng Trong thời gian đầu tìm hiểu tốt sử dụng nguồn cấp qua cổng USB - Các chân 3.3V 5V Arduino chân dùng để cấp nguồn cho thiết bị khác, chân cấp nguồn vào Việc cấp nguồn sai vị trí làm hỏng board - Cấp nguồn ngồi không qua cổng USB cho Arduino UNO với điện áp 6V làm hỏng board - Cấp điện áp 13V vào chân RESET board làm hỏng vi điều khiển ATmega328 - Cường độ dòng điện vào/ra tất chân Digital Analog Arduino UNO vượt 200mA làm hỏng vi điều khiển - Cấp điệp áp 5.5V vào chân Digital Analog Arduino UNO làm hỏng vi điều khiển - Cường độ dòng điện qua chân Digital Analog Arduino UNO vượt 40mA làm hỏng vi điều khiển Do khơng dùng để truyền nhận liệu, bạn phải mắc điện trở hạn dòng 1.2.3 Bộ nhớ Arduino Uno R3 Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng: - 32KB nhớ Flash: đoạn lệnh bạn lập trình lưu trữ nhớ Flash vi điều khiển Sẽ có khoảng vài KB số dùng cho bootloader thường phải sử dụng 20kb nhớ - 2KB cho SRAM (Static Random Access Memory): giá trị biến bạn khai báo lập trình lưu Bạn khai báo nhiều biến cần nhiều nhớ RAM Tuy vậy, thực nhớ RAM lại trở thành thứ mà bạn phải bận tâm Chú ý: điện, liệu SRAM bị - 1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): tương tự ổ cứng mini – nơi đọc ghi liệu vào mà lo bị mất điện giống liệu SRAM 1.2.4 Cổng vào/ra Arduino Uno R3 Arduino UNO có 14 chân digital dùng để đọc xuất tín hiệu Chúng có mức điện áp 0V 5V với dòng vào/ra tối đa chân 40mA Ở chân có điện trở pull-up từ cài đặt vi điều khiển ATmega328 (mặc định điện trở khơng kết nối) Hình 1: Cổng ra/vào arduino Một số chân digital có chức đặc biệt sau: - chân Serial: (RX) (TX): dùng để gửi (transmit – TX) nhận (receive – RX) liệu TTL Serial Arduino Uno giao tiếp với thiết bị khác thông qua chân Kết nối bluetooth thường thấy nói nơm na kết nối Serial khơng dây Nếu không cần giao tiếp Serial, bạn không nên sử dụng chân không cần thiết - Chân PWM (~): 3, 5, 6, 9, 10, 11: cho phép bạn xuất xung PWM với độ phân giải 8bit (giá trị từ → 28-1 tương ứng với 0V → 5V) hàm analogWrite() Nói cách đơn giản, bạn điều chỉnh điện áp chân từ mức 0V đến 5V thay cố định mức 0V 5V chân khác - Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài chức thơng thường, chân cịn dùng để truyền phát liệu giao thức SPI với thiết bị khác - LED 13: Arduino UNO có đèn led màu cam (kí hiệu chữ L) Khi bấm nút Reset, bạn thấy đèn nhấp nháy để báo hiệu Nó nối với chân số 13 Khi chân người dùng sử dụng, LED sáng - Arduino UNO có chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp khoảng 0V → 5V Với chân AREF board, bạn để đưa vào điện áp tham chiếu sử dụng chân analog Tức bạn cấp điện áp 2.5V vào chân bạn dùng chân analog để đo điện áp khoảng từ 0V → 2.5V với độ phân giải 10bit - Đặc biệt, Arduino UNO có chân A4 (SDA) A5 (SCL) hỗ trợ giao tiếp I2C/TWI với thiết bị khác 1.3 Mạch Arduino Easy Shield Arduino UNO Easy Shield board mở rộng cho Arduino UNO board tương thích với Arduino Sản phẩm hỗ trợ ATCBus socket cho phép người dùng kết nối Easy Board với Arduino UNO cách nhanh chóng dễ dàng để thực ứng dụng như: GSM, GPS, Wifi, Bluetooth, Ngồi ra, Shield có hỗ trợ Switch cho phép nạp chương trình cho Arduino mà khơng cần phải tháo board thiết bị lắp Shield Bên cạnh đó, với kích thước tương đương với Arduino UNO, ngõ liệu tiện dụng, Arduino UNO Easy Shield mang lại cảm hứng tinh tế kết hợp Arduino Easy Board Chương 2: GIỚI THIỆU MODULE SIM 908 2.1 Giới thiệu định vị GPS Hệ thống định vị toàn cầu (Global Positioning System - GPS) hệ thống xác định vị trí dựa vị trí vệ tinh nhân tạo Trong thời điểm, vị trí mặt đất thiết bị GPS xác định khoảng cách đến ba vệ tinh (tối thiểu) tính vị trí tọa độ thiết bị GPS GPS ban đầu dùng cho mục đích qn sự, khơng hệ đưa đảm bảo tồn liên tục độ xác Vì chúng khơng thỏa mãn yêu cầu an toàn ngày cao cho hệ thống dẫn đường dân hàng không hàng hải Đặc biệt vùng thời điểm có hoạt động quân quốc gia sở hữu hệ thống Do khơng thỏa mãn nhu cầu nên từ năm 1980 phủ Mỹ cho phép sử dụng hệ thống định vị toàn cầu dân 2.1.1 Hoạt động GPS Các vệ tinh GPS bay vòng quanh trái đất hai lần ngày theo quỹ đạo xác phát tín hiệu có thơng tin xuống Trái Đất Về chất máy thu GPS so sánh thời gian tín hiệu phát từ vệ tinh với thời gian nhận chúng Sai lệch thời gian cho biết máy thu GPS cách vệ tinh bao xa Rồi với nhiều quãng cách đo tới nhiều vệ tinh máy thu tính vị trí người dùng hiển thị lên đồ điện tử máy Máy thu phải nhận tín hiệu ba vệ tinh để tính vị trí hai chiều (kinh độ vĩ độ) để theo dõi chuyển động Khi nhận tín hiệu vệ tinh máy thu tính vị trí ba chiều (kinh độ, vĩ độ độ cao) Một vị trí người dùng tính máy thu GPS tính thơng tin khác, tốc độ, hướng chuyển động, bám sát di chuyển, khoảng hành trình, quãng cách tới điểm đến, thời gian mặt trời mọc, lặn nhiều thứ khác 2.1.2 Tín hiệu GPS Vệ tinh GPS phát hai tín hiệu vô tuyến công suất thấp dải L1 L2 (dải L phần sóng cực ngắn phổ điện từ trải rộng từ 0,39 tới 1,55 GHz) GPS dân dùng tần số L1 Nhắn tin SMS để lấy tọa độ điện thoại với cú pháp: Hệ thống trả tin nhắn chứa tọa độ 3.3 Hiển thị vị trí lên Google map Để hiển thị lên Google Map click vào đường dẫn sau chọn ứng dụng Google Map để hiển thị tọa độ Tọa độ hiển thị lên Google Map Chương 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 4.1 Kết luận Qua tháng thực đề tài, công việc giảng dạy nhiều chủ nhiệm đề tài cố gắng hoàn thành đề tài thời hạn Đề tài Mơ hình định vị tọa độ sử dụng module Sim 908 mạch Arduino đạt số kết sau: + Đã hồn thành mơ hình định vị tọa độ + Viết code cho mơ hình định vị tọa độ + Xác định tọa độ mơ hình thơng qua tin nhắn SMS + Hiển thị vị trí lên Google Map Mặc dù đề tài đạt kết bước đầu đề Tuy nhiên, đề tài có số hạn chế như: Hệ thống định vị GPS có cơng suất cịn yếu, có lúc mơ hình khơng nhận tín hiệu GPS vị trí che khuất nhiều 4.2 Hướng phát triển đề tài Từ đề tài có chủ nhiệm đề tài nâng cao chất lượng việc định vị tọa độ công suất cách xác đinh như: + Nâng cao công suất hệ thống định vị GPS + Mơ hình định vị tọa độ liên kết tự động với Google Map TÀI LIỆU THAM KHẢO [1] Phạm Cơng Hùng - Nguyễn Hồng Hải - Tạ Vũ Hằng - Vũ Thị Minh Tú, Giáo Trình Thơng Tin Di Động NXB Khoa Học Kỹ Thuật 2007 [2] Trần Mạnh Tuấn – Đào Thị Hồng Diệp, Các hệ thống vệ tịnh định vị toàn cầu ứng dụng, NXB Giáo Dục 2012 [3] Tham khảo website: http://www.at-sky.com.vn [4] Tham khảo website: http://www arduino.vn PHỤ LỤC Code mơ hình định vị tọa độ sử dụng module SIM908 mạch Arduino int PWR = A3; int LedConfig = 13; int answer; short sms_mode=false; const int buffer_size = 300; char c=0; char c1=0; char *ptr1=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]; float latitude=0; float latitude_map=0; float longitude=0; float longitude_map=0; char tr_latitude_map[12]; char tr_longitude_map[13]; // Buffer size you can adjust this size char number[]="0909666414"; char buffer[buffer_size]; // Số điện thoại // Dữ liệu từ UART int xbuff=0; char positions[]="positions"; //syntax: #positions char pass[7]="123456"; // Password tối đa ký tự char cgpsinf[]="32"; //********************************************************************vo id setup() { Serial.begin(9600); pinMode(PWR, OUTPUT); pinMode(LedConfig, OUTPUT); power_on(); init_SIM908(); // Mở nguồn Module SIM908 // Khai báo GSM GPS cho Module SIM908 erase_buffer(); } //********************************************************************vo id loop() { receive_uart(); if(sms_mode) // Nhận UART // nhận tin nhắn SMS từ GPS { ptr1=strstr(buffer,positions); // Kiểm tra tin nhắn SMS if(strncmp(ptr1,positions,9)==0) { if (ptr1[10]==pass[0] && ptr1[11]==pass[1] && ptr1[12]==pass[2] && ptr1[13]==pass[3] && ptr1[14]==pass[4] && ptr1[15]==pass[5]) //checking password { get_position(); sprintf(aux_string,"AT+CMGS=\"%s\"",number); { answer = sendAT(aux_string,">",2000);} while(answer==0); SMS number // Send the //sprintf(aux1_string,"%s,N,%s,E",tr_latitude_map,tr_longitude_map); // Serial.println(aux1_string); sprintf(map_string,"http://maps.google.com/maps?q=%s,%s&t=m&z=36",tr_latitude_map,t r_longitude_map); Serial.println(map_string); Serial.write(26); erase_buffer(); } }}} //******************************************************************** void init_SIM908() { digitalWrite(LedConfig, LOW); { answer = sendAT("AT+CREG?","+CREG: 0,1",1000);} while(answer==0); Kết nối mạng // // Cấu hình GSM { answer = sendAT("ATE0","OK",1000);} while(answer==0); { answer = sendAT("AT+CMGF=1", "OK",1000);} while(answer==0); SMS into text mode // Set { answer = sendAT("AT+CNMI=2,2,2,0,0", "OK",1000);} while(answer==0); // Set Message mode when receive new SMS sprintf(aux_string,"AT+CMGS=\"%s\"",number); {answer = sendAT(aux_string,">",2000); } while(answer==0); message to number after config GSM Serial.println("GSM fution is ready"); Serial.write(26); // Send the SMS // Cấu hình GPS { answer = sendAT("AT+CGPSIPR=9600","OK",1000);} while(answer==0); { answer = sendAT("AT+CGPSPWR=1","OK",1000);} while(answer==0); { answer = sendAT("AT+CGPSRST=0","OK",1000);} while(answer==0); { answer = sendAT("AT+CGPSOUT=32","OK",1000);} while(answer==0); { answer while(answer==0); = sendAT("AT+CGPSSTATUS?","Location 3D Fix",5000);} sprintf(aux_string,"AT+CMGS=\"%s\"",number); {answer = sendAT(aux_string,">",2000); } while(answer==0); message to number after config GPS // Send the SMS Serial.println("GPS function is ready"); Serial.write(26); digitalWrite(LedConfig, HIGH); } //******************************************************************** 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(); Serial.println(ATcommand); x = 0; previous = millis(); { 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); // tạo xung cho 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