--------------------------------------------------------------------------------------------- https://www.youtube.com/watch?v=wj5sQc-bunA --------------------------------------------------------------------------------------------- Đề tài nghiên cứu khoa học của sinh viên Đại học Tiền Giang. Đề tại ứng dụng board mạch nhúng raspberry pi để xử lý việc truyền nhận dữ liệu giữa điện thoại Android hệ thống thông qua môi trường internet. Đề tài mô tả chi tiết cách thức thực hiện bao gồm: lập trình, thiết lập, phần cứng, kiểm tra. Mã nguồn đi kèm với file
TRƯỜNG ĐẠI HỌC TIỀN GIANG BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN ỨNG DỤNG RASPBERRY PI TRONG VIỆC THIẾT KẾ CHẾ TẠO BỘ ĐÓNG NGẮT THIẾT BỊ ĐIỆN ĐƯỢC ĐIỀU KHIỂN TỪ XA QUA THIẾT BỊ ANDROID TRONG MƠI TRƯỜNG INTERNET Thuộc nhóm ngành khoa học: Kỹ thuật Công nghệ Tiền Giang, tháng 06 năm 2015 TRƯỜNG ĐẠI HỌC TIỀN GIANG BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN ỨNG DỤNG RASPBERRY PI TRONG VIỆC THIẾT KẾ CHẾ TẠO BỘ ĐÓNG NGẮT THIẾT BỊ ĐIỆN ĐƯỢC ĐIỀU KHIỂN TỪ XA QUA THIẾT BỊ ANDROID TRONG MÔI TRƯỜNG INTERNET Thuộc nhóm ngành khoa học: Kỹ thuật Cơng nghệ Sinh viên thực hiện: TRẦN THANH TÒNG Nam, Nữ: Nam Dân tộc: Kinh Lớp: CĐ CNKT Đ-ĐT 12A Khoa: KTCN Năm thứ: Số năm đào tạo: Ngành học: CNKT Điện-Điện tử Người hướng dẫn: Ths HOÀNG HỮU DUY Tiền Giang, tháng 06 năm 2015 LỜI CẢM ƠN Em xin chân thành cảm ơn quý thầy cô Trường ĐH Tiền Giang nói chung thầy Khoa Kỹ Thuật Cơng Nghiệp nói riêng dạy bảo, tận tình truyền đạt kiến thức cho em suốt trình học Đặc biệt thầy Hồng Hữu Duy tận tình dẫn cho em trình làm hoàn thành đề tài Đồng cảm ơn Ban giám hiệu nhà trường tạo điều kiện cho em học tập trau dồi kiến thức Xin cảm ơn bạn lớp có ý kiến đóng góp trình tìm hiểu làm đề tài Do thời gian trình độ có hạn nên đề tài khơng tránh khỏi thiếu sót, mong nhận ý kiến đóng góp q thầy bạn để đề tài hoàn thiện Em xin chân thành cảm ơn! Sinh viên Trần Thanh Tòng MỤC LỤC MỤC LỤC i DANH MỤC HÌNH ẢNH v DANH MỤC BẢNG BIỂU vi A MỞ ĐẦU 1 Tổng quan tình hình nghiên cứu 2 Lý chọn đề tài Mục tiêu đề tài Phương pháp nghiên cứu Khách thể nghiên cứu Đối tượng phạm vi nghiên cứu .3 Giả thuyết nghiên cứu B NỘI DUNG CHƯƠNG TỔNG QUAN CÁC HÌNH THỨC ĐIỀU KHIỂN XA 1.1 Điều khiển từ xa tia hồng ngoại 1.1.1 Khái niệm .5 1.1.2 Ứng dụng 1.2 Điều khiển từ xa sóng vơ tuyến 1.2.1 Khái niệm .5 1.2.2 Ứng dụng 1.3 Điều khiển từ xa Bluetooth 1.3.1 Khái niệm .6 1.3.2 Ứng dụng 1.4 Điều khiển xa Internet 1.4.1 Khái niệm Internet 1.4.2 Lịch sử phát triển 1.4.3 Kết nối qua quay số 1.4.4 Kết nối qua ADSL 1.4.5 Địa IP 1.4.6 Tên miền .8 1.4.7 ISP 1.4.8 World Wide Web 1.4.9 HTML 1.4.10 Ứng dụng Internet 10 CHƯƠNG THIẾT KẾ VÀ LẬP TRÌNH GIAO DIỆN ĐIỀU KHIỂN CHO THIẾT BỊ ANDROID 11 2.1 Tổng quan phần mềm lập trình ứng dụng Android 11 2.1.1 Lịch sử phát triển Eclipse 11 2.1.2 Các bước tạo mơi trường lập trình Android 11 2.1.3 Android Virtual Device (AVD) 12 2.2 Cấu trúc bên ứng dụng 12 2.2.1 Tập tin Activity_main.xml 13 2.2.2 Tập tin MainActivity.java 14 2.2.3 Thư mục Package Explorer 15 2.3 Các đối tượng ứng dụng 16 2.3.1 Layout 16 2.3.2 TextView .18 2.3.3 EditText 19 2.3.4 Button 19 2.4 Các thành phần vòng đời ứng dụng .19 2.4.1 Applications 19 2.4.2 Activity .19 2.4.3 Vòng đời ứng dụng .19 2.5 Các hàm lệnh Java Android .21 2.6 Thiết kế giao diện điều khiển .22 2.6.1 Khai báo giao diện 22 2.6.2 Canh chỉnh giao diện người dùng .22 2.7 Gửi liệu lên WebServer 23 2.7.1 Phương thức gửi 23 2.7.2 Quy ước liệu gửi 24 2.7.3 Thuật tốn mã hóa liệu gửi 25 2.7.4 Thuật toán gửi liệu 25 2.7.5 Tiến trình gửi liệu 26 2.8 Nhận liệu từ WebServer 27 2.8.1 Phương thức nhận .27 2.8.2 Quy ước liệu nhận 27 2.8.3 Thuật toán giải mã liệu nhận 27 2.8.4 Thuật toán nhận liệu 29 2.8.5 Tiến trình nhận liệu 29 2.9 Đồng liệu 30 2.9.1 Phương thức đồng 30 2.9.2 Thuật toán đồng .30 2.10 Đọc liệu theo chu kỳ 31 2.10.1 Khai báo Timer 31 2.10.2 Giải thuật đọc liệu theo chu kì .32 2.11 Khởi động ứng dụng 32 2.11.1 Hàm onCreate() 32 2.11.2 Hàm onResume() 34 2.11.3 Hàm onPause() 35 2.12 Hiển thị thông báo 36 CHƯƠNG THIẾT KẾ VÀ LẬP TRÌNH WEBSERVER 39 3.1 Tổng quan WebServer 39 3.1.1 Các đối tượng gửi nhận liệu WebServer 39 3.1.2 Các đối tượng lưu trữ WebServer 39 3.1.3 Cấu trúc liệu tin HTML 40 3.2 Lập trình WebServer 40 3.2.1 Các hàm xử lý chuỗi 40 3.2.2 Lệnh rẽ nhánh .40 3.3 Xây dựng WebServer truyền nhận liệu 41 3.3.1 Tổng quan trình gửi nhận liệu 41 3.3.2 Giải mã ghi nhận liệu 42 3.3.4 Truy xuất liệu 44 3.3.5 Thuật toán gửi/nhận liệu từ Board Raspberry 45 3.3.6 Thuật toán gửi/nhận liệu từ thiết bị Android 47 CHƯƠNG LẬP TRÌNH VÀ XÂY DỰNG PHẦN CỨNG CHO BOARD MẠCH RASPBERRY PI 48 4.1 Kết cấu cổng GPIO Raspberry Pi 48 4.2 Các lệnh Linux Shell 49 4.2.1 Cấu trúc thư mục 49 4.2.2 Tập lệnh 50 4.3 Hệ điều hành board mạch Raspberry Pi 51 4.3.1 Giao diện người dùng 51 4.3.2 Quản lý tập tin 51 4.3.3 LxTerminal 52 4.4 Ngơn ngữ lập trình Python 53 4.4.1 Cấu trúc chương trình Python .53 4.4.2 Biến kiểu liệu 54 4.4.3 Cấu trúc rẽ nhánh vòng lặp 55 4.4.4 Xây dựng hàm 56 4.5 Tổng quan PyQt4 56 4.5.1 Đối tượng Push Button .56 4.5.2 Đối tượng Radio Button .56 4.5.3 Đối tượng Label 57 4.5.4 Đối tượng Frame 57 4.5.5 Tạo kiện cho đối tượng 58 4.5.6 Biên dịch mã nguồn Python 58 4.5.7 Xử lý kiện người dùng giao diện .59 4.5.8 Thay đổi thuộc tính đối tượng giao diện .60 4.6 Xây dựng chương trình điều khiển đóng ngắt 60 4.6.1 Xây dựng giao diện điều khiển 60 4.6.2 Thiết lập thuộc tính đối tượng giao diện 61 4.6.3 Giải thuật điều khiển đóng ngắt 62 4.6.4 Khai báo biến quản lý trạng thái toàn cục 63 4.6.5 Khai báo thông số cố định 64 4.6.6 Khai báo ngõ vào ngõ GPIO 65 4.6.7 Khai báo biến quản lý cài đặt 65 4.6.8 Đa tiến trình 66 4.7 Đồng liệu board mạch WebServer .66 4.7.1 Quy ước mã giãi mã .66 4.7.2 Mở file đóng file 66 4.7.3 Thư viện URL Python .67 4.8 Gửi liệu lên Web Server .68 4.9 Chế độ điều khiển tay .68 4.9.1 Thư viện GPIO 68 4.9.2 Thuật toán thực 69 4.10 Phát triển Module công suất 70 4.10.1 Điện áp dòng điện ngõ GPIO 70 4.10.2 Sơ đồ khối mạch công suất .71 4.10.3 Khối ổn áp nguồn .72 4.10.4 Khối tăng dòng 73 4.10.5 Khối giao tiếp người dùng 73 4.10.6 Khối đóng ngắt cơng suất 74 4.10.7 Các cổng giao tiếp mạch công suất 75 4.10.8 Sơ đồ mạch công suất .75 CHƯƠNG THỰC NGHIỆM VÀ KẾT QUẢ 76 5.1 Chế tạo phần cứng .76 5.2 Thiết lập chương trình điều khiển 77 5.2.1 Đăng ký máy chủ 77 5.2.2 Cập nhật liệu cho máy chủ .78 5.2.3 Các thiết lập chương trình quản lý .78 5.2.4 Cài đặt ứng dụng lên thiết bị Android 79 5.3 Kết thực nghiệm đánh giá .79 5.3.1 Kết thực nghiệm 79 5.3.2 Đánh giá .80 C KẾT LUẬN VÀ KHUYẾN NGHỊ .81 Kết luận 82 Khuyến nghị .82 TÀI LIỆU THAM KHẢO .83 DANH MỤC HÌNH ẢNH Hình 1.1 Kết nối quay số qua mạng điện thoại Hình 1.2 Kết nối qua ADSL .8 Hình 1.3 Mơ hình hoạt động dịch vụ Web Hình 2.1 Giao diện máy ảo sau khởi động .12 Hình 2.2 Cấu trúc ứng dụng .13 Hình 2.3 Phần Graphical Layout 14 Hình 2.4 Phần MainActivity dùng để lập trình cho ứng dụng 14 Hình 2.5 Phần Package Explorer 15 Hình 2.6 Cấu trúc bên AndroidManifest.xml 16 Hình 2.7 Ví dụ FrameLayout 17 Hình 2.8 Ví dụ LinearLayout 17 Hình 2.9 Ví dụ RelativeLayout 18 Hình 2.10 Vòng đời ứng dụng 20 Hình 2.11 Hiển thị trạng thái điều khiển thiết bị 22 Hình 2.12 Giao diện người dùng trạng thái đóng mở 23 Hình 2.13 Thuật tốn mã hóa liệu gửi .25 Hình 2.14 Giải thuật gửi liệu lên WebServer 26 Hình 2.15 Tiến trình gửi liệu .27 Hình 2.16 Thuật toán giải mã liệu trạng thái .28 Hình 2.17 Thuật tốn giải mã liệu thiết bị 28 Hình 2.18 Giải thuật nhận liệu từ WebServer 29 Hình 2.19 Tiến trình nhận liệu 30 Hình 2.20 Thuật toán đồng liệu 31 Hình 2.21 Thuật toán thực thi hàm đọc liệu theo chu kỳ 32 Hình 2.22 Thuật tốn khởi chạy onCreate() 33 Hình 2.23 Thuật tốn khởi chạy onResume() 35 Hình 2.24 Thuật toán khởi chạy onPause() 35 Hình 2.25 Giải thuật hiển thị thông báo đồng liệu .37 Hình 2.26 Giải thuật hiển thị thơng báo gửi-nhận liệu 38 public void CLICK_TB2(View v) { if (TRANG_THAI_THIET_BI_2.equals("1")) { TRANG_THAI_THIET_BI_2="0"; MA_HOA_DU_LIEU_GUI("0", "2"); ID_NUT_NHAN_2.setImageResource(R.drawable.b); } else if (TRANG_THAI_THIET_BI_2.equals("0")) { TRANG_THAI_THIET_BI_2="1"; MA_HOA_DU_LIEU_GUI("1", "2"); ID_NUT_NHAN_2.setImageResource(R.drawable.bb); } THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void CLICK_TB3(View v) { if (TRANG_THAI_THIET_BI_3.equals("1")) { TRANG_THAI_THIET_BI_3="0"; MA_HOA_DU_LIEU_GUI("0", "3"); ID_NUT_NHAN_3.setImageResource(R.drawable.c); } else if (TRANG_THAI_THIET_BI_3.equals("0")) { TRANG_THAI_THIET_BI_3="1"; MA_HOA_DU_LIEU_GUI("1", "3"); ID_NUT_NHAN_3.setImageResource(R.drawable.cc); } THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void CLICK_TB4(View v) { if (TRANG_THAI_THIET_BI_4.equals("1")) { TRANG_THAI_THIET_BI_4="0"; MA_HOA_DU_LIEU_GUI("0", "4"); ID_NUT_NHAN_4.setImageResource(R.drawable.d); -5- } else if (TRANG_THAI_THIET_BI_4.equals("0")) { TRANG_THAI_THIET_BI_4="1"; MA_HOA_DU_LIEU_GUI("1", "4"); ID_NUT_NHAN_4.setImageResource(R.drawable.dd); } THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void CLICK_TB5(View v) { if (TRANG_THAI_THIET_BI_5.equals("1")) { TRANG_THAI_THIET_BI_5="0"; MA_HOA_DU_LIEU_GUI("0", "5"); ID_NUT_NHAN_5.setImageResource(R.drawable.e); } else if (TRANG_THAI_THIET_BI_5.equals("0")) { TRANG_THAI_THIET_BI_5="1"; MA_HOA_DU_LIEU_GUI("1", "5"); ID_NUT_NHAN_5.setImageResource(R.drawable.ee); } THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void CLICK_TB6(View v) { if (TRANG_THAI_THIET_BI_6.equals("1")) { TRANG_THAI_THIET_BI_6="0"; MA_HOA_DU_LIEU_GUI("0", "6"); ID_NUT_NHAN_6.setImageResource(R.drawable.f); } else if (TRANG_THAI_THIET_BI_6.equals("0")) { TRANG_THAI_THIET_BI_6="1"; MA_HOA_DU_LIEU_GUI("1", "6"); ID_NUT_NHAN_6.setImageResource(R.drawable.ff); } -6- THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void CLICK_TB7(View v) { if (TRANG_THAI_THIET_BI_7.equals("1")) { TRANG_THAI_THIET_BI_7="0"; MA_HOA_DU_LIEU_GUI("0", "7"); ID_NUT_NHAN_7.setImageResource(R.drawable.g); } else if (TRANG_THAI_THIET_BI_7.equals("0")) { TRANG_THAI_THIET_BI_7="1"; MA_HOA_DU_LIEU_GUI("1", "7"); ID_NUT_NHAN_7.setImageResource(R.drawable.gg); } THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void CLICK_TB8(View v) { if (TRANG_THAI_THIET_BI_8.equals("1")) { TRANG_THAI_THIET_BI_8="0"; MA_HOA_DU_LIEU_GUI("0", "8"); ID_NUT_NHAN_8.setImageResource(R.drawable.h); } else if (TRANG_THAI_THIET_BI_8.equals("0")) { TRANG_THAI_THIET_BI_8="1"; MA_HOA_DU_LIEU_GUI("1", "8"); ID_NUT_NHAN_8.setImageResource(R.drawable.hh); } THONG_BAO_NUT_NHAN.show(); new Thread(new TIEN_TRINH_GUI_DU_LIEU()).start(); } public void MA_HOA_DU_LIEU_GUI(String TRANG_THAI, String THIET_BI) { if (TRANG_THAI.equals("1") ) { DA_TA_GUI="A";} -7- else if (TRANG_THAI.equals("0")) { DA_TA_GUI="B";} DA_TA_GUI= DA_TA_GUI + "_" + THIET_BI; } public void GIAI_MA_DU_LIEU_NHAN(){ String TRANG_THAI="0"; //khai bao bien TRANG THAI trung gian if(DA_TA_NHAN.substring(0, 1).equals("A")) { TRANG_THAI="1"; } else{ TRANG_THAI="0"; } if (DA_TA_NHAN.substring(2, 3).equals("1")) { TRANG_THAI_THIET_BI_1=TRANG_THAI; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_1.setImageResource(R.drawable.aa); } else { ID_NUT_NHAN_1.setImageResource(R.drawable.a); } } if (DA_TA_NHAN.substring(2, 3).equals("2")) { TRANG_THAI_THIET_BI_2=TRANG_THAI ; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_2.setImageResource(R.drawable.bb); } else {ID_NUT_NHAN_2.setImageResource(R.drawable.b);} } if (DA_TA_NHAN.substring(2, 3).equals("3")) { TRANG_THAI_THIET_BI_3=TRANG_THAI ; if (TRANG_THAI.equals("1")) -8- { ID_NUT_NHAN_3.setImageResource(R.drawable.cc); } else { ID_NUT_NHAN_3.setImageResource(R.drawable.c); } } if (DA_TA_NHAN.substring(2, 3).equals("4")) { TRANG_THAI_THIET_BI_4=TRANG_THAI ; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_4.setImageResource(R.drawable.dd); } else { ID_NUT_NHAN_4.setImageResource(R.drawable.d); } } if (DA_TA_NHAN.substring(2, 3).equals("5")) { TRANG_THAI_THIET_BI_5=TRANG_THAI ; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_5.setImageResource(R.drawable.ee); } else { ID_NUT_NHAN_5.setImageResource(R.drawable.e); } } if (DA_TA_NHAN.substring(2, 3).equals("6")) { TRANG_THAI_THIET_BI_6=TRANG_THAI ; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_6.setImageResource(R.drawable.ff); } else -9- { ID_NUT_NHAN_6.setImageResource(R.drawable.f); } } if (DA_TA_NHAN.substring(2, 3).equals("7")) { TRANG_THAI_THIET_BI_7=TRANG_THAI ; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_7.setImageResource(R.drawable.gg); } else { ID_NUT_NHAN_7.setImageResource(R.drawable.g); } } if (DA_TA_NHAN.substring(2, 3).equals("8")) { TRANG_THAI_THIET_BI_8=TRANG_THAI ; if (TRANG_THAI.equals("1")) { ID_NUT_NHAN_8.setImageResource(R.drawable.hh); } else { ID_NUT_NHAN_8.setImageResource(R.drawable.h); } } } public void GUI_DU_LIEU(String URL, String DA_TA) { HttpClient httpclient = new DefaultHttpClient(); HttpPost method = new HttpPost(URL + DA_TA); HttpResponse response = null; try { response = httpclient.execute(method); } catch (ClientProtocolException e) { runOnUiThread(new Runnable() { -10- @Override public void run() { c.create().show(); } }); return; } catch (IOException e) { runOnUiThread(new Runnable() { @Override public void run() { c.create().show(); } }); return; } response.getEntity(); } public String DOC_DU_LIEU(String URL) { HttpClient httpclient = new DefaultHttpClient(); HttpPost method = new HttpPost(URL); HttpResponse response = null; try { response = httpclient.execute(method); } catch (ClientProtocolException e) { return "C_0"; } catch (IOException e) { return "C_0"; } HttpEntity entity = response.getEntity(); try { return EntityUtils.toString(entity).substring(0, 3); } catch (ParseException e) { return "C_0"; } catch (IOException e) { -11- return "C_0"; } } class TIEN_TRINH_GUI_DU_LIEU implements Runnable { public void run() { GUI_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Nhan_App.aspx? ID=",DA_TA_GUI); THONG_BAO_NUT_NHAN.dismiss(); new Thread(new DONG_BO_DU_LIEU()).start(); } } class TIEN_TRINH_DOC_DU_LIEU implements Runnable { @Override public void run() { DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.as px"); runOnUiThread(new Runnable() { @Override public void run() { GIAI_MA_DU_LIEU_NHAN();} }); } } public void DOC_DU_LIEU_THEO_CHU_KY() { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub -12- new Thread(new TIEN_TRINH_DOC_DU_LIEU()).start(); } },0,10000);} class DONG_BO_DU_LIEU implements Runnable { @Override public void run() { DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.as px?ID=1"); if (DA_TA_NHAN.equals("C_0")) {runOnUiThread(new Runnable() { @Override public void run() { d.create().show(); } }); } runOnUiThread(new Runnable() { @Override public void run() { GIAI_MA_DU_LIEU_NHAN(); } }); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.as px?ID=2"); if (DA_TA_NHAN.equals("C_0")) {runOnUiThread(new Runnable() {@Override void run() { d.create().show(); } }); } runOnUiThread(new Runnable() -13- { @Override public void run() { GIAI_MA_DU_LIEU_NHAN();} }); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.as px?ID=3"); if (DA_TA_NHAN.equals("C_0")) { runOnUiThread(new Runnable() { @Override public void run() { d.create().show(); } }); } runOnUiThread(new Runnable() { @Override public void run() { GIAI_MA_DU_LIEU_NHAN(); } }); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.a spx?ID=4"); if (DA_TA_NHAN.equals("C_0")) { runOnUiThread(new Runnable() {@Override void run() { d.create().show(); } }); } runOnUiThread(new Runnable() { -14- @Override public void run() { GIAI_MA_DU_LIEU_NHAN(); } }); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.a spx?ID=5"); if (DA_TA_NHAN.equals("C_0")) { runOnUiThread(new Runnable() { @Override public void run() {d.create().show(); } }); } runOnUiThread(new Runnable() { @Override public void run() { GIAI_MA_DU_LIEU_NHAN(); }}); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.a spx?ID=6"); if (DA_TA_NHAN.equals("C_0")) { runOnUiThread(new Runnable() { @Override public void run() { d.create().show(); } }); } runOnUiThread(new Runnable() { @Override -15- public void run() { GIAI_MA_DU_LIEU_NHAN(); }}); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.a spx?ID=7"); if (DA_TA_NHAN.equals("C_0")) { runOnUiThread(new Runnable() { @Override public void run() { d.create().show(); } }); } runOnUiThread(new Runnable() { @Override public void run() { GIAI_MA_DU_LIEU_NHAN(); } }); DA_TA_NHAN=DOC_DU_LIEU("http://www.dieukhienasp2509.somee.com/Data_Gui_App.as px?ID=8"); if (DA_TA_NHAN.equals("C_0")) {runOnUiThread(new Runnable() { @Override public void run() { d.create().show(); } }); } runOnUiThread(new Runnable() { @Override public void run() -16- { GIAI_MA_DU_LIEU_NHAN(); } }); a.dismiss(); } } } -17- Ý KIẾN CỦA NGƯỜI HƯỚNG DẪN Qua thời gian thực đề tài nghiên cứu khoa học sinh viên: Trần Thanh Tòng, người hướng dẫn có nhận xét sau: - Về cấu trúc đề tài: Đề tài thể chi tiết, đầy đủ, rõ ràng, logic xây dựng nên sản phẩm - Tính cấp thiết đề tài: Đề tài đáp ứng xu công nghệ - Về hình thức trình bày: Đề tài trình bày mạch lạc, rõ ràng Tuy nhiên, có vài nội dung sơ lượt, chưa sâu vào trọng tâm vấn đề - Đánh giá chung: Đề tài đáp ứng mục tiêu đề ban đầu Đề nghị: không NGƯỜI HƯỚNG DẪN Hoàng Hữu Duy HỘI ĐỒNG NGHIỆM THU ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN - CHỦ TỊCH: - THƯ KÝ : - THÀNH VIÊN PHẢN BIỆN 1: - THÀNH VIÊN PHẢN BIỆN 2: - THÀNH VIÊN HỘI ĐỒNG: Tiền Giang, ngày tháng Chủ tịch năm