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.


Đế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ất | InvenSense |
|---|---|
| Số bộ phận | MPU-6050 |
| Điện áp logic/IO | 3,3 V / 5 V |
| Điện áp cung cấp | 3,3 V đến 5 V |
| Tốc độ dữ liệu đầu ra | 1 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ói | QFN |
| 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

Để 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
VCCcủa MPU-6050 với chân5Vtrên Arduino. - Kết nối chân
GNDcủa MPU-6050 với chânGNDtrên Arduino. - Kết nối chân
SDAcủa MPU-6050 với chânA4trên Arduino. - Kết nối chân
SCLcủa MPU-6050 với chânA5trên Arduino. - Đối với màn hình LCD1602, kết nối chân
VCCvới5Vtrên Arduino. - Kết nối chân
GNDcủa LCD1602 với chânGNDtrên Arduino. - Kết nối chân
SDAcủa LCD1602 với cùng chânA4được sử dụng cho MPU-6050. - Kết nối chân
SCLcủa LCD1602 với cùng chânA5đượ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).
/*
*
* 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
-
AmazonPurchase LCD1602-I2C from Amazonamzn.to
-
AmazonPurchase MPU-6050 from Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
Tài nguyên & tài liệu tham khảo
-
Bên ngoàiManufacturer websiteinvensense.com
Tập tin📁
Thư viện Arduino (tệp nén)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
Tập tin Fritzing
-
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB -
MPU-6050 Board GY-521
MPU-6050 Board GY-521.fzpz0.01 MB
Các tập tin khác
-
MPU6050_tockn-masterArduino 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