Search Code

Arduino kód pre MPU-6050 s LCD1602 I2C displejom

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.

LCD1602-I2C display module with 4 wires

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ýrobcaInvenSense
Označenie súčiastkyMPU-6050
Logické/IO napätie3,3 V / 5 V
Napájacie napätie3,3 V až 5 V
Rýchlosť výstupných dát1 kHz (max)
Rozsah gyroskopu±250, ±500, ±1000, ±2000 °/s
Rozsah akcelerometra±2g, ±4g, ±8g, ±16g
PuzdroQFN
Poznámky / variantyObsahuje 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

Arduino wiring for MPU-6050 with LCD

Na zapojenie MPU-6050 a LCD1602 displeja k Arduinu postupujte podľa týchto spojení:

  • Pripojte pin VCC MPU-6050 na pin 5V na Arduine.
  • Pripojte pin GND MPU-6050 na pin GND na Arduine.
  • Pripojte pin SDA MPU-6050 na pin A4 na Arduine.
  • Pripojte pin SCL MPU-6050 na pin A5 na Arduine.
  • Pre LCD1602 displej pripojte pin VCC na 5V na Arduine.
  • Pripojte pin GND LCD1602 na pin GND na Arduine.
  • Pripojte pin SDA LCD1602 na rovnaký pin A4 použitý pre MPU-6050.
  • Pripojte pin SCL LCD1602 na rovnaký pin A5 použ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).

Images

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)
Language: 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);
 
}

Things you might need

Resources & references

Files📁

Arduino Libraries (zip)

Fritzing File

Other files

  • 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