Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 155 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
155
Dung lượng
2,41 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH LUẬN VĂN THẠC SĨ TRẦN CÔNG TRUNG THIẾT KẾ VÀ THI CÔNG VỊNG ÐEO TAY ÐẾM BUỚC CHÂN DỰA TRÊN THUẬT TỐN DECSION TREE NGÀNH: KỸ THUẬT ĐIỆN TỬ - 60520203 SKC005979 Tp Hồ Chí Minh, tháng 05/2018 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH - LUẬN VĂN THẠC SĨ TRẦN CÔNG TRUNG THIẾT KẾ VÀ THI CƠNG VỊNG ĐEO TAY ĐẾM BƯỚC CHÂN DỰA TRÊN THUẬT TOÁN DECSION TREE NGÀNH KỸ THUẬT ĐIỆN TỬ - 60520203 Tp Hồ Chí Minh – Tháng 05/2018 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH - LUẬN VĂN THẠC SĨ TRẦN CÔNG TRUNG THIẾT KẾ VÀ THI CƠNG VỊNG ĐEO TAY ĐẾM BƯỚC CHÂN DỰA TRÊN THUẬT TOÁN DECSION TREE NGÀNH KỸ THUẬT ĐIỆN TỬ- 60520203 Hướng dẫn khoa học: PGS.TS TRẦN THU HÀ Tp Hồ Chí Minh – Tháng 05/2018 LÝ LỊCH KHOA HỌC I LÝ LỊCH SƠ LƯỢC: Họ & tên: TRẦN CƠNG TRUNG Giới tính: Nam Ngày, tháng, năm sinh: 16/12/1993 Nơi sinh: TP.Vũng tàu Quê quán: Hà Nam Dân tộc: Kinh Chỗ riêng địa liên lạc: 124 Nguyễn Văn Trỗi, P.4, TP.Vũng Tàu Điện thoại quan: Điện thoại nhà riêng: 0908016139 Fax: E-mail: congtrungtran16@gmail.com II QUÁ TRÌNH ĐÀO TẠO: Trung học chuyên nghiệp: Hệ đào tạo: Thời gian đào tạo từ ……/…… đến ……/ …… Nơi học (trường, thành phố): Ngành học: Đại học: Hệ đào tạo: Đại học Chính quy Thời gian đào tạo từ 09/2011 đến 09/2015 Nơi học (trường, thành phố): Trường Đại học Sư phạm kỹ thuật TP.HCM Ngành học: Công nghệ kỹ thuật Điện tử - Truyền thông Tên đồ án, luận án môn thi tốt nghiệp: HỆ THỐNG GIÁM SÁT MÁY ĐỘNG Ngày & nơi bảo vệ đồ án, luận án thi tốt nghiệp: 28/07/2015 Trường Đại học Sư phạm kỹ thuật TP.HCM Người hướng dẫn: TS Nguyễn Minh Tâm III QUÁ TRÌNH CÔNG TÁC CHUYÊN MÔN KỂ TỪ KHI TỐT NGHIỆP ĐẠI HỌC: i Thời gian 2015 - 2016 2016 - Hiện ii LỜI CAM ĐOAN Tôi cam đoan cơng trình nghiên cứu tơi Các số liệu, kết nêu luận văn trung thực chưa cơng bố cơng trình khác Tp Hồ Chí Minh, ngày … tháng … năm 2018 (Ký tên ghi rõ họ tên) Trần Công Trung iii LỜI CẢM ƠN Em xin chân thành cảm ơn nhà trường phòng đào tạo tạo điều kiện giúp đỡ suốt thời gian học tập thực luận văn Xin gửi lời cảm ơn đến Trần Thu Hà tận tình giúp đỡ tạo điều kiện giúp đỡ em nhiều suốt trình thực luận văn tốt nghiệp Xin gửi lời cảm ơn đến kỹ sư Lê Khắc Lượng (Zien Solution Company) kỹ sư Trần Đăng Quang (TMA company) nhiệt tình giúp đỡ hỗ trợ quãng thời gian vừa qua Tp Hồ Chí Minh, ngày 15 tháng 04 năm 2018 Trần Cơng Trung iv TĨM TẮT Cảm biến chuyển động trở thành chức phải có điện thoại thơng minh tablet lượng thơng tin khổng lồ mà cung cấp cho người dùng Trong điện thoại thông minh, cảm biến ứng dụng lệnh nắm bắt cử để điều khiển, tăng cường giải trí, tương tác với thực tế, chụp ảnh toàn cảnh định hướng việc giao thông lại Với khả theo dõi xác chuyển động người dùng, cơng nghệ cảm biến chuyển động biến thiết bị cầm tay thành thiết bị thông minh 3-D mà sử dụng ứng dụng sức khỏe, theo dõi luyện tập đến dịch vụ xác định vị trí Một ứng dụng phổ biến cảm biến chuyển động vịng đeo tay dùng để theo dõi việc luyện tập thể dục ngày Các vịng đeo tay tính tốn số bước chân, tính tốn khoảng cách di chuyển cho người sử dụng Thiết bị trở thành thành phần hữu ích quan trọng sống người Tuy nhiên, hầu hết mẫu sản phẩm xây dựng độc lập độ xác bị ảnh hưởng hoạt động ngẫu nhiên người sử dụng Các sản phẩm chưa có khả phân biệt hoạt động thể chất khác để ghi nhận xác số bước chân hoạt động tương ứng Điều dẫn đến sản phẩm có sai số khác với nhiều người dùng khác Luận văn nghiên cứu tập trung vào việc xây dựng ngun mẫu vịng đeo tay có khả đếm bước chân kết nối với smartphone; đồng thời cải thiện thuật tốn đếm bước chân xác cách thu thập liệu huấn luyện tạo decision tree Kết từ decision tree feedback lại thuật tốn vịng đeo tay để phát bước chân xác trang bị cho khả phân biệt hoạt động thể chất v ABSTRACT Motion sensor has become one of the must-have functions on smart phone and tablet because of the large information they gave the user On smart phone, motion sensor is used to detect motion fro controlling, enhanced entertainment, reality interaction, panoramic photos, orienting traffic With the ability to capture exactly motion of users, motion detection technology can change the smart phone to smart 3-D device which can be used in health monitoring, exercising monitoring and location detection One of the most common applications of motion detection is exercising monitoring function of the smart watch Smart watch has become very useful in daily life However, most the products on the market were built independently and the accuracy of these products is affected by random motion of the users They also did not have the ability to distinguish types of activities, therefore they could not detect steps in corresponding activities This can lead to difference results for difference users This thesis will focus on building a smart watch which can count steps precisely and communicate with smart phone Also the thesis will improve algorithm for detecting steps by collecting raw data and training data to get a decision tree Result from this decision tree will be used to improve detecting steps and the device can distinguish the activities vi MỤC LỤC TRANG TỰA QUYẾT ĐỊNH GIAO ĐỀ TÀI BIÊN BẢN CỦA HỘI ĐỒNG ĐÁNH GIÁ LUẬN VĂN PHIẾU NHẬN XÉT GIẢNG VIÊN PHẢN BIỆN PHIẾU NHẬN XÉT GIẢNG VIÊN PHẢN BIỆN LÝ LỊCH KHOA HỌC i LỜI CAM ĐOAN iii LỜI CẢM ƠN iv TÓM TẮT v ABSTRACT vi MỤC LỤC vii DANH MỤC CÁC CHỮ VIẾT TẮT x DANH MỤC CÁC BẢNG BIỂU xi DANH MỤC CÁC HÌNH ẢNH, BIỂU ĐỒ xii CHƯƠNG TỔNG QUAN 1.1 Tổng quan tình hình nghiên cứu 1.2 Tính cấp thiết đề tài 1.3 Mục tiêu nghiên cứu 1.4 Nhiệm vụ nghiên cứu 1.5 Phương pháp nghiên cứu 1.6 Bố cục luận văn CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Nguyên lý đếm bước chân 2.2 Bluetooth Low Energy (BLE) 11 vii if(j%11 == 0){ x++; ssd1306_setXY(x,y); } ssd1306_data(smallNum[0][j]); } return; } while (num > 0){ num_buff[i] = num % 10; num = num /10; i ; } while (i < 9){ i++; ssd1306_setXY(x,y); for ( j = 0; j < 22; ++j){ if(j%11 == 0){ 117 x++; ssd1306_setXY(x,y); } ssd1306_data(smallNum[num_buff[i]][j]); } x-=2; y+=2; } } void UpdateUI(uint8_t step_status,uint16_t step_count) { static uint8_t i = 0; if (step_status == && i < 5) i++; else i = 0; ssd1306_setXY(0,0); ssd1306_drawBitmap(0, 0,5,24,WalkMan[i]); 118 ssd1306_smallNumber(0,5,step_count); } #include "pedometer.h" #include "nrf.h" #include "nrf_drv_timer.h" #include "bsp.h" #include "app_error.h" #include enum Axis{ X_AXIS = 0, Y_AXIS = 1, Z_AXIS = 2, }_model_axis; int _model_val; int32_t _curr_val; int _model_ratio; 119 int _last_val; const nrf_drv_timer_t TIMER_MPU = NRF_DRV_TIMER_INSTANCE(0); uint32_t time_ms = 100; //Time(in miliseconds) between consecutive compare events uint32_t time_ticks; uint32_t err_code = NRF_SUCCESS; uint8_t stat_Calc = 0; uint32_t pedometer_stepCalc(void); void pedometer_updateModelAxis(void); void pedometer_getValue(void); void pedometer_getValidValue(void); /** * @brief Handler for timer events */ void timer_mpu_event_handler(nrf_timer_event_t event_type, void* p_context) { switch (event_type) { case NRF_TIMER_EVENT_COMPARE0: 120 stat_Calc = 0; break; default: //Do nothing break; } } void pedometer_init() { /* Initial the MPU6050 Accelerometer Full Scale Range = 2g [-2g,+2g] Sample rate = 1kHz */ mpu6050_init(); stepCount = 0; 121 /*Update raw data from MPU6050 (read 60 times) => we'll have largest average value model_val (belongs to model_axis) and model ratio */ pedometer_updateModelAxis(); _curr_val = 0; nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG(0); err_code = nrf_drv_timer_init(&TIMER_MPU, &timer_cfg, timer_mpu_event_handler); APP_ERROR_CHECK(err_code); time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_MPU, time_ms); nrf_drv_timer_extended_compare( &TIMER_MPU, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true); } void pedometer_updateModelAxis(void) { int16_t x,y,z; 122 // sum[3] = {0;0;0} sum[0]=sum[X_Axis];sum[1]=sum[Y_Axis];sum[2]=sum[Z_Axis]; int32_t sum[MAX_AXIS] = {0}; float a,b,c; //Read 60 raw samples for(int i = 0; i < SAMPLING_MODEL_NUMBER; i++){ //SAMPLING_MODEL_NUMBER=60 sample 60 raw values mpu6050_readAccelerometer(&x, &y, &z); //read raw data from MPU-6050 sum[X_AXIS] += abs(x); //sum of 60 sample values of X_Axis sum[Y_AXIS] += abs(y); //sum of 60 sample values of Y_Axis sum[Z_AXIS] += abs(z); //sum of 60 sample values of Z_Axis } //Calculate the average value in each axis sum[X_AXIS] /= SAMPLING_MODEL_NUMBER; sample values of X_Axis sum[Y_AXIS] /= SAMPLING_MODEL_NUMBER; sample values of Y_Axis sum[Z_AXIS] /= SAMPLING_MODEL_NUMBER; sample values of Z_Axis 123 //Find the axis that has the largest accleration value _model_axis = sum[X_AXIS] >= sum[Y_AXIS]?X_AXIS:Y_AXIS; _model_axis = sum[_model_axis] >= sum[Z_AXIS]?_model_axis:Z_AXIS; / the largest average acceleration value _model_val = sum[_model_axis]; / Ratio of the largest average value over //ratio = (model_val+10)/20 //perhaps [-10,+10] => range:20 _model_ratio = (_model_val+MODEL_STANDARD_VALUE/2)/MODEL_STANDARD_VALUE ; } void pedometer_getValue(void) { int16_t tmp_val[MAX_AXIS]; _curr_val = 0; for(int i = 0; i < MAX_WINDOW; i++){ mpu6050_readAccelerometer(&tmp_val[X_AXIS], &tmp_val[Y_AXIS], &tmp_val[Z_AXIS]); 124 _curr_val += abs(tmp_val[_model_axis]); } _curr_val /= MAX_WINDOW; _curr_val = (_curr_val + _model_ratio/2)/_model_ratio; } void pedometer_getValidValue(void) { uint32_t i = 0; do{ i++; if (i%100 == 0) { //printf("getValidValue:_curr_val = %d ,_model_val = %d ,_last_val = %d \n\r", _curr_val,_model_val,_last_val); } pedometer_getValue(); }while((abs(_curr_val-_model_val) = 23){ while(1){ pedometer_getValidValue(); if(_curr_val