MÔ PHỎNG CHUYỂN ĐỘNG CÁNH
TAY DÙNG CẢM BIẾN GIA TỐC
MỤC LỤC
DANH MỤC CÁC HÌNH VẼ..........................................................................................VII
DANH MỤC CÁC BẢNG BIỂU...................................................................................VIII
DANH MỤC CÁC TỪ VIẾT TẮT...................................................................................IX
CHƯƠNG 1. GIỚI THIỆU CHUNG .................................................................................1
1.1
GIỚI THIỆU..................................................................................................................1
1.2
GIỚI THIỆU ĐỀ TÀI......................................................................................................1
CHƯƠNG 2. LINH KIỆN SỬ DỤNG VÀ PHẦN MỀM.................................................2
2.1
ARDUINO UNO R3........................................................................................................2
2.2
CẢM BIẾN GIA TỐC MPU-6050....................................................................................4
2.3
MODULE BLUETOOTH CH-05..................................................................................5
2.4
MODULE BLUETOOTH CH-05..................................................................................7
2.5
USB TO TTL PL2303...................................................................................................8
CHƯƠNG 3. THIẾT KẾ MẠCH......................................................................................10
3.1
SƠ ĐỒ KHỐI...............................................................................................................10
3.2
NGUYÊN LÝ HOẠT ĐỘNG ..........................................................................................11
CHƯƠNG 4. KẾT QUẢ MÔ PHỎNG.............................................................................12
4.1
MÔ PHỎNG TRÊN IDE:..............................................................................................12
4.2
MÔ PHỎNG TRÊN UNITY 3D:.........................................................................................22
CHƯƠNG 5. KẾT LUẬN..................................................................................................22
4.1
KẾT LUẬN:............................................................................................................22
4.1.1
Ưu điểm:...........................................................................................................22
4.1.2
Nhược điểm:......................................................................................................22
4.2
HƯỚNG PHÁT TRIỂN:................................................................................................22
TÀI LIỆU THAM KHẢO....................................................................................................7
PHỤ LỤC A ..........................................................................................................................8
DANH MỤC CÁC HÌNH VẼ
HÌNH 2-1: ARDUINO UNO R3...........................................................................................3
HÌNH 2-2: MPU-6050...........................................................................................................5
HÌNH 2-3: MODULE BLUETOOTH HC-05....................................................................7
HÌNH 2-4: MODULE BLUETOOTH HC-06....................................................................8
HÌNH 2-5: USBE TO TLL PL2303.....................................................................................9
DANH MỤC CÁC B
BẢNG 2-1: THÔNG SỐ KĨ THUẬT CỦA ARDUINO UNO..........................................4
YBẢNG 2-2: THÔNG SỐ KĨ THUẬT CỦA MPU-6050.................................................5
YBẢNG 2-3: HƯỚNG DẪN NỐI DÂY HC-05.................................................................2
YBẢNG 2-4: HƯỚNG DẪN NỐI DÂY HC-06.................................................................8
YBẢNG 2-5: HƯỚNG DẪN NỐI DÂY PL2303...............................................................9
DANH MỤC CÁC TỪ VIẾT TẮT
BDT
Broadband Digital Terminal
FFT
Fast Fourier Transform
MIMO
Multi-Input Multi-Output
Trang 1/17
CHƯƠNG 1.
GIỚI THIỆU CHUNG
1.1 Giới thiệu
Ngày nay, việc mô phỏng lại chuyển động của cơ thể người ngày một phổ biến và
được ứng dụng vào nhiều lĩnh vực khác nhau như : phim ảnh 3D, trò chơi tương tác
thực tế ảo, ý tế…từ đó có thể đưa ra phương án tác chiến, phương pháp chữa trị phù
hợp.
1.2 Giới thiệu đề tài
Đề tài ‘’MÔ PHỎNG CHUYỂN ĐỘNG CÁNH TAY BẰNG CẢM BIẾN GIA
TỐC’’ được thực hiện bằng cách lắp các cảm biến lên nhiều vị trí khác nhau trên
cánh tay để mô phỏng hoạt động của cánh tay bằng mô hình 3D. Kết quả đề tài này
có thể được áp dụng vào y tế để điều trị những chấn thương của cánh tay do sai tư
thế trong quá trình tập thể thao.
Mô Phỏng Chuyển Động Cánh Tay
Trang 2/17
CHƯƠNG 2.
LINH KIỆN SỬ DỤNG VÀ PHẦN MỀM
1.3 Arduino UNO R3
Arduino Uno được xây dựng với nhân là vi điều khiển ATmega328P sử dụng thạch
anh có chu kì dao động là 16 MHz. Với vi điều khiển này, ta có tổng cộng 14 pin
(ngõ) ra / vào được đánh số từ 0 tới 13 (trong đó có 6 pin PWM, được đánh dấu ~
trước mã số của pin). Song song đó, ta có thêm 6 pin nhận tín hiệu analog được
đánh kí hiệu từ A0 - A5, 6 pin này cũng có thể sử dụng được như các pin ra / vào
bình thường (như pin 0 - 13). Ở các pin được đề cập, pin 13 là pin đặc biệt vì nối
trực tiếp với LED trạng thái trên board.
Trên board còn có 1 nút reset, 1 ngõ kết nối với máy tính qua cổng USB và 1 ngõ
cấp nguồn sử dụng jack 2.1mm lấy năng lượng trực tiếp từ AC-DC adapter hay
thông qua ắc-quy nguồn.
Khi làm việc với Arduino board, một số thuật ngữ sau cần được lưu ý:
Flash Memory: bộ nhớ có thể ghi được, dữ liệu không bị mất ngay cả khi tắt
điện. Về vai trò, ta có thể hình dung bộ nhớ này như ổ cứng để chứa dữ liệu
trên board. Chương trình được viết cho Arduino sẽ được lưu ở đây. Kích
thước của vùng nhớ này thông thường dựa vào vi điều khiển được sử dụng,
ví dụ như ATmega8 có 8KB flash memory. Loại bộ nhớ này có thể chịu được
khoảng 10,000 lần ghi / xoá.
RAM: tương tự như RAM của máy tính, sẽ bị mất dữ liệu khi ngắt điện
nhưng bù lại tốc độ đọc ghi xoá rất nhanh. Kích thước nhỏ hơn Flash
Memory nhiều lần.
EEPROM: một dạng bộ nhớ tương tự như Flash Memory nhưng có chu kì
ghi / xoá cao hơn - khoảng 100,000 lần và có kích thước rất nhỏ. Để đọc /
ghi dữ liệu ta có thể dùng thư viện EEPROM của Arduino.
Ngoài ra, board Arduino còn cung cấp cho ta các pin khác nhau như pin cấp nguồn
3.3V, pin cấp nguồn 5V, pin GND...
Dòng tối đa trên mỗi chân I/0 là 30mA, dòng ra tối đa ( 5V ) là 500mA và dòng ra
tối đa ( 3V ) là 50mA.
Vi điều khiển ATmega328 có các bộ nhớ sau:
-32KB cho flash memory: để lưu các đoạn lệnh lập trình.
Mô Phỏng Chuyển Động Cánh Tay
Trang 3/17
-2KB cho SRAM: để lưu giá trị các biến khi lập trình. Khi mất điện, dữ liệu trên
SRAM sẽ bị mất.
-1KB cho EEPROM: đọc và ghi dữ liệu mà không lo bị mất khi xảy ra mất điện.
Hình 2-1 : Arduino UNO [1]
Mô Phỏng Chuyển Động Cánh Tay
Trang 4/17
Bảng 2-1 : Thông số kĩ thuật của Arduino UNO
Vi điều khiển
ATmega328 họ 8bit
Điện áp hoạt động
5V DC (chỉ được 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
14 (6 chân hardware PWM)
Số chân Analog
6 (độ phân giải 10bit)
Dòng tối đa trên mỗi chân I/O
30 mA
Dòng ra tối đa (5V)
500 mA
Dòng ra tối đa (3.3V)
50 mA
Bộ nhớ flash
32 KB (ATmega328)
SRAM
2 KB (ATmega328)
EEPROM
1 KB (ATmega328)
1.4 Cảm biến gia tốc góc MPU-6050
- MPU6050 là một cảm biến 6 trục, có chứa một gia tốc 3 trục và con quay hồi
chuyển 3 trục. Cảm biến này hoạt động ở điện áp 3.3V và sử dụng giao
tiếp I2C với tốc độ tối đa là 400kHz. Các cảm biến bên trong MPU-6050
sử dụng bộ chuyển đổi tương tự - số ( Analog to Digital Converter –
ADC ) 16-bit cho ra kết quả chi tiết về góc quay, toạ độ… Với 16-bit sẽ
có giá trị cho 1 cảm biến.
Mô Phỏng Chuyển Động Cánh Tay
Trang 5/17
-
Tuỳ thuộc vào yêu cầu sử dụng mà cảm biến MPU-6050 có thể hoạt động ở
chế độ xử lý cao hoặc chế độ đo góc quay chính xác. MPU-6050 có khả năng
-
đo ở phạm vị :
Con quay hồi chuyển :
Gia tốc :
Hơn nữa, MPU-6050 còn có sẵn bộ đệm dữ liệu 1024 byte cho phép vi điều
khiển phát lệnh cho cảm biến, và nhận về dữ liệu sau khi mpu-6050 tính toán
xong.
Hình 2-2 :
MPU-6050 [2]
Bảng 2-2 :
Thông số kỹ
thuật của
MPU6050
VCC
5V/3V3
GN
D
0V
SCL
Chân SCL trong giao tiếp I2C
SDA
Chân SDA trong giao tiếp I2C
XDA Chân dữ liệu (kết nối với cảm biến khác)
XCL Chân xung (kết nối với cảm biến khác)
AD0
Bit0 của địa chỉ I2C2
INT
Chân ngắt
1.5 Module
Bluetooth HC05
Module Bluetooth HC-5 master/slave được dùng để thiết lập kết nối giữa 2 thiết bị
bằng sóng bluetooth. Đặc biệt module HC-05 có thẻ hoạt động ở cả 2 chế độ master
hoặc slave.
Module bluetooth HC-05 được điều khiển bằng tập lệnh AT để thực hiện các tác vụ
mong muốn. Để module bluetooth chuyển từ chế độ thông thường sang điều khiển
bằng AT, ta có 2 cách sau :
Mô Phỏng Chuyển Động Cánh Tay
Trang 6/17
-
Cấp nguồn cho HC-05 ( Vcc và Gnd ) đồng thời cấp mức điện áp cao ( Vcc )
cho chân Key của module bluetooth. Khi đó giao tiếp bằng tập lệnh AT với
-
modulebangwf² oongcr Serial ( Tx và Rx ) với baud rate là 38400.
Cấp nguồn cho HC-05 trước sau đó cấp mức điện áp cao cho chân Key của
module. Bây giờ, có thể giao tiếp với module bằng tập lệnh AT với baud rate
là 9600.
Sau khi pari thành công với các thiết bị khác, đèn trên module sẽ nhấp nháy
chậm, cho thấy kết nối Serial đã được thiết lập.
Module HC-05 dùng nguồn cấp từ 3.6 V đến 6 V. Ngoài ra, module còn tương
thích với các vi điều khiển 5 V mà không cần chuyển đổi mức điện áp giao tiếp
5 V về 3.3 V như nhiều loại module.
Hình 2-3 : Module Bluetooth HC-05 [3]
1.6 Module Bluetootth HC-06
Bluetooth module SLAVE HC-06 cho phép vi điều khiển kết nối với các thiết bị
ngoại vi như : smartphone, laptop, usb bluetooth... thông qua giao tiếp Serial gửi và
nhận tín hiệu 2 chiều.
Mô Phỏng Chuyển Động Cánh Tay
Trang 7/17
Module bluetooth HC-06 sử dụng nguồn từ 3.5V đến 6V cung cấp cho board mà
không cần lo lắng về chênh lệch điện áp 3V - 5V gây hỏng board.
Bluetooth module gồm 6 chân theo thứ tự: KEY, VCC, GND, TX, RX, STATE.
Đây là module bluetooth SLAVE nghĩa là bạn không thể chủ động kết nối bằng vi
điều khiển, mà cần sử dụng smartphone, laptop, bluetooth usb... để dò tín hiệu và
kết nối (pair) từ smartphone, laptop, bluetooth usb... Sau khi pair thành công, bạn có
thể gửi và nhận tín hiệu từ vi điều khiển đến các thiết bị này.
Hình 2-4 : Module Bluetooth HC-06 [4]
Bảng 2-3 : Hướng dẫn nối dây
HC-06
Mô Phỏng Chuyển Động Cánh Tay
ARDUINO UNO
Trang 8/17
Vcc
5V
Gnd
Gnd
Tx
A4
Rx
A5
1.7 USB To TTL PL2303
USB to TTL Serial PL2303HX sử dụng IC chuyển đổi USB to COM PL2303HX
với nhiều cải tiến về hiệu năng của hãng Prolific.
Module USB to TTL Serial PL2303HX có sẵn các thành phần cần thiết, bạn chỉ cần
cắm vào cổng USB của máy tính là có ngay 1 cổng COM ở mức 5V có thể giao tiếp
với vi điều khiển. Module USB to TTL Serial có 3 LED gồm 1 LED nguồn,
1 LED báo tín hiệu Tx và 1 LED báo tín hiệu Rx.
Hình 2-5 : USB To TTL PL2303 [5]
Bảng 2-4 : Hướng dẫn nối dây
PL2303
Gnd
Tx
Mô Phỏng Chuyển Động Cánh Tay
Chân vi điều khiển
Gnd
Rx
Trang 9/17
Rx
5V
3.3 V
Tx
Vcc
CHƯƠNG 3.
THIẾT KẾ MẠCH
1.8 Sơ đồ khối
Khối mô phỏng 3D
Arduino Uno
MPU-6050
PL2303
HC-05
1.9 Nguyên lý làm việc
Mô Phỏng Chuyển Động Cánh Tay
HC-06
Trang 10/17
Khi xoay cảm biến gia tốc MPU-6050 thì thông số các giá trị của cảm biến gia tốc
và con quay hồi chuyển sẽ thay đổi, sau đó những thông số này sẽ được gởi về
Arduino và truyền đến Module Bluetooth HC-06.
Module HC-06 đóng vai trò Slave sẽ gửi data thu được từ cảm biến gia tốc MPU6050 đến module HC-05. Module Bluetooth HC-05 hoạt động ở chế độ Master, giao
tiếp bằng tập lệnh AT và được kết nối với máy tính thông qua USB Serial PL2303.
Phần mềm mô phỏng Unity 3D sẽ đọc data thu được từ Module Bluetooth HC-05
và tiến hành mô phỏng chuyển động trên mô hình 3D.
Mô Phỏng Chuyển Động Cánh Tay
Trang 11/17
CHƯƠNG 4.
1.10
Mô phỏng trên IDE
1.11
Mô phỏng trên Unity 3D
Mô Phỏng Chuyển Động Cánh Tay
KẾT QUẢ MÔ PHỎNG
Trang 12/17
CHƯƠNG 5.
1.12
KẾT LUẬN
Kết luận
1.1.1 Ưu điểm
Mạch chạy tốt, mô phỏng đúng với chuyển động cơ thể, ít bị trôi.
Mạch đơn giản, dễ thực hiện, ứng dụng được trong nhiều lĩnh vực cuộc sống.
1.1.2 Nhược điểm
Chương trình còn khá đơn giản, thô sơ. Chưa điều khiển được nhiều cảm biến bằng
1 Arduino.
1.13 Hướng phát triển
Đây là đề tài khá hay và mới mẻ, trong tương lai có thể phát triển thêm bằng cách
ứng dụng vào điều khiển robot bằng cảm biến gia tốc.
Mô Phỏng Chuyển Động Cánh Tay
Trang 13/17
TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1]
/>
[2]
/>
[3]
/>
[4]
/>
hc-06.html
[5]
/>
Mô Phỏng Chuyển Động Cánh Tay
Trang 14/17
PHỤ LỤC A
Code chương trình :
#include<Wire.h>
#include<I2Cdev.h>
#include<MPU6050.h>
const int MPU2=0x69, MPU1=0x68;
int16_t AcX1,AcY1,AcZ1,Tmp1,GyX1,GyY1,GyZ1;
int16_t AcX2,AcY2,AcZ2,Tmp2,GyX2,GyY2,GyZ2;
int data;
void setup()
{
// put your setup code here, to run once:
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(MPU1);
Wire.write(0x6B); //PWR_MDMT_1 register
Wire.write(0); // set to zero (wake up MPU6050)
Wire.endTransmission(true);
Wire.begin();
Wire.beginTransmission(MPU2);
Wire.write(0x6B); //PWR_MGMT_1 register
Wire.write(0); // set to zero (wake up MPU6050)
Wire.endTransmission(true);
}
void loop() {
Mô Phỏng Chuyển Động Cánh Tay
Trang 15/17
// put your main code here, to run repeatedly:
// get value for first MPU having address of 0x68
GetMPUvalue1(MPU1);
//get value for second MPU having address of 0x69
GetMPUvalue2(MPU2);
//print data to unity
}
void GetMPUvalue1(const int MPU1)
{
Wire.beginTransmission(MPU1);
Wire.write(0x3B); // starting with register 0x3B
Wire.endTransmission(false);
Wire.requestFrom(MPU1,14,true);
AcX1=Wire.read()<<8| Wire.read();
AcY1=Wire.read()<<8| Wire.read();
AcZ1=Wire.read()<<8| Wire.read();
Tmp1=Wire.read()<<8| Wire.read();
GyX1=Wire.read()<<8| Wire.read();
GyY1=Wire.read()<<8| Wire.read();
GyZ1=Wire.read()<<8| Wire.read();
Serial.print(AcX1);
Serial.print(";");
Serial.print(AcY1);
Serial.print(";");
Serial.print(GyY1);
Serial.print(";");
Serial.print(AcZ1); Serial.print(";");
Serial.print(GyX1);
Serial.print(";");
Serial.print(GyZ1); Serial.println("");
Serial.flush();
}
Mô Phỏng Chuyển Động Cánh Tay
Trang 16/17
void GetMPUvalue2(const int MPU2)
{
Wire.beginTransmission(MPU2);
Wire.write(0x3B); // starting with register 0x3B
Wire.endTransmission(false);
Wire.requestFrom(MPU2,14,true);
AcX2=Wire.read()<<8| Wire.read();
AcY2=Wire.read()<<8| Wire.read();
AcZ2=Wire.read()<<8| Wire.read();
Tmp2=Wire.read()<<8| Wire.read();
GyX2=Wire.read()<<8| Wire.read();
GyY2=Wire.read()<<8| Wire.read();
GyZ2=Wire.read()<<8| Wire.read();
Serial.print(AcX2);
Serial.print(";");
Serial.print(AcY2);
Serial.print(";");
Serial.print(GyY2);
Serial.print(";");
Serial.print(AcZ2); Serial.print(";");
Serial.print(GyX2);
Serial.print(";");
Serial.print(GyZ2); Serial.println("");
Serial.flush();
}
Mô Phỏng Chuyển Động Cánh Tay