Search Code

Mã Arduino cho MPU-6050 với màn hình LCD1602 I2C

Mã Arduino cho MPU-6050 với màn hình LCD1602 I2C

Trong hướng dẫn này, chúng ta sẽ học cách kết nối cảm biến gia tốc và con quay hồi chuyển MPU-6050 với màn hình LCD1602 sử dụng giao tiếp I2C. MPU-6050 sẽ cung cấp các phép đo góc được hiển thị trên LCD. Dự án này sẽ giúp bạn hình dung các góc của MPU-6050 theo thời gian thực, nâng cao hiểu biết của bạn về dữ liệu cảm biến và giao tiếp màn hình.

LCD1602-I2C display module with 4 wires

Đến cuối hướng dẫn này, bạn sẽ có một thiết lập hoạt động hiển thị các góc X, Y và Z trên màn hình LCD. Đây là một cách tuyệt vời để có kinh nghiệm thực hành với dữ liệu cảm biến và công nghệ màn hình trong các dự án Arduino. Để làm rõ hơn, hãy xem video tại (trong video ở 00:00).

Phần cứng được giải thích

Các thành phần chính của dự án này là cảm biến MPU-6050 và mô-đun màn hình LCD1602. 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, cung cấp các phép đo góc theo thời gian thực. Nó giao tiếp qua I2C, cho phép tích hợp liền mạch với Arduino.

Màn hình LCD1602 cũng sử dụng giao thức I2C, giúp đơn giản hóa việc đi dây và giảm số chân cần thiết cho giao tiếp. Giao diện I2C cho phép kết nối nhiều thiết bị trên cùng một bus, làm cho nó hiệu quả cho các dự án có nhiều cảm biến hoặc thành phần.

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

Nhà sản xuấtInvenSense
Số bộ phậnMPU-6050
Điện áp logic/IO3,3 V / 5 V
Điện áp cung cấp3,3 V đến 5 V
Tốc độ dữ liệu đầu ra1 kHz (tối đa)
Phạm vi con quay hồi chuyển±250, ±500, ±1000, ±2000 °/s
Phạm vi gia tốc kế±2g, ±4g, ±8g, ±16g
Đóng góiQFN
Ghi chú / biến thểBao gồm Bộ xử lý chuyển động kỹ thuật số (DMP)

  • Kiểm tra địa chỉ I2C (mặc định là 0x68).
  • Đảm bảo điện áp cung cấp phù hợp (3,3 V hoặc 5 V).
  • Sử dụng điện trở kéo lên cho các đường SDA và SCL nếu chưa có trên bo mạch.
  • Cân nhắc sử dụng tụ điện tách rời gần các chân nguồn để ổn định.
  • Kiểm tra kết nối dây để tránh các vấn đề giao tiếp.

Hướng dẫn đi dây

Arduino wiring for MPU-6050 with LCD

Để kết nối MPU-6050 và màn hình LCD1602 với Arduino của bạn, hãy làm theo các kết nối sau:

  • Kết nối chân VCC của MPU-6050 với chân 5V trên Arduino.
  • Kết nối chân GND của MPU-6050 với chân GND trên Arduino.
  • Kết nối chân SDA của MPU-6050 với chân A4 trên Arduino.
  • Kết nối chân SCL của MPU-6050 với chân A5 trên Arduino.
  • Đối với màn hình LCD1602, kết nối chân VCC với 5V trên Arduino.
  • Kết nối chân GND của LCD1602 với chân GND trên Arduino.
  • Kết nối chân SDA của LCD1602 với cùng chân A4 được sử dụng cho MPU-6050.
  • Kết nối chân SCL của LCD1602 với cùng chân A5 được sử dụng cho MPU-6050.

Hãy đảm bảo kiểm tra kỹ các kết nối của bạn, vì đi dây sai có thể dẫn đến trục trặc thiết bị hoặc không giao tiếp đúng cách.

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

Mã bắt đầu bằng việc bao gồm các thư viện cần thiết cho MPU-6050 và màn hình LCD. Đoạn trích sau đây cho thấy cách khởi tạo MPU-6050:

MPU6050 mpu6050(Wire);

Ở đây, chúng ta khởi tạo đối tượng MPU6050, sẽ được sử dụng để đọc dữ liệu từ cảm biến. Tiếp theo, chúng ta cần thiết lập thiết bị trong hàm setup():

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

