0

Thiết kế hệ thống điều khiển mô phỏng chuyển động cánh tay

74 401 1

Đang tải.... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 09/07/2017, 22:26

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - Phạm Quốc Anh THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN MÔ PHỎNG CHUYỂN ĐỘNG CÁNH TAY Chuyên ngành : KỸ THUẬT Y SINH LUẬN VĂN THẠC SĨ KỸ THUẬT KỸ THUẬT Y SINH NGƯỜI HƯỚNG DẪN KHOA HỌC : TS Nguyễn Phan Kiên Hà Nội – 2015 -1- Lời Cam Đoan Tôi PHẠM QUỐC ANH, học viên cao học lớp Kỹ Thuật Y Sinh khóa 2013 2015 Thầy giáo hướng dẫn TS Nguyễn Phan Kiên Tôi xin cam đoan toàn nội dung trình bày luận văn kết tìm hiểu nghiên cứu riêng tôi, trình nghiên cứu đề tài “Thiết kế hệ thống điều khiển mô chuyển động cánh tay” Các kết liệu nêu luận văn hoàn toàn trung thực rõ ràng Mọi thông tin trích dẫn tuân theo luật sở hữu trí tuệ, liệt kê rõ ràng tài liệu tham khảo Tôi xin chịu hoàn toàn trách nhiệm với nội dung viết luận văn Hà nội, ngày 25 tháng năm 2015 Học viên Phạm Quốc Anh -2- Mục Lục Lời Cam Đoan .2 Mục Lục Danh mục ký hiệu viết tắt .5 Danh mục hình vẽ .6 Danh mục bảng biểu Mở Đầu Chương 1: Tổng quan điều khiển mô chuyển động thể 10 1.1 Định nghĩa mô điều khiên mô phỏng: 10 1.2 Sơ lược hệ thống điều khiển mô chuyển động cánh .11 1.2.1 Sơ lược hệ thống điều khiển mô chuyển động cánh tay giới 12 1.2.2 Sơ lược hệ thống điều khiển mô chuyển động cánh tay Việt Nam .13 Chapter 2: Cơ sở lý thuyết hệ thống điều khiển mô chuyển động cánh tay 15 2.1 Cánh tay chuyển động phận cánh tay .15 2.1.1 Cấu tạo cánh tay 15 2.1.2 Chuyển động phần cánh tay 17 2.2 Cảm biến ghi nhận chuyển dộng 17 2.2.1 Cảm biến biến dạng, cảm biến dịch chuyển 19 2.2.2 Cảm biến gia tốc góc 21 2.3 Giải thuật xử lý liệu lý thuyết điều khiển .25 2.3.1 Giải thuật xử lý liệu: .26 2.3.2 Lý thuyết điều khiển 27 Chương 3: Thiết kế hệ thống điều khiển mô cho cánh tay .29 3.1 Giới thiệu chung hệ thống điều khiển mô chuyển động cánh tay 29 3.2 Khối cảm biến nhận dạng chuyển động- Bộ cảm biến biến trở trượt MPU6050 .30 -3- 3.2.1 Bộ cảm biến biến trở trượt .30 3.2.2 Cảm biến gia tốc góc/ la bàn MPU6050 32 3.3 Khối xử lý- Arduino Uno 37 3.3.1 Thông số Arduino UNO R3 38 3.3.2 Chương trình điều khiển: 44 Chương 4: Kết Bàn luận 53 Tài Liệu tham khảo 56 Phụ Lục .57 -4- Danh mục ký hiệu viết tắt DMP Digital Motion Processor EMG Electromyo Graphy I2C Interfacing Intergrated Circuit MEMS Microelectromechanical systems PWM Pulse Width Modulation SCL Serial Clock for I2C SDA Serial Data for I2C -5- Danh mục hình vẽ Hình 1-1 Minh họa cho hệ thống mô lắp ráp máy khí hệ 11 thống mô chuyển động cánh tay máy tính Hình 1-2 Bên trái: Cánh tay 22 dùng cho người khuyết tật với 22 bậc 13 tự Bên phải: Myo Gesture control band Myo, Mỹ Hình 2-1 Cấu tạo xương cánh tay 16 Hình 2-2 Cấu tạo xương cẳng tay 17 Hình 2-3 Cấu tạo xương bàn tay 17 Hình 2-4 Mô tả nguyên lý làm việc chung cảm biến 19 Hình 2-5 So sánh bề mặt tiếp xúc ngón tay cẳng tay 19 Hình 2-6 Nguyên lý làm việc cảm biến gia tốc vi 23 Hình 2-7 Nguyên lý hoạt động cảm biến gia tốc MEMS 25 Hình 2-8 Tiến trình xử lý tín hiệu hệ thống 27 Hình 3-1 Sơ đồ khối Hệ thống điều khiển mô chuyển động 30 cánh tay Hình 3-2 Hình minh họa cho cảm biến biến trở trượt 31 Hình 3-3 Nguyên lý hoạt động biến trở vị trí biến 31 trở, vị trí chạy biến trở Hình 3-4 Trạng thái ngón tay trạng thái tương ứng 32 chạy biến trở Hinh 3-5 Sơ đô khối cảm biến la bàn MPU6050 34 Hình 3-6 Module cảm biến MPU6050 35 Hinh 3-7 Vi điều khiển ATMEGA328 39 Hình 3-8 Các cổng vào Arduino Uno 44 Hình 3-9 Kết nối Arduino MPU6050 theo giao thức I2C 46 Hình 3-10 Minh họa cho kết nối biến trở Arduino 50 Hình 4-1 Các cử động mô qua cấu chấp hành ngón tay 53 -6- Danh mục bảng biểu Bảng 1-biểu diễn phạm vi góc hoạt động khớp chi -7- 18 Mở Đầu Trong giai đoạn phát triển vũ bão công nghệ điện tử y sinh nói chung chuyên ngành sinh nói riêng, ngành sinh Việt Nam đứng trước nhiều thời vận hội thách thức đường hội nhập với kinh tế giới Để đáp ứng nhu cầu phát triển xã hội nhằm bắt kịp bước tiến khoa học kỹ thuật đòi hỏi đội ngũ nhà khoa học, cán kỹ thuật công nhân lành nghề phải không ngừng nghiên cứu, học tập nâng cao trình độ để kịp thời tiếp cận làm chủ kiến thức khoa học kỹ thuật đại công nghệ tiên tiến Các khoá đào tạo thạc sỹ Trường Đại học Bách Khoa Hà Nội nhằm đào tạo cán khoa học có trình độ cao để tiếp thu làm chủ kỹ thuật phục vụ cho công tác nghiên cứu, giảng dạy Để đánh giá kết học tập toàn khoá học giao đề tài luận văn tốt nghiệp: “Thiết kế hệ thống điều khiển mô chuyển động cánh tay” Trong trình phát triển ngành điện tử y sinh, lĩnh vực sinh phát triển nhanh chóng, nhiều mặt sống với nhiều mức, nhiều quy mô công nghệ đại, tiên tiến nhằm đáp ứng nhu cầu xã hội Trong phải kể đến tiến vượt bậc khoa học kỹ thuật, đời hệ thống điều khiển mô thông minh tạo tiền đề cho phát triển mạnh mẽ kỹ công nghệ có tính chất tự động hoá cao, dần thay sức lao động người đồng thời hiệu đem lại cho sống lớn Hiện xuất cấu điều khiển Robot đời sống sinh hoạt trở nên phổ biến Chúng ứng dụng rộng rãi nhiều lĩnh vục khác nhau, đặc biệt lên ứng dụng điều khiển thực ảo ứng dụng điều khiển mô chuyển động thể người Chúng đóng vai trò quan trọng, chúng vừa đảm bảo độ xác vừa đảm bảo tính tin cậy an toàn mà với người hay máy móc thông thường khó đạt Đồng thời thay người làm việc môi trường độc hại, nơi người khó đặt chân tới vũ trụ Nói chung, ứng dụng điều khiển dựa vào chuyển động thể mảng công nghệ hứa hẹn, mà tương lai nhân -8- tố tiềm phát triển sống đại Do việc nghiên cứu vấn đề mô chuyển động mang tính thời Để nghiên cứu thiết kế hệ thống điều khiển mô chuyển động cho cánh tay sử dụng cảm biến biến trở trượt cảm biến la bàn Arduino, luận văn gồm bốn chương: Chương 1: Giới thiệu chung mô chuyển động thể Chương 2: Cơ sở lý thuyết cảm biến điều khiển, Chương 3: Thiết kế hệ thống điều khiển mô cho cánh tay Chương 4: Kết Bàn luận Trong luận văn này, tác giả tập trung vào mô vị trí chuyển động cánh tay Đề tài hoàn thành thời hạn hướng dẫn tận tình TS Nguyễn Phan Kiên – Giảng viên Viện Điện Tử - Viễn Thông - Trường Đại học Bách Khoa Hà Nội bạn đồng nghiệp nỗ lực thân Tôi xin chân thành cảm ơn thầy giáo hướng dẫn, thầy giáo, cô giáo thuộc trường Đại học Bách Khoa Hà Nội giúp đỡ trình học tập trình nghiên cứu thực luận văn Vì nhiều điều kiện khách quan khả thân, luận văn hoàn thành chắn thiếu sót Rất mong góp ý thầy cô giáo bạn đồng nghiệp -9- Chương 1: Tổng quan điều khiển mô chuyển động thể 1.1 Định nghĩa mô điều khiên mô phỏng: Mô việc nghiên cứu trạng thái mô hình để qua hiểu hệ thống thực, mô tiến hành thử nghiệm mô hình Đó trình tiến hành nghiên cứu vật thật nhân tạo, tái tạo tượng mà người nghiên cứu cần để quan sát làm thực nghiệp, từ rút kết luận tương tự vật thật Ta thực việc mô từ phương tiện đơn giản giấy, bút đến nguyên vật liệu tái tạo lại nguyên mẫu (mô hình gỗ, nhựa, sợi thủy tinh…) kết hợp với việc đo đạc đánh giá với mô hình máy tính, thiết bị đo đạc chuyên dụng Hình 1-1 Minh họa cho hệ thống mô lắp ráp máy khí hệ thống mô chuyển động cánh tay máy tính Điều khiển mô sử dụng mô tả tham số đầu vào, mô hình hệ thống thực dạng tín hiệu điện tương tự số để ứng dụng điều khiển hệ thống xác định Điều khiển mô thường sử dụng có hiệu để nghiên cứu trạng thái động nguyên mẫu điều kiện nghiên cứu vật thật khó khăn, tốn không an toàn Điều khiển mô chuyển động cánh tay điều khiển sử dụng tham số đầu vào mô hình cánh tay dạng tín hiệu điện để điều khiển đặc tả cấu chấp hành theo chuyển động - 10 - #define MPU6050_DLPF_BW_5 0x06 #define MPU6050_GCONFIG_FS_SEL_BIT #define MPU6050_GCONFIG_FS_SEL_LENGTH #define MPU6050_GYRO_FS_250 #define MPU6050_GYRO_FS_500 #define MPU6050_GYRO_FS_1000 #define MPU6050_GYRO_FS_2000 0x00 0x01 0x02 0x03 #define MPU6050_ACONFIG_XA_ST_BIT #define MPU6050_ACONFIG_YA_ST_BIT #define MPU6050_ACONFIG_ZA_ST_BIT #define MPU6050_ACONFIG_AFS_SEL_BIT #define MPU6050_ACONFIG_AFS_SEL_LENGTH #define MPU6050_ACONFIG_ACCEL_HPF_BIT #define MPU6050_ACONFIG_ACCEL_HPF_LENGTH #define MPU6050_ACCEL_FS_2 #define MPU6050_ACCEL_FS_4 #define MPU6050_ACCEL_FS_8 #define MPU6050_ACCEL_FS_16 0x00 0x01 0x02 0x03 #define MPU6050_DHPF_RESET 0x00 #define MPU6050_DHPF_5 0x01 #define MPU6050_DHPF_2P5 0x02 #define MPU6050_DHPF_1P25 0x03 #define MPU6050_DHPF_0P63 0x04 #define MPU6050_DHPF_HOLD 0x07 #define MPU6050_TEMP_FIFO_EN_BIT #define MPU6050_XG_FIFO_EN_BIT #define MPU6050_YG_FIFO_EN_BIT #define MPU6050_ZG_FIFO_EN_BIT #define MPU6050_ACCEL_FIFO_EN_BIT #define MPU6050_SLV2_FIFO_EN_BIT #define MPU6050_SLV1_FIFO_EN_BIT #define MPU6050_SLV0_FIFO_EN_BIT #define MPU6050_MULT_MST_EN_BIT #define MPU6050_WAIT_FOR_ES_BIT #define MPU6050_SLV_3_FIFO_EN_BIT #define MPU6050_I2C_MST_P_NSR_BIT #define MPU6050_I2C_MST_CLK_BIT #define MPU6050_I2C_MST_CLK_LENGTH #define MPU6050_CLOCK_DIV_348 #define MPU6050_CLOCK_DIV_333 #define MPU6050_CLOCK_DIV_320 #define MPU6050_CLOCK_DIV_308 #define MPU6050_CLOCK_DIV_296 #define MPU6050_CLOCK_DIV_286 #define MPU6050_CLOCK_DIV_276 #define MPU6050_CLOCK_DIV_267 #define MPU6050_CLOCK_DIV_258 #define MPU6050_CLOCK_DIV_500 #define MPU6050_CLOCK_DIV_471 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA - 60 - #define MPU6050_CLOCK_DIV_444 #define MPU6050_CLOCK_DIV_421 #define MPU6050_CLOCK_DIV_400 #define MPU6050_CLOCK_DIV_381 #define MPU6050_CLOCK_DIV_364 0xB 0xC 0xD 0xE 0xF #define MPU6050_I2C_SLV_RW_BIT #define MPU6050_I2C_SLV_ADDR_BIT #define MPU6050_I2C_SLV_ADDR_LENGTH #define MPU6050_I2C_SLV_EN_BIT #define MPU6050_I2C_SLV_BYTE_SW_BIT #define MPU6050_I2C_SLV_REG_DIS_BIT #define MPU6050_I2C_SLV_GRP_BIT #define MPU6050_I2C_SLV_LEN_BIT #define MPU6050_I2C_SLV_LEN_LENGTH #define MPU6050_I2C_SLV4_RW_BIT #define MPU6050_I2C_SLV4_ADDR_BIT #define MPU6050_I2C_SLV4_ADDR_LENGTH #define MPU6050_I2C_SLV4_EN_BIT #define MPU6050_I2C_SLV4_INT_EN_BIT #define MPU6050_I2C_SLV4_REG_DIS_BIT #define MPU6050_I2C_SLV4_MST_DLY_BIT #define MPU6050_I2C_SLV4_MST_DLY_LENGTH #define MPU6050_MST_PASS_THROUGH_BIT #define MPU6050_MST_I2C_SLV4_DONE_BIT #define MPU6050_MST_I2C_LOST_ARB_BIT #define MPU6050_MST_I2C_SLV4_NACK_BIT #define MPU6050_MST_I2C_SLV3_NACK_BIT #define MPU6050_MST_I2C_SLV2_NACK_BIT #define MPU6050_MST_I2C_SLV1_NACK_BIT #define MPU6050_MST_I2C_SLV0_NACK_BIT #define MPU6050_INTCFG_INT_LEVEL_BIT #define MPU6050_INTCFG_INT_OPEN_BIT #define MPU6050_INTCFG_LATCH_INT_EN_BIT #define MPU6050_INTCFG_INT_RD_CLEAR_BIT #define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT #define MPU6050_INTCFG_FSYNC_INT_EN_BIT #define MPU6050_INTCFG_I2C_BYPASS_EN_BIT #define MPU6050_INTCFG_CLKOUT_EN_BIT #define MPU6050_INTMODE_ACTIVEHIGH 0x00 #define MPU6050_INTMODE_ACTIVELOW 0x01 #define MPU6050_INTDRV_PUSHPULL 0x00 #define MPU6050_INTDRV_OPENDRAIN 0x01 #define MPU6050_INTLATCH_50USPULSE 0x00 #define MPU6050_INTLATCH_WAITCLEAR 0x01 #define MPU6050_INTCLEAR_STATUSREAD 0x00 #define MPU6050_INTCLEAR_ANYREAD 0x01 #define MPU6050_INTERRUPT_FF_BIT #define MPU6050_INTERRUPT_MOT_BIT - 61 - #define MPU6050_INTERRUPT_ZMOT_BIT #define MPU6050_INTERRUPT_FIFO_OFLOW_BIT #define MPU6050_INTERRUPT_I2C_MST_INT_BIT #define MPU6050_INTERRUPT_PLL_RDY_INT_BIT #define MPU6050_INTERRUPT_DMP_INT_BIT #define MPU6050_INTERRUPT_DATA_RDY_BIT // TODO: figure out what these actually // UMPL source code is not very obivous #define MPU6050_DMPINT_5_BIT #define MPU6050_DMPINT_4_BIT #define MPU6050_DMPINT_3_BIT #define MPU6050_DMPINT_2_BIT #define MPU6050_DMPINT_1_BIT #define MPU6050_DMPINT_0_BIT #define MPU6050_MOTION_MOT_XNEG_BIT #define MPU6050_MOTION_MOT_XPOS_BIT #define MPU6050_MOTION_MOT_YNEG_BIT #define MPU6050_MOTION_MOT_YPOS_BIT #define MPU6050_MOTION_MOT_ZNEG_BIT #define MPU6050_MOTION_MOT_ZPOS_BIT #define MPU6050_MOTION_MOT_ZRMOT_BIT #define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT #define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT #define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT #define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT #define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT #define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT #define MPU6050_PATHRESET_GYRO_RESET_BIT #define MPU6050_PATHRESET_ACCEL_RESET_BIT #define MPU6050_PATHRESET_TEMP_RESET_BIT #define MPU6050_DETECT_ACCEL_ON_DELAY_BIT #define MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH #define MPU6050_DETECT_FF_COUNT_BIT #define MPU6050_DETECT_FF_COUNT_LENGTH #define MPU6050_DETECT_MOT_COUNT_BIT #define MPU6050_DETECT_MOT_COUNT_LENGTH #define MPU6050_DETECT_DECREMENT_RESET 0x0 #define MPU6050_DETECT_DECREMENT_1 0x1 #define MPU6050_DETECT_DECREMENT_2 0x2 #define MPU6050_DETECT_DECREMENT_4 0x3 #define MPU6050_USERCTRL_DMP_EN_BIT #define MPU6050_USERCTRL_FIFO_EN_BIT #define MPU6050_USERCTRL_I2C_MST_EN_BIT #define MPU6050_USERCTRL_I2C_IF_DIS_BIT #define MPU6050_USERCTRL_DMP_RESET_BIT #define MPU6050_USERCTRL_FIFO_RESET_BIT #define MPU6050_USERCTRL_I2C_MST_RESET_BIT #define MPU6050_USERCTRL_SIG_COND_RESET_BIT #define MPU6050_PWR1_DEVICE_RESET_BIT - 62 - #define MPU6050_PWR1_SLEEP_BIT #define MPU6050_PWR1_CYCLE_BIT #define MPU6050_PWR1_TEMP_DIS_BIT #define MPU6050_PWR1_CLKSEL_BIT #define MPU6050_PWR1_CLKSEL_LENGTH #define MPU6050_CLOCK_INTERNAL #define MPU6050_CLOCK_PLL_XGYRO #define MPU6050_CLOCK_PLL_YGYRO #define MPU6050_CLOCK_PLL_ZGYRO #define MPU6050_CLOCK_PLL_EXT32K #define MPU6050_CLOCK_PLL_EXT19M #define MPU6050_CLOCK_KEEP_RESET 0x00 0x01 0x02 0x03 0x04 0x05 0x07 #define MPU6050_PWR2_LP_WAKE_CTRL_BIT #define MPU6050_PWR2_LP_WAKE_CTRL_LENGTH #define MPU6050_PWR2_STBY_XA_BIT #define MPU6050_PWR2_STBY_YA_BIT #define MPU6050_PWR2_STBY_ZA_BIT #define MPU6050_PWR2_STBY_XG_BIT #define MPU6050_PWR2_STBY_YG_BIT #define MPU6050_PWR2_STBY_ZG_BIT #define MPU6050_WAKE_FREQ_1P25 0x0 #define MPU6050_WAKE_FREQ_2P5 0x1 #define MPU6050_WAKE_FREQ_5 0x2 #define MPU6050_WAKE_FREQ_10 0x3 #define MPU6050_BANKSEL_PRFTCH_EN_BIT #define MPU6050_BANKSEL_CFG_USER_BANK_BIT #define MPU6050_BANKSEL_MEM_SEL_BIT #define MPU6050_BANKSEL_MEM_SEL_LENGTH #define MPU6050_WHO_AM_I_BIT #define MPU6050_WHO_AM_I_LENGTH #define MPU6050_DMP_MEMORY_BANKS #define MPU6050_DMP_MEMORY_BANK_SIZE 256 #define MPU6050_DMP_MEMORY_CHUNK_SIZE 16 // note: DMP code memory blocks defined at end of header file class MPU6050 { public: MPU6050(); MPU6050(uint8_t address); void initialize(); bool testConnection(); // AUX_VDDIO register uint8_t getAuxVDDIOLevel(); void setAuxVDDIOLevel(uint8_t level); // SMPLRT_DIV register uint8_t getRate(); void setRate(uint8_t rate); - 63 - // CONFIG register uint8_t getExternalFrameSync(); void setExternalFrameSync(uint8_t sync); uint8_t getDLPFMode(); void setDLPFMode(uint8_t bandwidth); // GYRO_CONFIG register uint8_t getFullScaleGyroRange(); void setFullScaleGyroRange(uint8_t range); // ACCEL_CONFIG register bool getAccelXSelfTest(); void setAccelXSelfTest(bool enabled); bool getAccelYSelfTest(); void setAccelYSelfTest(bool enabled); bool getAccelZSelfTest(); void setAccelZSelfTest(bool enabled); uint8_t getFullScaleAccelRange(); void setFullScaleAccelRange(uint8_t range); uint8_t getDHPFMode(); void setDHPFMode(uint8_t mode); // FF_THR register uint8_t getFreefallDetectionThreshold(); void setFreefallDetectionThreshold(uint8_t threshold); // FF_DUR register uint8_t getFreefallDetectionDuration(); void setFreefallDetectionDuration(uint8_t duration); // MOT_THR register uint8_t getMotionDetectionThreshold(); void setMotionDetectionThreshold(uint8_t threshold); // MOT_DUR register uint8_t getMotionDetectionDuration(); void setMotionDetectionDuration(uint8_t duration); // ZRMOT_THR register uint8_t getZeroMotionDetectionThreshold(); void setZeroMotionDetectionThreshold(uint8_t threshold); // ZRMOT_DUR register uint8_t getZeroMotionDetectionDuration(); void setZeroMotionDetectionDuration(uint8_t duration); // FIFO_EN register bool getTempFIFOEnabled(); void setTempFIFOEnabled(bool enabled); bool getXGyroFIFOEnabled(); void setXGyroFIFOEnabled(bool enabled); bool getYGyroFIFOEnabled(); void setYGyroFIFOEnabled(bool enabled); bool getZGyroFIFOEnabled(); void setZGyroFIFOEnabled(bool enabled); bool getAccelFIFOEnabled(); - 64 - void setAccelFIFOEnabled(bool enabled); bool getSlave2FIFOEnabled(); void setSlave2FIFOEnabled(bool enabled); bool getSlave1FIFOEnabled(); void setSlave1FIFOEnabled(bool enabled); bool getSlave0FIFOEnabled(); void setSlave0FIFOEnabled(bool enabled); // I2C_MST_CTRL register bool getMultiMasterEnabled(); void setMultiMasterEnabled(bool enabled); bool getWaitForExternalSensorEnabled(); void setWaitForExternalSensorEnabled(bool enabled); bool getSlave3FIFOEnabled(); void setSlave3FIFOEnabled(bool enabled); bool getSlaveReadWriteTransitionEnabled(); void setSlaveReadWriteTransitionEnabled(bool enabled); uint8_t getMasterClockSpeed(); void setMasterClockSpeed(uint8_t speed); // I2C_SLV* registers (Slave 0-3) uint8_t getSlaveAddress(uint8_t num); void setSlaveAddress(uint8_t num, uint8_t address); uint8_t getSlaveRegister(uint8_t num); void setSlaveRegister(uint8_t num, uint8_t reg); bool getSlaveEnabled(uint8_t num); void setSlaveEnabled(uint8_t num, bool enabled); bool getSlaveWordByteSwap(uint8_t num); void setSlaveWordByteSwap(uint8_t num, bool enabled); bool getSlaveWriteMode(uint8_t num); void setSlaveWriteMode(uint8_t num, bool mode); bool getSlaveWordGroupOffset(uint8_t num); void setSlaveWordGroupOffset(uint8_t num, bool enabled); uint8_t getSlaveDataLength(uint8_t num); void setSlaveDataLength(uint8_t num, uint8_t length); // I2C_SLV* registers (Slave 4) uint8_t getSlave4Address(); void setSlave4Address(uint8_t address); uint8_t getSlave4Register(); void setSlave4Register(uint8_t reg); void setSlave4OutputByte(uint8_t data); bool getSlave4Enabled(); void setSlave4Enabled(bool enabled); bool getSlave4InterruptEnabled(); void setSlave4InterruptEnabled(bool enabled); bool getSlave4WriteMode(); void setSlave4WriteMode(bool mode); uint8_t getSlave4MasterDelay(); void setSlave4MasterDelay(uint8_t delay); uint8_t getSlate4InputByte(); // I2C_MST_STATUS register bool getPassthroughStatus(); bool getSlave4IsDone(); bool getLostArbitration(); bool getSlave4Nack(); - 65 - bool getSlave3Nack(); bool getSlave2Nack(); bool getSlave1Nack(); bool getSlave0Nack(); // INT_PIN_CFG register bool getInterruptMode(); void setInterruptMode(bool mode); bool getInterruptDrive(); void setInterruptDrive(bool drive); bool getInterruptLatch(); void setInterruptLatch(bool latch); bool getInterruptLatchClear(); void setInterruptLatchClear(bool clear); bool getFSyncInterruptLevel(); void setFSyncInterruptLevel(bool level); bool getFSyncInterruptEnabled(); void setFSyncInterruptEnabled(bool enabled); bool getI2CBypassEnabled(); void setI2CBypassEnabled(bool enabled); bool getClockOutputEnabled(); void setClockOutputEnabled(bool enabled); // INT_ENABLE register uint8_t getIntEnabled(); void setIntEnabled(uint8_t enabled); bool getIntFreefallEnabled(); void setIntFreefallEnabled(bool enabled); bool getIntMotionEnabled(); void setIntMotionEnabled(bool enabled); bool getIntZeroMotionEnabled(); void setIntZeroMotionEnabled(bool enabled); bool getIntFIFOBufferOverflowEnabled(); void setIntFIFOBufferOverflowEnabled(bool enabled); bool getIntI2CMasterEnabled(); void setIntI2CMasterEnabled(bool enabled); bool getIntDataReadyEnabled(); void setIntDataReadyEnabled(bool enabled); // INT_STATUS register uint8_t getIntStatus(); bool getIntFreefallStatus(); bool getIntMotionStatus(); bool getIntZeroMotionStatus(); bool getIntFIFOBufferOverflowStatus(); bool getIntI2CMasterStatus(); bool getIntDataReadyStatus(); // ACCEL_*OUT_* registers void getMotion9(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz, int16_t* mx, int16_t* my, int16_t* mz); void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz); void getAcceleration(int16_t* x, int16_t* y, int16_t* z); int16_t getAccelerationX(); int16_t getAccelerationY(); int16_t getAccelerationZ(); - 66 - // TEMP_OUT_* registers int16_t getTemperature(); // GYRO_*OUT_* registers void getRotation(int16_t* x, int16_t* y, int16_t* z); int16_t getRotationX(); int16_t getRotationY(); int16_t getRotationZ(); // EXT_SENS_DATA_* registers uint8_t getExternalSensorByte(int position); uint16_t getExternalSensorWord(int position); uint32_t getExternalSensorDWord(int position); // MOT_DETECT_STATUS register bool getXNegMotionDetected(); bool getXPosMotionDetected(); bool getYNegMotionDetected(); bool getYPosMotionDetected(); bool getZNegMotionDetected(); bool getZPosMotionDetected(); bool getZeroMotionDetected(); // I2C_SLV*_DO register void setSlaveOutputByte(uint8_t num, uint8_t data); // I2C_MST_DELAY_CTRL register bool getExternalShadowDelayEnabled(); void setExternalShadowDelayEnabled(bool enabled); bool getSlaveDelayEnabled(uint8_t num); void setSlaveDelayEnabled(uint8_t num, bool enabled); // SIGNAL_PATH_RESET register void resetGyroscopePath(); void resetAccelerometerPath(); void resetTemperaturePath(); // MOT_DETECT_CTRL register uint8_t getAccelerometerPowerOnDelay(); void setAccelerometerPowerOnDelay(uint8_t delay); uint8_t getFreefallDetectionCounterDecrement(); void setFreefallDetectionCounterDecrement(uint8_t decrement); uint8_t getMotionDetectionCounterDecrement(); void setMotionDetectionCounterDecrement(uint8_t decrement); // USER_CTRL register bool getFIFOEnabled(); void setFIFOEnabled(bool enabled); bool getI2CMasterModeEnabled(); void setI2CMasterModeEnabled(bool enabled); void switchSPIEnabled(bool enabled); void resetFIFO(); void resetI2CMaster(); void resetSensors(); // PWR_MGMT_1 register void reset(); - 67 - bool getSleepEnabled(); void setSleepEnabled(bool enabled); bool getWakeCycleEnabled(); void setWakeCycleEnabled(bool enabled); bool getTempSensorEnabled(); void setTempSensorEnabled(bool enabled); uint8_t getClockSource(); void setClockSource(uint8_t source); // PWR_MGMT_2 register uint8_t getWakeFrequency(); void setWakeFrequency(uint8_t frequency); bool getStandbyXAccelEnabled(); void setStandbyXAccelEnabled(bool enabled); bool getStandbyYAccelEnabled(); void setStandbyYAccelEnabled(bool enabled); bool getStandbyZAccelEnabled(); void setStandbyZAccelEnabled(bool enabled); bool getStandbyXGyroEnabled(); void setStandbyXGyroEnabled(bool enabled); bool getStandbyYGyroEnabled(); void setStandbyYGyroEnabled(bool enabled); bool getStandbyZGyroEnabled(); void setStandbyZGyroEnabled(bool enabled); // FIFO_COUNT_* registers uint16_t getFIFOCount(); // FIFO_R_W register uint8_t getFIFOByte(); void setFIFOByte(uint8_t data); void getFIFOBytes(uint8_t *data, uint8_t length); // WHO_AM_I register uint8_t getDeviceID(); void setDeviceID(uint8_t id); // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ======== // XG_OFFS_TC register uint8_t getOTPBankValid(); void setOTPBankValid(bool enabled); int8_t getXGyroOffsetTC(); void setXGyroOffsetTC(int8_t offset); // YG_OFFS_TC register int8_t getYGyroOffsetTC(); void setYGyroOffsetTC(int8_t offset); // ZG_OFFS_TC register int8_t getZGyroOffsetTC(); void setZGyroOffsetTC(int8_t offset); // X_FINE_GAIN register int8_t getXFineGain(); void setXFineGain(int8_t gain); - 68 - // Y_FINE_GAIN register int8_t getYFineGain(); void setYFineGain(int8_t gain); // Z_FINE_GAIN register int8_t getZFineGain(); void setZFineGain(int8_t gain); // XA_OFFS_* registers int16_t getXAccelOffset(); void setXAccelOffset(int16_t offset); // YA_OFFS_* register int16_t getYAccelOffset(); void setYAccelOffset(int16_t offset); // ZA_OFFS_* register int16_t getZAccelOffset(); void setZAccelOffset(int16_t offset); // XG_OFFS_USR* registers int16_t getXGyroOffset(); void setXGyroOffset(int16_t offset); // YG_OFFS_USR* register int16_t getYGyroOffset(); void setYGyroOffset(int16_t offset); // ZG_OFFS_USR* register int16_t getZGyroOffset(); void setZGyroOffset(int16_t offset); // INT_ENABLE register (DMP functions) bool getIntPLLReadyEnabled(); void setIntPLLReadyEnabled(bool enabled); bool getIntDMPEnabled(); void setIntDMPEnabled(bool enabled); // DMP_INT_STATUS bool getDMPInt5Status(); bool getDMPInt4Status(); bool getDMPInt3Status(); bool getDMPInt2Status(); bool getDMPInt1Status(); bool getDMPInt0Status(); // INT_STATUS register (DMP functions) bool getIntPLLReadyStatus(); bool getIntDMPStatus(); // USER_CTRL register (DMP functions) bool getDMPEnabled(); void setDMPEnabled(bool enabled); void resetDMP(); // BANK_SEL register void setMemoryBank(uint8_t bank, bool prefetchEnabled=false, bool userBank=false); - 69 - // MEM_START_ADDR register void setMemoryStartAddress(uint8_t address); // MEM_R_W register uint8_t readMemoryByte(); void writeMemoryByte(uint8_t data); void readMemoryBlock(uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0); bool writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true, bool useProgMem=false); bool writeProgMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t bank=0, uint8_t address=0, bool verify=true); bool writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, bool useProgMem=false); bool writeProgDMPConfigurationSet(const uint8_t *data, uint16_t dataSize); // DMP_CFG_1 register uint8_t getDMPConfig1(); void setDMPConfig1(uint8_t config); // DMP_CFG_2 register uint8_t getDMPConfig2(); void setDMPConfig2(uint8_t config); // special methods for MotionApps 2.0 implementation #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS20 uint8_t *dmpPacketBuffer; uint16_t dmpPacketSize; uint8_t dmpInitialize(); bool dmpPacketAvailable(); uint8_t dmpSetFIFORate(uint8_t fifoRate); uint8_t dmpGetFIFORate(); uint8_t dmpGetSampleStepSizeMS(); uint8_t dmpGetSampleFrequency(); int32_t dmpDecodeTemperature(int8_t tempReg); // Register callbacks after a packet of FIFO data is processed //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); uint8_t dmpRunFIFORateProcesses(); // Setup FIFO for various output uint8_t dmpSendQuaternion(uint_fast16_t accuracy); uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); - 70 - // Get Fixed Point data from FIFO uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpSetLinearAccelFilterCoefficient(float coef); uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetEuler(float *data, Quaternion *q); uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); // Get Floating Point data from FIFO uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); - 71 - uint8_t dmpInitFIFOParam(); uint8_t dmpCloseFIFO(); uint8_t dmpSetGyroDataSource(uint8_t source); uint8_t dmpDecodeQuantizedAccel(); uint32_t dmpGetGyroSumOfSquare(); uint32_t dmpGetAccelSumOfSquare(); void dmpOverrideQuaternion(long *q); uint16_t dmpGetFIFOPacketSize(); #endif // special methods for MotionApps 4.1 implementation #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS41 uint8_t *dmpPacketBuffer; uint16_t dmpPacketSize; uint8_t dmpInitialize(); bool dmpPacketAvailable(); uint8_t dmpSetFIFORate(uint8_t fifoRate); uint8_t dmpGetFIFORate(); uint8_t dmpGetSampleStepSizeMS(); uint8_t dmpGetSampleFrequency(); int32_t dmpDecodeTemperature(int8_t tempReg); // Register callbacks after a packet of FIFO data is processed //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority); //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func); uint8_t dmpRunFIFORateProcesses(); // Setup FIFO for various output uint8_t dmpSendQuaternion(uint_fast16_t accuracy); uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendPacketNumber(uint_fast16_t accuracy); uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy); uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy); // Get Fixed Point data from FIFO uint8_t dmpGetAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetQuaternion(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetQuaternion(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetQuaternion(Quaternion *q, const uint8_t* packet=0); uint8_t dmpGet6AxisQuaternion(int32_t *data, const uint8_t* packet=0); uint8_t dmpGet6AxisQuaternion(int16_t *data, const uint8_t* packet=0); uint8_t dmpGet6AxisQuaternion(Quaternion *q, const uint8_t* packet=0); uint8_t dmpGetRelativeQuaternion(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetRelativeQuaternion(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetRelativeQuaternion(Quaternion *data, const uint8_t* packet=0); - 72 - uint8_t dmpGetGyro(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGyro(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGyro(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetMag(int16_t *data, const uint8_t* packet=0); uint8_t dmpSetLinearAccelFilterCoefficient(float coef); uint8_t dmpGetLinearAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetLinearAccel(VectorInt16 *v, VectorInt16 *vRaw, VectorFloat *gravity); uint8_t dmpGetLinearAccelInWorld(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccelInWorld(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetLinearAccelInWorld(VectorInt16 *v, VectorInt16 *vReal, Quaternion *q); uint8_t dmpGetGyroAndAccelSensor(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroAndAccelSensor(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroAndAccelSensor(VectorInt16 *g, VectorInt16 *a, const uint8_t* packet=0); uint8_t dmpGetGyroSensor(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroSensor(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGyroSensor(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetControlData(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetTemperature(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGravity(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetGravity(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetGravity(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetGravity(VectorFloat *v, Quaternion *q); uint8_t dmpGetUnquantizedAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetUnquantizedAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetUnquantizedAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetQuantizedAccel(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetQuantizedAccel(int16_t *data, const uint8_t* packet=0); uint8_t dmpGetQuantizedAccel(VectorInt16 *v, const uint8_t* packet=0); uint8_t dmpGetExternalSensorData(int32_t *data, uint16_t size, const uint8_t* packet=0); uint8_t dmpGetEIS(int32_t *data, const uint8_t* packet=0); uint8_t dmpGetEuler(float *data, Quaternion *q); uint8_t dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity); // Get Floating Point data from FIFO uint8_t dmpGetAccelFloat(float *data, const uint8_t* packet=0); uint8_t dmpGetQuaternionFloat(float *data, const uint8_t* packet=0); uint8_t dmpProcessFIFOPacket(const unsigned char *dmpData); uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t *processed=NULL); uint8_t dmpSetFIFOProcessedCallback(void (*func) (void)); uint8_t dmpInitFIFOParam(); uint8_t dmpCloseFIFO(); uint8_t dmpSetGyroDataSource(uint8_t source); uint8_t dmpDecodeQuantizedAccel(); uint32_t dmpGetGyroSumOfSquare(); uint32_t dmpGetAccelSumOfSquare(); void dmpOverrideQuaternion(long *q); uint16_t dmpGetFIFOPacketSize(); #endif private: uint8_t devAddr; uint8_t buffer[14]; - 73 - }; #endif /* _MPU6050_H_ */ - 74 - ... ĐIỀU KHIỂN HỆ THỐNG ĐIỀU KHIỂN MÔ PHỎNG CHUYỂN ĐỘNG CÁNH TAY Cử động nhỏ ngón tay Chuyển động cánh tay khiển mô chuyển động cánh tay: Tín hiệu điều chế độ rông xung PWM Hình 3-1 Sơ đồ khối Hệ thống. .. điều khiển mô chuyển động thể 10 1.1 Định nghĩa mô điều khiên mô phỏng: 10 1.2 Sơ lược hệ thống điều khiển mô chuyển động cánh .11 1.2.1 Sơ lược hệ thống điều khiển mô chuyển động cánh. .. tối ưu để nhận thức phát triển hệ thống dựa hệ thống điều khiển hệ trước 1.2 Sơ lược hệ thống điều khiển mô chuyển động cánh Các hệ thống điều khiển mô chuyển động ứng dụng rộng rãi lĩnh vực
- Xem thêm -

Xem thêm: Thiết kế hệ thống điều khiển mô phỏng chuyển động cánh tay , Thiết kế hệ thống điều khiển mô phỏng chuyển động cánh tay ,

Từ khóa liên quan