Arduino kód pre MPU-6050 s LCD1602 I2C displejom
V tomto návode sa naučíme, ako pripojiť MPU-6050 akcelerometer a gyroskop k LCD1602 displeju pomocou I2C komunikácie. MPU-6050 bude poskytovať merania uhlov, ktoré sa zobrazia na LCD. Tento projekt vám pomôže vizualizovať uhly MPU-6050 v reálnom čase, čím zlepšíte svoje pochopenie senzorových dát a prepojenia s displejom.


Na konci tohto návodu budete mať funkčné zapojenie, ktoré zobrazuje uhly X, Y a Z na LCD obrazovke. Toto je skvelý spôsob, ako získať praktické skúsenosti so senzorovými dátami a technológiou displejov v Arduino projektoch. Pre ďalšie objasnenie si pozrite video (vo videu o 00:00).
Vysvetlenie hardvéru
Hlavnými komponentmi tohto projektu sú MPU-6050 senzor a LCD1602 displejový modul. MPU-6050 je všestranný senzor, ktorý kombinuje 3-osový akcelerometer a 3-osový gyroskop, poskytujúc merania uhlov v reálnom čase. Komunikuje cez I2C, čo umožňuje bezproblémovú integráciu s Arduinom.
LCD1602 displej tiež používa I2C protokol, čo zjednodušuje zapojenie a znižuje počet pinov potrebných na komunikáciu. I2C rozhranie umožňuje pripojiť viacero zariadení na rovnakú zbernicu, čo je efektívne pre projekty s viacerými senzormi alebo komponentmi.
Podrobnosti z datasheetu
| Výrobca | InvenSense |
|---|---|
| Označenie súčiastky | MPU-6050 |
| Logické/IO napätie | 3,3 V / 5 V |
| Napájacie napätie | 3,3 V až 5 V |
| Rýchlosť výstupných dát | 1 kHz (max) |
| Rozsah gyroskopu | ±250, ±500, ±1000, ±2000 °/s |
| Rozsah akcelerometra | ±2g, ±4g, ±8g, ±16g |
| Puzdro | QFN |
| Poznámky / varianty | Obsahuje digitálny pohybový procesor (DMP) |
- Skontrolujte I2C adresu (predvolená je 0x68).
- Zabezpečte správne napájacie napätie (3,3 V alebo 5 V).
- Použite pull-up rezistory pre linky SDA a SCL, ak nie sú už na doske.
- Zvážte použitie oddeľovacích kondenzátorov pri napájacích pinoch pre stabilitu.
- Overte zapojenie, aby ste predišli problémom s komunikáciou.
Pokyny na zapojenie

Na zapojenie MPU-6050 a LCD1602 displeja k Arduinu postupujte podľa týchto spojení:
- Pripojte pin
VCCMPU-6050 na pin5Vna Arduine. - Pripojte pin
GNDMPU-6050 na pinGNDna Arduine. - Pripojte pin
SDAMPU-6050 na pinA4na Arduine. - Pripojte pin
SCLMPU-6050 na pinA5na Arduine. - Pre LCD1602 displej pripojte pin
VCCna5Vna Arduine. - Pripojte pin
GNDLCD1602 na pinGNDna Arduine. - Pripojte pin
SDALCD1602 na rovnaký pinA4použitý pre MPU-6050. - Pripojte pin
SCLLCD1602 na rovnaký pinA5použitý pre MPU-6050.
Uistite sa, že ste skontrolovali svoje zapojenie, pretože nesprávne zapojenie môže viesť k poruche zariadenia alebo k zlyhaniu komunikácie.
Príklady kódu a vysvetlenie
Kód začína zahrnutím potrebných knižníc pre MPU-6050 a LCD displej. Nasledujúci výňatok ukazuje, ako inicializovať MPU-6050:
MPU6050 mpu6050(Wire);
Tu vytvoríme objekt MPU6050, ktorý sa použije na čítanie dát zo senzora. Ďalej musíme nastaviť zariadenie vo funkcii setup():
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
lcd.begin();
lcd.backlight();
}
Tento kód inicializuje sériovú komunikáciu, I2C zbernicu a MPU-6050 senzor. Tiež inicializuje LCD a zapne jeho podsvietenie. Slučka obsahuje logiku na aktualizáciu a zobrazenie uhlov:
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);
}
V tejto slučke sa uhly pre X, Y a Z aktualizujú a zobrazia na LCD. Funkcia lcdDisplay() sa používa na správne formátovanie výstupu. Celý kód nájdete načítaný pod článkom.
Demonštrácia / Čo očakávať
Keď je zapojenie dokončené a kód je nahraný, mali by ste vidieť uhly pre X, Y a Z zobrazené na LCD v reálnom čase. Ak je všetko správne zapojené, displej sa obnoví každých 100 milisekúnd a zobrazí aktuálnu orientáciu MPU-6050.
Medzi časté problémy patrí zabezpečenie správnych I2C spojení a stabilného napájania. Ak MPU-6050 nie je správne inicializovaný, môžete na LCD vidieť nesprávne dáta alebo žiadne dáta (vo videu o 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);
}
Things you might need
-
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
Resources & references
-
ExternalManufacturer websiteinvensense.com
Files📁
Arduino Libraries (zip)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
Fritzing File
-
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
Other files
-
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