Mã này khởi tạo giao tiếp nối tiếp, bus I2C và cảm biến MPU-6050. Nó cũng khởi tạo LCD và bật đèn nền. Vòng lặp chứa logic để cập nhật và hiển thị các góc:

void loop() {
  mpu6050.update();
  lcd.clear();
  lcdDisplay(0, 0, "X:", 2, 0, mpu6050.getAngleX());
  lcdDisplay(13, 0, "Y:", 0, 1, mpu6050.getAngleY());
  lcdDisplay(7, 1, "Z:", 9, 1, mpu6050.getAngleZ());
  delay(100);
}

Trong vòng lặp này, các góc cho X, Y và Z được cập nhật và hiển thị trên LCD. Hàm lcdDisplay() được sử dụng để định dạng đầu ra một cách chính xác. Bạn có thể tìm thấy mã đầy đủ được tải bên dưới bài viết.

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

Khi thiết lập hoàn tất và mã được tải lên, bạn sẽ thấy các góc cho X, Y và Z được hiển thị trên LCD theo thời gian thực. Nếu mọi thứ được kết nối đúng cách, màn hình sẽ làm mới mỗi 100 mili giây, hiển thị hướng hiện tại của MPU-6050.

Các lỗi thường gặp bao gồm đảm bảo các kết nối I2C chính xác và nguồn điện ổn định. Nếu MPU-6050 không được khởi tạo đúng cách, bạn có thể thấy dữ liệu sai hoặc không có dữ liệu trên LCD (trong video ở 01:15).

Hình ảnh

LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
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
Arduino wiring for MPU-6050 with LCD
Arduino wiring for MPU-6050 with LCD
118-Arduino code for MPU-6050 accelerometer and gyroscope sensor (all data)
Ngôn ngữ: C++
/*
 * 
 * This code is basic usage of the MPU-6050 accelerometer and gyroscope.
 * Running this code, you will get angles only.
 * The angles at X, Y, and Z are displayed on the LCD1602-I2C display module.
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 05, 2018 at 22:19 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uIz6WIis4dc
 * 
 * You will need to watch two videos before following the instructions in this video:
 * 1-MPU6050 Introduction video and code: https://youtu.be/uhh7ik02aDc
 * 2-LCD1602 with I2C module video and code: https://youtu.be/q9YC_GVHy5A
 */
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

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

  // initialize the LCD, 
  lcd.begin();
  // Turn on the backlight and print a message.
  lcd.backlight();   
}

void loop() {

  mpu6050.update();
  Serial.print("angleX : ");
  Serial.print(mpu6050.getAngleX());
  Serial.print("\tangleY : ");
  Serial.print(mpu6050.getAngleY());
  Serial.print("\tangleZ : ");
  Serial.println(mpu6050.getAngleZ());
  
  lcd.clear();// clearn previous values from screen
  lcdDisplay(
             // to print X:
             0, // character 0  
             0, // line 0
             "X:", 

             // to print AngleX
             2, // character 2
             0, // line 0
             mpu6050.getAngleX() 
             );

  lcdDisplay(
             // to print Y:
             13, // character 13 
             0, // line 0
             "Y:", 

             // to print AngleY
             0, // character 0
             1, // line 1
             mpu6050.getAngleY() 
             );  

  lcdDisplay(
             // to print Z:
             7, // character 7 
             1, // line 1
             "Z:", 

             // to print AngleZ
             9, // character 9
             1, // line 0
             mpu6050.getAngleZ() 
             );                         
   delay(100);
}// loop end

/*
 * lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
 * displays value and title on LCD1602
 * How to use:
 * If you want to display: "Voltage: 13.56mV" starting from the first character
 * on the second row.
 * use:
 * lcdDisplay(0, 1, "Voltage: ", 13.56)
 *   
 * tc  is the character number  (0)
 * tr is the row number in the LCD (1)
 * title is the text ("Voltage:")
 * vc is the character number for the value
 * vr is the row number for the value
 * value is the value (13.56)
 */
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
{
   // Robojax.com MPU6050 Demo
   lcd.setCursor (tc,tr); //
   lcd.print(title);
   
   lcd.setCursor (vc,vr); //
   lcd.print(value);
 
}

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)

Tập tin Fritzing

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