Tuy chỉ là một bo mạch nhỏ gọn, chi phí thấp vì bo đã được thi công sẵn, tuy nhiên Arduino có thể được ứng dụng vào rất nhiều lĩnh vực khác nhau, ta có thể đo đạc nhiệt độ để điều khiển tưới tiêu trong các nhà vườn, hoặc có thể dùng để điều khiển xe cân bằng rất phổ biến hiện nay, hay có thể ứng dụng nó vào việc điều khiển cánh tay Robot. Ngoài những lợi ích to lớn trên, việc sử dụng và lập trình trên Arduino cũng rất đơn giản, môi trường phát triển đa dạng, hỗ trợ trên nhiều hệ điều hành khác nhau, có thể học 1 cách nhanh chóng. Vì những điểm mạnh ưu việt như vậy nên nhóm đã quyết định chọn Arduino làm bộ xử lý trung tâm cho việc “Thiết kế hệ thống thông minh cảnh báo cho xe máy”.
TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o Tp HCM, ngày 16 tháng năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: Nguyễn Quang Huy Dương Văn Huân Kỹ thuật Điện tử Truyền thơng Đại học quy 2014 MSSV: 14141130 MSSV: 14141120 Mã ngành: 41 Mã hệ: Lớp: 14141DT I TÊN ĐỀ TÀI: THIẾT KẾ HỆ THỐNG THÔNG MINH CẢNH BÁO CHO XE MÁY II NHIỆM VỤ Các số liệu ban đầu: [1] Phạm Quang Huy, Lê Cảnh Trung, “Lập trình điều khiển với Arduino”, NXB Khoa học kỹ thuật, 2014 [2] Trần Thu Hà, “Điện tử bản”, NXB ĐH Quốc Gia Tp.HCM, 2013 Nội dung thực hiện: - Tìm hiểu nhu cầu thực tiễn công nghệ đề tài - Tìm hiểu lý thuyết liên quan, linh kiện sử dụng đề tài - Tính tốn thiết kế hệ thống điều khiển Arduino - Thiết kế mạch, điều khiển thiết bị, lập trình cho hệ thống - Đánh giá kết thực tiến tới hoàn thiện đề tài - Kết luận đề tài, đưa hướng phát triển tương lai III NGÀY GIAO NHIỆM VỤ: 20/3/2018 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 15/7/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: PGS.TS Nguyễn Thanh Hải CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH i TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o -Tp HCM, ngày 16 tháng năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Nguyễn Quang Huy Lớp: 14141DT2B Họ tên sinh viên 2: Dương Văn Huân Lớp: 14141DT1B MSSV:14141130 MSSV:14141120 Tên đề tài: THIẾT KẾ HỆ THỐNG THÔNG MINH CẢNH BÁO CHO XE MÁY Tuần Nội dung Tuần Tìm hiểu cơng nghệ đề tài thực lý thuyết liên quan Tuần Tính tốn thiết kế sơ đồ khối hệ thống Tuần Tính tốn thiết kế sơ đồ nguyên lý mạch cần hệ thống, lựa chọn linh kiện cần thiết cho hệ thống Tuần Nghiên cứu Arduino UNO R3 Tuần Nghiên cứu module sim 808A, cảm biến rung module gia tốc Tuần 6-7 Lập trình giao tiếp Arduino với module sim 808A, cảm biến rung module gia tốc Tuần Tuần 9-10 Chạy thử nghiệm hệ thống testboard, kit Vẽ mạch in, thi công mạch in hệ thống Lắp ráp kiểm tra Tuần 11 Thiết kế mơ hình Tuấn 12 Đóng gói hệ thống chạy thử nghiệm Tuần 13-Tuần 16 Xác nhận GVHD Chạy thử nghiệm cân chỉnh toàn hệ thống Đánh giá kết đạt được, viết báo cáo GV HƯỚNG DẪN ii LỜI CAM ĐOAN Đề tài tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Người thực đề tài Nguyễn Quang Huy Dương Văn Huân iii LỜI CẢM ƠN Trong thời gian thực đề tài, người thực giúp đỡ gia đình, quý thầy cô bạn bè nên đề tài hoàn thành Những người thực xin chân thành gửi lời cảm ơn đến: Thầy Nguyễn Thanh Hải, giảng viên trường Đại Học Sư Phạm Kỹ Thuật Tp.HCM trực tiếp hướng dẫn tận tình giúp đỡ tạo điều kiện để nhóm hồn thành tốt đề tài Những người thực xin chân thành cám ơn đến thầy cô khoa Điện - Điện tử trường Đại Học Sư Phạm Kỹ Thuật Tp.HCM tận tình dạy dỗ, bảo, cung cấp cho người thực kiến thức nền, chuyên môn làm sở để hoàn thành đề tài Cảm ơn gia đình động viên ln ln bên cạnh lúc khó khăn Xin gửi lời cảm ơn đến người bạn sinh viên khoa Điện-Điện tử giúp đỡ người thực đề tài để hồn thành tốt đề tài Xin chân thành cảm ơn! Người thực đề tài Nguyễn Quang Huy Dương Văn Huân iv MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP .i LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ii LỜI CAM ĐOAN iii LỜI CẢM ƠN .iv MỤC LỤC v DANH MỤC HÌNH vii DANH MỤC BẢNG .ix TÓM TẮT x CHƯƠNG TỔNG QUAN 1.1 Đặt vấn đề 1.2 Mục đích nghiên cứu 1.3 Nội dung nghiên cứu 1.4 Giới hạn đề tài 1.5 Bố cục CHƯƠNG CƠ SỞ LÝ THUYẾT .4 2.1 Tổng quan gps .4 2.2 Giới thiệu phần cứng 2.2.1 Board Arduino 2.2.2 Module sim 808a 2.2.3 Cảm biến rung HDX-01 2.2.4 Cảm biến gia tốc MPU-6050 2.3 Các chuẩn giao tiếp 2.3.1 Chuẩn giao tiếp uart v 2.3.2 Chuẩn giao tiếp I2C 10 CHƯƠNG TÍNH TỐN VÀ THIẾT KẾ 11 3.1 Giới thiệu 11 3.2 Tính tốn thiết kế hệ thống 11 3.2.1 Thiết kế sơ đồ khối hệ thống 11 3.2.2 Tính tốn thiết kế mạch 12 3.2.3 Sơ đồ nguyên lý toàn mạch 18 CHƯƠNG THI CÔNG HỆ THỐNG 20 4.1 Giới thiệu 20 4.2 Thi công hệ thống 20 4.2.1 Thi công bo mạch hệ thống 20 4.2.2 Lắp ráp kiểm tra bo mạch hệ thống 21 4.3 Lập trình hệ thống 22 4.3.1 Lưu đồ 22 4.3.2 Phần mềm lập trình cho vi điều khiển 25 4.4 Viết tài liệu hướng dẫn sử dụng, thao tác 29 CHƯƠNG KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ .30 5.1 Kết .30 5.2 Nhận xét – đánh giá 36 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 37 6.1 Kết luận 37 6.2 Hướng phát triển 37 TÀI LIỆU THAM KHẢO 38 DANH SÁCH TỪ VIẾT TẮT 39 PHỤ LỤC .40 vi DANH MỤC HÌNH Hình 2.1 Board Arduino UNO R3 Hình 2.2 Module sim 808A thực tế Hình 2.3 Cảm biến rung HDX-01 Hình 2.4 Cảm biến gia tốc MPU - 6050 Hình 2.5 Giản đồ truyền liệu UART .10 Hình 3.1 Sơ đồ khối hệ thống .12 Hình 3.2 Khối xử lý trung tâm sử dụng board Arduino UNO R3 13 Hình 3.3 Module Sim 808A 13 Hình 3.4 Sơ đồ nguyên lý kết nối Module Sim 808A vào Arduino UNO R3 .14 Hình 3.5 Sơ đồ nguyên lý kết nối module MPU-6050 vào Arduino 15 Hình 3.6 Sơ đồ nguyên lý kết nối cảm biến rung HDX-01 vào Arduino .16 Hình 3.7 Sơ đồ nguyên lý kết nối khối nút nhấn 17 Hình 3.8 Sơ đồ nguyên lý kết nối khối cảnh báo 18 Hình 3.9 Sơ đồ ngun lý tồn mạch 19 Hình 4.1 Sơ đồ dây phủ đồng bo mạch hệ thống 20 Hình 4.2 Hình dạng 3D lớp bo mạch hệ thống 21 Hình 4.3 Lưu đồ cảm biến rung tác động 22 Hình 4.4 Lưu đồ module gia tốc tác động .23 Hình 4.5 Lưu đồ cho chương trình 24 Hình 4.6 Giao diện file menu arduino IDE 25 Hình 4.7 Giao diện Examples menu arduino IDE .26 Hình 4.8 Giao diện Sketch Menu Arduino IDE 26 Hình 4.9 Giao diện edit menu arduino IDE 27 Hình 4.10 Giao diện Tool Menu Arduino IDE 27 Hình 4.11 Board Arduino sử dụng 28 Hình 4.12 Arduino Toolbar 28 Hình 5.1 Hình thực tế khối nút nhấn cảnh báo .31 Hình 5.2 Hình thực tế khối cảm biến 31 Hình 5.3 Hình thực tế gắn linh kiện cho mặt .32 Hình 5.4 Trạng thái led cho biết trạng thái mạch 33 vii Hình 5.6 Thao tác với module gia tốc 34 Hình 5.7 Tọa độ GPS mà module sim gửi điện thoại 34 Hình 5.8 Tra cứu địa với tọa độ nhận 35 Hình 5.9 Lỗi thường gặp anten khơng bắt tín hiệu .35 Hình 5.10 Tin nhắn cảnh báo chống trộm 35 viii DANH MỤC BẢNG Bảng 2.1 Cấu trúc tổng quát Arduino UNO R3 .5 Bảng 5.1 Số liệu thực nghiệm 36 ix TÓM TẮT Cuộc “Cách mạng Công nghiệp 4.0” dần diễn nhiều nước phát triển phát triển toàn giới Công nghệ điều khiển thông minh phát triển theo, chúng ứng dụng nhiều lĩnh vực đời sống Đặc biệt, hệ thống chống trộm, cảnh báo phát triển mạnh mẽ ngày trở nên phổ biến ĐATN thiết kế, thi công mơ hình hệ thống cảnh báo chống trộm tai nạn cho người dùng gắn xe máy Các cảnh báo giá trị vị trí GPS cập nhật gửi tới điện thoại người dùng Người dùng điều khiển mạch điện thoại x PHỤ LỤC } else { digitalWrite(led_xe, LOW); xe_ok = 0; } ////////////////// byte button1 = digitalRead(bat_coi); if (button1 == LOW) { digitalWrite(coi, HIGH); } else { digitalWrite(coi, LOW); } } void dkien1() // ching trinh kiem tra cuoc goi den gui dia xhi xe ve { if (dk1 == 0) { while (modemSerial.available() > 0) { ch = modemSerial.read(); Serial.print(ch); if (ch == '9') { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49 PHỤ LỤC digitalWrite (led_xe, LOW); digitalWrite (coi, HIGH); delay(5000); digitalWrite (coi, LOW); delay(5000); gui_tin(); dk1 = 1; nga = 1; } delay(3); } } } void display_gps() { char float_str[10]; if (g_gps_data.State_gps == true) { dtostrf(g_gps_data.Lat, 10, 6, float_str); if (gps_ok == 0) { Serial.println(float_str); dtostrf(g_gps_data.Lng, 10, 6, float_str); Serial.println( float_str); digitalWrite(led_gps, HIGH); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50 PHỤ LỤC delay(1000); digitalWrite(led_gps, LOW); delay(700); digitalWrite(led_gps, HIGH); delay(1000); digitalWrite(led_gps, LOW); delay(700); digitalWrite(led_gps, HIGH); delay(1000); digitalWrite(led_gps, LOW); delay(700); gps_ok = 1; } } } void gui_tin() // chuong trinh gui tin nhan di { char data_to_send_sms[160]; char tmp_str1[20], tmp_str2[20]; dtostrf(g_gps_data.Lat, 10, 6, tmp_str1); dtostrf(g_gps_data.Lng, 10, 6, tmp_str2); sprintf(data_to_send_sms, " Xe Ban Hien Tai O : https://maps.google.com/maps?q=%s,%s", tmp_str1, tmp_str2); SendSMS(phone_number_to_send, data_to_send_sms); Serial.println("send_ok_ok"); } void goi () // chuong trinh thuc hien cuoc goi { modemSerial.write("AT+CLIP=1\r"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51 PHỤ LỤC modemSerial.write("ATD0968987377;\r"); Serial.write("ATD0968987377x`;\r"); delay(15000); modemSerial.write("ATH\r"); Serial.write("ATH\r"); } void update_gps() { static unsigned long previousMillis; unsigned long currentMillis; // Update GPS data currentMillis = millis(); if (currentMillis - previousMillis >= 2000) { modemSerial.write("AT+CGNSINF\r"); if (readSerialFrame(respond) > 0) { if (strncmp(respond, "\r\n+CGNSINF: ", 12) == 0) { NMEA_GPRMC_Decoder(&g_gps_data, respond + 12); } } previousMillis = currentMillis; } // End Update GPS data } /* Read input serial */ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52 PHỤ LỤC int readSerial(char result[], int time_out) { int i = 0; unsigned long currentMillis, previousMillis; previousMillis = millis(); currentMillis = previousMillis; while (1) { if (currentMillis - previousMillis >= time_out) { return 0; } else { while (modemSerial.available() > 0) { char inChar = modemSerial.read(); if (inChar == '\r') { result[i] = '\0'; modemSerial.flush(); return i; } if (inChar != '*') { result[i] = inChar; i++; } } } currentMillis = millis(); } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 PHỤ LỤC bool SendSMS(char *phone_num, char *data) { unsigned long currentMillis, previousMillis; char sms_cmd[50]; char respond[30]; char command_en[2] = {0x1A, 0}; sprintf(sms_cmd, "AT+CMGS=\"%s\"\r", phone_num); modemSerial.write(sms_cmd); if (readSerialFrame(respond) > 0) { Serial.println(respond); if (strcmp(respond, "\r\n>") != 0) { modemSerial.write(data); } } modemSerial.write(command_en); modemSerial.write(0X1A); Serial.println("send ok"); previousMillis = millis(); currentMillis = previousMillis; while (currentMillis - previousMillis < 12000) // timeout 5s { currentMillis = millis(); if (readSerialFrame(respond) > 0) { Serial.println(respond); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 PHỤ LỤC if (strcmp(respond, "\r\nOK\r\n") != 0) { digitalWrite (led_xinhan, HIGH); delay (3000); digitalWrite (led_xinhan, LOW); return false; } } } delay (2000); return false; } void ModemInit(void) // chuong trinh thiet lap giao tiep giua arduino voi sim808 { static bool is_modem_init_ok = false; int status_pin_level = 0; // to detect modem has been turn-on // Turnon modem: try_on: status_pin_level = analogRead(STATUS_PIN); if (status_pin_level < 500) // Check module on ? if not turn-off { is_modem_init_ok = false; Serial.write("No Sim808"); digitalWrite(PWK_PIN, HIGH); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 PHỤ LỤC delay(2000); digitalWrite(PWK_PIN, LOW); delay(2000); goto try_on; // We try turn-on until module SIM ready too use } if (is_modem_init_ok == false) { Serial.write("Initting "); modemSerial.write("ATE0\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; } } else { goto try_on; } modemSerial.write("AT+CMGF=1\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 PHỤ LỤC } } else { goto try_on; } modemSerial.write("AT+CGNSPWR=1\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; } } else { goto try_on; } modemSerial.write("AT+CGNSSEQ=\"RMC\"\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; } } else BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 PHỤ LỤC { goto try_on; } modemSerial.write("AT+CMGF=1\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; } } else { goto try_on; } modemSerial.write("AT+CNMI=2,2,0,0,0\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; } } else { goto try_on; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 PHỤ LỤC modemSerial.write("AT+CMGDA=DEL ALL\r"); if (readSerialFrame(respond) > 0) { if (strcmp(respond, "\r\nOK\r\n") != 0) { goto try_on; } } else { goto try_on; } is_modem_init_ok = true; Serial.write("Initted"); delay(2000); kt_ok = 1; } } int readSerialFrame(char result[]) { int i = 0; unsigned long currentMillis, previousMillis; previousMillis = millis(); currentMillis = previousMillis; while (1) { if (currentMillis - previousMillis >= 100) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 PHỤ LỤC { return i; } else { if (modemSerial.available() > 0) { previousMillis = currentMillis; char inChar = modemSerial.read(); result[i] = inChar; i++; result[i] = 0; } } currentMillis = millis(); } } static int GetMessageFeilds(unsigned char **message_feildls, unsigned char *msg, unsigned char separate_char, int max_feild_get) { int count_feild = 0; *message_feildls = msg; message_feildls++; count_feild++; while (*msg != '\0') { if (*msg == separate_char) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60 PHỤ LỤC *msg = '\0'; *message_feildls = msg + 1; message_feildls++; count_feild++; if (count_feild >= max_feild_get) return count_feild; } msg++; } return count_feild; } static void NMEA_GPRMC_Decoder(GPS_T *gps_data, char *data_bytes) { //Get data char *message_field[13]; if (GetMessageFeilds(message_field, data_bytes, ',', 13) == 13) { Serial.write(message_field[GPS_FSTS]); Serial.write(message_field[GPS_SPEED]); Serial.write(message_field[GPS_ORG]); Serial.write(message_field[GPS_LON]); Serial.write(message_field[GPS_TIME]); if (strcmp(message_field[GPS_FSTS], "1") == 0) { gps_data->State_gps = true; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61 PHỤ LỤC gps_data->State_gps = true; gps_data->SpeedGPS = atof(message_field[GPS_SPEED]); gps_data->OrGPS = atof(message_field[GPS_ORG]); gps_data->Lat = atof(message_field[GPS_LAT]); gps_data->Lng = atof(message_field[GPS_LON]); } else { gps_data->State_gps = false; gps_data->Lat = 0; gps_data->Lng = 0; gps_data->SpeedGPS = 0; } gps_data->time_gps.time.sec = message_field[GPS_TIME][13] - '0' + 10 * (message_field[GPS_TIME][12] - '0'); gps_data->time_gps.time.minute = message_field[GPS_TIME][11] - '0' + 10 * (message_field[GPS_TIME][10] - '0'); gps_data->time_gps.time.hour = message_field[GPS_TIME][9] - '0' + 10 * (message_field[GPS_TIME][8] - '0'); gps_data->time_gps.time.date = message_field[GPS_TIME][7] - '0' + 10 * (message_field[GPS_TIME][6] - '0'); gps_data->time_gps.time.month = message_field[GPS_TIME][5] - '0' + 10 * (message_field[GPS_TIME][4] - '0'); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62 PHỤ LỤC gps_data->time_gps.time.year = message_field[GPS_TIME][3] - '0' + 10 * (message_field[GPS_TIME][2] - '0') + 100 * (message_field[GPS_TIME][1] - '0') + 1000 * (message_field[GPS_TIME][0] - '0'); } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63 ... THIẾT KẾ HỆ THỐNG 3.2.1 Thiết kế sơ đồ khối hệ thống Hệ thống thông minh cảnh báo cho xe máy thiết kế gồm khối kết nối lại với theo nhiều hướng tạo nên hệ thống hoạt động ổn định trình bày sơ đồ khối... tài: THIẾT KẾ HỆ THỐNG THÔNG MINH CẢNH BÁO CHO XE MÁY Tuần Nội dung Tuần Tìm hiểu cơng nghệ đề tài thực lý thuyết liên quan Tuần Tính tốn thiết kế sơ đồ khối hệ thống Tuần Tính tốn thiết kế sơ đồ. .. LẬP TRÌNH HỆ THỐNG 4.3.1 Lưu đồ Việc xây dựng lưu đồ bước quan trọng việc lập trình hệ thống ? ?Hệ thống thông minh cảnh báo cho xe máy? ?? gồm lưu đồ cảm biến rung module sim gia tốc lưu đồ cho tồn