- Cảm biến gia tốc kế và cảm biến con quay hồi chuyển là gì?
- Mô-đun cảm biến gia tốc và con quay hồi chuyển MPU6050
- Thành phần bắt buộc
- Sơ đồ mạch
- Giải thích lập trình
Các MPU6050 là một IC 3-trục gia tốc kế và con quay hồi chuyển 3 trục kết hợp thành một đơn vị. Nó cũng chứa một cảm biến nhiệt độ và một DCM để thực hiện một nhiệm vụ phức tạp. MPU6050 thường được sử dụng để chế tạo Drone và các robot từ xa khác như robot tự cân bằng. Trong dự án này, chúng tôi sẽ xây dựng Thước đo kỹ thuật số sử dụng MPU6050 và Arduino. Ở đây, một động cơ servo được sử dụng để hiển thị góc trên hình ảnh thước đo góc. Trục động cơ servo được gắn một kim sẽ quay trên hình ảnh thước đo góc để chỉ ra góc cũng được hiển thị trên màn hình 16xLCD. Trước khi đi vào chi tiết chúng ta hãy tìm hiểu về cảm biến Con quay hồi chuyển.
Cảm biến gia tốc kế và cảm biến con quay hồi chuyển là gì?
Gia tốc kế được sử dụng để đo gia tốc. Nó thực sự cảm nhận được cả gia tốc tĩnh và động. Ví dụ: điện thoại di động sử dụng cảm biến gia tốc để cảm nhận rằng điện thoại đang ở chế độ ngang hoặc chế độ dọc. Trước đây chúng tôi đã sử dụng Accelerometer với Arduino để xây dựng nhiều dự án như:
Con quay hồi chuyển được sử dụng để đo vận tốc góc sử dụng lực hấp dẫn của trái đất để xác định hướng của vật thể trong chuyển động. Vận tốc góc là tốc độ thay đổi vị trí góc của một vật quay.
Ví dụ: điện thoại di động ngày nay sử dụng cảm biến con quay hồi chuyển để chơi trò chơi di động theo hướng của điện thoại di động. Ngoài ra, tai nghe VR sử dụng cảm biến con quay hồi chuyển để có chế độ xem theo hướng 360
Vì vậy, trong khi gia tốc kế có thể đo gia tốc tuyến tính, con quay hồi chuyển có thể giúp tìm gia tốc quay. Khi sử dụng cả hai cảm biến như các mô-đun riêng biệt, việc tìm định hướng, vị trí và vận tốc trở nên khó khăn. Nhưng bằng cách kết hợp hai cảm biến, nó hoạt động như một Đơn vị đo lường quán tính (IMU). Vì vậy, trong mô-đun MPU6050, gia tốc kế và con quay hồi chuyển có mặt trên một PCB duy nhất để tìm hướng, vị trí và vận tốc.
Các ứng dụng:
- Được sử dụng trong Drone để điều khiển hướng
- Robot tự cân bằng
- Điều khiển cánh tay robot
- Cảm biến độ nghiêng
- Được sử dụng trong điện thoại di động, máy chơi trò chơi điện tử
- Robot hình người
- Được sử dụng trong Máy bay, Ô tô, v.v.
Mô-đun cảm biến gia tốc và con quay hồi chuyển MPU6050
MPU6050 là Hệ thống cơ điện vi mô (MEMS) bao gồm Gia tốc kế 3 trục và Con quay hồi chuyển 3 trục bên trong nó. Nó cũng có cảm biến nhiệt độ.
Nó có thể đo lường:
- Sự tăng tốc
- Vận tốc
- Sự định hướng
- Dịch chuyển
- Nhiệt độ
Mô-đun này cũng có Bộ xử lý chuyển động kỹ thuật số (DMP) bên trong nó đủ mạnh để thực hiện tính toán phức tạp và do đó giải phóng công việc cho Vi điều khiển.
Mô-đun cũng có hai chân phụ có thể được sử dụng để giao tiếp với các mô-đun IIC bên ngoài giống như một từ kế. Vì địa chỉ IIC của mô-đun có thể định cấu hình, nhiều hơn một cảm biến MPU6050 có thể được giao tiếp với Bộ vi điều khiển bằng cách sử dụng chân AD0.
Tính năng & Thông số kỹ thuật:
- Nguồn cung cấp: 3-5V
- Giao tiếp: Giao thức I2C
- ADC 16-bit tích hợp cung cấp độ chính xác cao
- DMP tích hợp cung cấp sức mạnh tính toán cao
- Có thể được sử dụng để giao tiếp với các thiết bị IIC khác như từ kế
- Địa chỉ IIC có thể định cấu hình
- Cảm biến nhiệt độ tích hợp
Sơ đồ chân của MPU6050:
Số PIN | Tên ghim | Sử dụng |
1 | Vcc | Cung cấp nguồn cho module, có thể là + 3V đến + 5V. Thông thường + 5V được sử dụng |
2 | Đất | Kết nối với mặt đất của hệ thống |
3 | Đồng hồ nối tiếp (SCL) | Được sử dụng để cung cấp xung đồng hồ cho Giao tiếp I2C |
4 | Dữ liệu nối tiếp (SDA) | Được sử dụng để truyền dữ liệu thông qua giao tiếp I2C |
5 | Dữ liệu nối tiếp phụ trợ (XDA) | Có thể được sử dụng để giao tiếp các mô-đun I2C khác với MPU6050. Nó là tùy chọn |
6 | Đồng hồ nối tiếp phụ (XCL) | Có thể được sử dụng để giao tiếp các mô-đun I2C khác với MPU6050. Nó là tùy chọn |
7 | AD0 | Nếu nhiều hơn một MPU6050 được sử dụng một MCU, thì chân này có thể được sử dụng để thay đổi địa chỉ |
số 8 | Ngắt (INT) | Chân ngắt để chỉ ra rằng dữ liệu có sẵn để MCU đọc. |
Trước đây chúng tôi đã sử dụng MPU6050 với Arduino để xây dựng Robot tự cân bằng và máy đo độ nghiêng.
Thành phần bắt buộc
- Arduino UNO
- Mô-đun con quay hồi chuyển MPU6050
- Màn hình LCD 16x2
- Chiết áp 10k
- SG90-Động cơ Servo
- Hình ảnh thước đo góc
Sơ đồ mạch
Sơ đồ mạch cho Thước đo Arduino DIY này được đưa ra dưới đây:
Kết nối mạch giữa Arduino UNO và MPU6050:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Kết nối mạch giữa Arduino UNO và Động cơ Servo:
Động cơ Servo |
Arduino UNO |
ĐỎ (VCC) |
+ 5V |
ORANGE (PWM) |
9 |
NÂU (GND) |
GND |
Kết nối mạch giữa Arduino UNO và LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Đến mã PIN của trung tâm chiết áp Để kiểm soát độ tương phản của màn hình LCD |
RS |
2 |
RW |
GND |
E |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
A |
+ 5V |
K |
GND |
Giải thích lập trình
Như thường lệ, chương trình hoàn chỉnh có video Trình diễn được đưa ra ở cuối hướng dẫn này.
Ở đây động cơ servo được kết nối với Arduino và trục của nó được chiếu trên hình ảnh thước đo góc cho biết góc nghiêng của MPU6050. Lập trình cho hướng dẫn này rất đơn giản. Hãy cùng xem chi tiết.
Đầu tiên bao gồm tất cả các thư viện cần thiết - thư viện Servo Motor để sử dụng Servo, thư viện LCD để sử dụng LCD và thư viện Wire để sử dụng giao tiếp I2C.
MPU6050 sử dụng Giao tiếp I2C và do đó, nó chỉ được kết nối với các Chân I2C của Arduino. Vì vậy, thư viện Wire.h được sử dụng để thiết lập giao tiếp giữa Arduino UNO và MPU6050. Trước đây, chúng tôi đã giao tiếp MPU6050 với Arduino và hiển thị các giá trị tọa độ x, y, z trên màn hình LCD 16x2.
#include
Tiếp theo xác định các chân hiển thị LCD RS, E, D4, D5, D6, D7 được kết nối với Arduino UNO.
LiquidCrystal lcd (2,3,4,5,6,7);
Tiếp theo, địa chỉ I2C của MPU6050 được xác định.
const int MPU_addr = 0x68;
Sau đó khởi tạo đối tượng myservo để sử dụng lớp Servo và ba biến để lưu trữ các giá trị trục X, Y và Z.
Servo myservo; int16_t axis_X, axis_Y, axis_Z;
Giá trị nhỏ nhất và lớn nhất tiếp theo được đặt là 265 và 402 để đo góc từ 0 đến 360.
int minVal = 265; int maxVal = 402;
void setup ():
Trong chức năng thiết lập void trước tiên giao tiếp I2C được bắt đầu và quá trình truyền bắt đầu với MPU6050 với địa chỉ 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
Đặt MPU6050 ở Chế độ ngủ bằng cách viết 0x6B và sau đó đánh thức nó bằng cách viết 0
Wire.write (0x6B); Wire.write (0);
Sau khi kích hoạt MPU6050, hãy kết thúc quá trình truyền
Wire.endTransmission (true);
Ở đây chân PWM của động cơ Servo được kết nối với chân 9 của Arduino UNO.
myservo.attach (9);
Ngay sau khi chúng tôi cấp nguồn cho mạch, màn hình LCD sẽ hiển thị thông báo chào mừng và xóa nó sau 3 giây
lcd.begin (16,2); // Đặt LCD ở Chế độ 16X2 lcd.print ("ĐƯỜNG KÍNH MẠCH"); chậm trễ (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); chậm trễ (3000); lcd.clear ();
void loop ():
Một lần nữa, giao tiếp I2C được bắt đầu với MPU6050.
Wire.beginTransmission (MPU_addr);
Sau đó, bắt đầu với đăng ký 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
Bây giờ quá trình được khởi động lại bằng cách đặt kết thúc truyền là sai nhưng kết nối đang hoạt động.
Wire.endTransmission (sai);
Sau đó, bây giờ yêu cầu dữ liệu từ 14 thanh ghi.
Wire.requestFrom (MPU_addr, 14, true);
Bây giờ các giá trị thanh ghi trục được tôn trọng (x, y, z) được thu thập và lưu trữ trong các biến axis_X, axis_Y, axis_Z.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Sau đó, ánh xạ các giá trị đó từ 265 đến 402 dưới dạng -90 đến 90. Điều này được thực hiện cho cả ba trục.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = map (axis_Z, minVal, maxVal, -90,90);
Công thức tính giá trị x theo độ (0 đến 360) được đưa ra dưới đây. Ở đây chúng tôi chỉ chuyển đổi x vì vòng quay của động cơ servo dựa trên chuyển động của giá trị x.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
Giá trị góc X, từ 0 đến 360 độ, được chuyển đổi thành 0 đến 180.
int pos = map (x, 0,180,0,180);
Sau đó ghi giá trị góc để xoay servo trên hình ảnh thước đo góc và In các giá trị đó trên màn hình LCD 16x2.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("Góc"); lcd.setCursor (0,1); lcd.print (x); chậm trễ (500); lcd.clear ();
Vì vậy, đây là cách MPU6050 với Arduino có thể được sử dụng để đo góc. Mã và video hoàn chỉnh cho dự án này được đưa ra dưới đây.