Search Code

Cách sử dụng mô-đun Gia tốc kế và Con quay hồi chuyển MPU-6050

Cách sử dụng mô-đun Gia tốc kế và Con quay hồi chuyển MPU-6050

MPU-6050 là một cảm biến đa năng kết hợp gia tốc kế 3 trục và con quay hồi chuyển 3 trục trong một gói duy nhất. Trong hướng dẫn này, chúng ta sẽ khám phá cách kết nối mô-đun này với Arduino để đo gia tốc và vận tốc góc. Kết quả sẽ là một chương trình đơn giản hiển thị dữ liệu thời gian thực từ cảm biến, cho phép bạn theo dõi cả gia tốc và hướng của thiết bị.

Bằng cách làm theo hướng dẫn này, bạn sẽ học cách thiết lập phần cứng, đấu dây các thành phần đúng cách và viết mã cần thiết để đưa MPU-6050 vào hoạt động. Điều này sẽ cung cấp cho bạn nền tảng cho các dự án tiếp theo liên quan đến cảm biến chuyển động và phát hiện hướng. Để rõ ràng hơn, hãy xem video đi kèm với hướng dẫn này (trong video tại 00:00).

Giải thích phần cứng

Thành phần chính trong dự án này là cảm biến MPU-6050, cung cấp cả dữ liệu gia tốc kế và con quay hồi chuyển. Gia tốc kế đo gia tốc tuyến tính dọc theo các trục X, Y và Z, trong khi con quay hồi chuyển đo tốc độ quay quanh các trục đó. Sự kết hợp này làm cho MPU-6050 trở thành lựa chọn tuyệt vời cho các ứng dụng yêu cầu theo dõi chuyển động.

Ngoài ra, mô-đun sử dụng giao diện I2C để giao tiếp, giúp đơn giản hóa kết nối và cho phép kết nối nhiều thiết bị trên cùng một bus. Cảm biến được cấp nguồn qua chân VCC, thường yêu cầu điện áp từ 3.3V đến 5V. Chân GND được kết nối với chân GND chung của Arduino.

Chi tiết bảng dữ liệu

Nhà sản xuấtInvenSense
Số bộ phậnMPU-6050
Điện áp logic/IO3.3 – 5 V
Điện áp cấp nguồn3.3 – 5 V
Dòng điện đầu ra (mỗi kênh)
Dòng điện đỉnh (mỗi kênh)
Hướng dẫn tần số PWM
Ngưỡng logic đầu vào
Sụt áp / RDS(on) / bão hòa
Giới hạn nhiệt
Đóng góiQFN
Ghi chú / biến thể

  • Kết nối chân VCC với 3.3V hoặc 5V.
  • Kết nối chân GND với đất.
  • Sử dụng giao tiếp I2C qua SDA (dữ liệu) và SCL (xung nhịp).
  • Đảm bảo có điện trở kéo lên trên các đường SDA và SCL.
  • Kiểm tra mức điện áp phù hợp để tránh làm hỏng cảm biến.

Hướng dẫn đấu dây

arduino_wiring_MPU-6050

Để đấu dây MPU-6050 với Arduino của bạn, hãy bắt đầu bằng cách kết nối chân VCC của MPU-6050 với chân 5V trên Arduino. Tiếp theo, kết nối chân GND của MPU-6050 với một trong các chân GND trên Arduino. Để giao tiếp I2C, kết nối chân SDA của MPU-6050 với chân A4 của Arduino và chân SCL với chân A5. Đảm bảo Arduino của bạn được thiết lập để sử dụng giao tiếp I2C bằng cách bao gồm các thư viện thích hợp trong mã của bạn.

Kiểm tra lại các kết nối trước khi cấp nguồn cho hệ thống. Nếu sử dụng bảng mạch thử nghiệm, hãy đảm bảo các kết nối chắc chắn và không có đoản mạch. Nếu mô-đun không phản hồi như mong đợi, hãy xác minh hệ thống dây điện và kiểm tra địa chỉ I2C của MPU-6050 trong mã của bạn.

Ví dụ mã & hướng dẫn chi tiết

Đoạn mã sau khởi tạo MPU-6050 và bắt đầu đọc dữ liệu từ nó. Các định danh chính bao gồm mpu6050, là phiên bản của lớp MPU6050 và timer, được sử dụng để kiểm soát thời gian xuất dữ liệu.

MPU6050 mpu6050(Wire);
long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

Trong hàm setup này, chúng ta khởi tạo giao tiếp nối tiếp và cảm biến MPU-6050. Lệnh gọi mpu6050.calcGyroOffsets(true) rất quan trọng vì nó hiệu chỉnh độ lệch của con quay hồi chuyển, đảm bảo các phép đo chính xác.

Trong hàm loop, chúng ta liên tục cập nhật dữ liệu cảm biến và in nó ra màn hình nối tiếp. Đoạn mã sau cho thấy cách đọc và in dữ liệu nhiệt độ và gia tốc:

if(millis() - timer > 1000){
  Serial.print("temp : ");Serial.println(mpu6050.getTemp());
  Serial.print("accX : ");Serial.print(mpu6050.getAccX());
  Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
  Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
}

Khối này kiểm tra xem một giây đã trôi qua kể từ lần xuất cuối cùng chưa. Sau đó, nó lấy giá trị nhiệt độ và gia tốc từ MPU-6050 và in chúng ra màn hình nối tiếp. Bạn có thể quan sát các giá trị này cập nhật theo thời gian thực.

Trình diễn / Điều gì sẽ xảy ra

Sau khi mọi thứ được đấu dây và mã được tải lên, bạn có thể mong đợi thấy dữ liệu nhiệt độ và gia tốc được in trong màn hình nối tiếp mỗi giây. Nếu bạn nghiêng hoặc di chuyển MPU-6050, các giá trị gia tốc sẽ thay đổi tương ứng. Lưu ý rằng việc đấu dây sai hoặc nguồn điện không đủ có thể dẫn đến các số đọc bất thường hoặc không có dữ liệu nào (trong video tại 01:30).

Hình ảnh

arduino_wiring_MPU-6050
arduino_wiring_MPU-6050
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
116-Arduino code for the MPU-6050 accelerometer and gyroscope sensor (all data)
Ngôn ngữ: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays all data:
 * -Gyroscope X, Gyroscope Y, Gyroscope Z
 * -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z 
 * -Accel X, Accel Y, Accel Z
 * -Accel Angle X, Accel Angle Y, Accel Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}
117-Arduino code for an MPU-6050 accelerometer and gyroscope sensor (just angle)
Ngôn ngữ: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays:
 * - Angle X, Angle Y, Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

void loop() {
  mpu6050.update();

  if(millis() - timer > 1000){
    
    Serial.println("=======================================================");
    Serial.print("temp : ");Serial.println(mpu6050.getTemp());
    Serial.print("accX : ");Serial.print(mpu6050.getAccX());
    Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
    Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
  
    Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
    Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
    Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
  
    Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
    Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
  
    Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
    Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
    Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
    
    Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
    Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
    Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
    Serial.println("=======================================================\n");
    timer = millis();
    
  }

}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Tập tin📁

Thư viện Arduino (tệp nén)

Các tập tin khác

  • MPU6050_tockn-master
    Arduino library for the MPU6050 accelerometer and gyroscope module. Provides functions to read acceleration, gyro, and temperature data, with calibration and angle calculation. Designed for easy integration into motion-sensing projects.
    robojax-MPU6050_tockn-master.zip