Bandhigista Xogta Sensor-ka MPU-6050 ee LCD 1602 ama LCD2004 oo leh Arduino
Cashigarkani, waxaan ku baran doonnaa sida loo muujiyo xogta ka imanaysa sensor-ka MPU-6050 ee LCD 1602 ama LCD2004 iyadoo la adeegsanayo Arduino. MPU-6050 waa sensor badan oo isku daraya gyroscope-ka 3-axis iyo accelerometer-ka 3-axis, taasoo ka dhigaysa mid ku habboon codsiyo kala duwan sida ogaanshaha dhaqdhaqaaqa iyo jihada. Adigoo ku xira sensor-ka LCD, waxaan muujin karnaa xogta sensor-ka waqtiga dhabta ah, oo ay ku jiraan xaglaha iyo heerkulka.

Markaan horumarino mashruucan, waxaan dabooli doonnaa qaybaha qalabka ee lagama maarmaanka ah, faahfaahinta fiilada, iyo hirgelinta koodka. Tani waxay kaa caawin doontaa inaad fahamto sida loo habeeyo MPU-6050 iyo inaad ku muujiso wax soo saarkiisa LCD. Si aad u faahfaahiso koodka, hubi inaad daawato fiidiyowga (fiidiyowga 00:00).
Qalabka La Sharaxay
Qaybaha ugu muhiimsan ee mashruucan waa looxa Arduino, sensor-ka MPU-6050, iyo shaashadda LCD (1602 ama 2004). Arduino wuxuu u shaqeeyaa sida microcontroller-ka ka shaqeeya xogta ka timaadda MPU-6050 oo u dira LCD-ga.
Sensor-ka MPU-6050 wuxuu isticmaalaa isgaarsiinta I2C si uu xogta ugu diro Arduino. Waxaa ku jira accelerometer iyo gyroscope, kuwaas oo u oggolaanaya inay dareemaan dhaqdhaqaaqa iyo jihada. Shaashadda LCD waxaa loo isticmaalaa in lagu muujiyo xaglaha laga soo qaatay xogta sensor-ka. Waxay ku xidhan tahay Arduino iyadoo sidoo kale la adeegsanayo I2C, taas oo fududaynaysa fiilada iyo isgaarsiinta.
Faahfaahinta Xaashida Xogta
| Soo saaraha | Invensense |
|---|---|
| Nambarka qaybta | MPU-6050 |
| Danabka Logic/IO | 3.3 V / 5 V |
| Danabka sahayda | 3.3 V ilaa 5 V |
| Heerka xogta soo baxa | 1 kHz (ugu badnaan) |
| Kala duwanaanshaha heerkulka | -40 ilaa +85 °C |
| Baakad | QFN |
| Qoraalo / noocyo | Gyroscope iyo accelerometer oo isku dhafan |
- Hubi sahayda danab ee ku habboon inta u dhexaysa danabka lagu qeexay.
- Isticmaal resistors-ka jiidista (pull-up) ee khadadka I2C haddii loo baahdo.
- Hubi cinwaanka I2C si uu ula jaanqaado qaabkaaga.
- Calibrayn sensor-ka si aad u hesho akhrin sax ah.
- Ka digtoonow fiilada si aad uga fogaato wareegyada gaaban.
Tilmaamaha Fiilada

Si aad MPU-6050 ugu xidho Arduino, waxaad ku bilaabaysaa adigoo ku xidhaya pin-ka VCC ee MPU-6050 pin-ka 5V ee Arduino. Marka xigta, ku xidh pin-ka GND ee MPU-6050 mid ka mid ah pin-yada GND ee Arduino. Isgaarsiinta I2C, ku xidh pin-ka SDA ee MPU-6050 pin-ka analog A4 ee Arduino, oo ku xidh pin-ka SCL pin-ka analog A5.
Shaashadda LCD, ku xidh pin-ka VCC pin-ka 5V ee Arduino iyo pin-ka GND pin-ka GND ee Arduino sidoo kale. Ku xidh pin-ka SDA ee LCD isla pin-ka A4 ee loo isticmaalay MPU-6050, iyo pin-ka SCL ee LCD pin-ka A5. Sidan, labadaba MPU-6050 iyo LCD waxay wadaagaan khadadka isku midka ah ee I2C, taasoo fududaynaysa fiilada.

Hubi in xiridda ay adag tahay oo aysan jirin fiilooyin dabacsan. Haddii LCD-gaaga ama sensor-kaagu uusan shaqayn, dib u hubi fiilada iyo xiridda.
Tusaalooyinka Koodka & Sharaxaadda
Koodka, waxaan ku bilaabaynaa inaan ku darro maktabadaha lagama maarmaanka ah ee MPU-6050 iyo LCD:
#include
#include
#include
Halkan, waxaan u abuuraynaa tusaalayaal labadaba MPU-6050 iyo LCD. MPU-6050 waxaa lagu bilaabay maktabadda `Wire` ee isgaarsiinta I2C, halka LCD lagu habeeyay cinwaankiisa iyo cabbirkiisa.
Hawsha setup-ka, waxaan ku bilaabaynaa sensor-ka iyo LCD:

void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
lcd.begin();
lcd.backlight();
lcd.clear();
}
Koodkani wuxuu dejiyaa isgaarsiinta serial ee khaladaadka, wuxuu bilaabaa isgaarsiinta I2C, oo wuxuu diyaariyaa LCD-ga si uu u muujiyo. Iftiinka dambe waa la shiday si shaashadda loo arko.
Hawsha loop-ka, waxaan si joogto ah u akhrinaynaa xogta MPU-6050 oo waxaan ku muujinaynaa LCD:
void loop() {
mpu6050.update();
lcd.clear();
lcdDisplay(mpu6050.getAngleX(), mpu6050.getAngleY(), mpu6050.getAngleZ());
delay(100);
}
Qaybtani waxay cusboonaysiisaa xogta sensor-ka oo waxay nadiifisaa LCD-ga akhrinta cusub 100 milliseken kasta. Hawsha `lcdDisplay` ayaa loo yaqaan si ay u muujiso xaglaha LCD-ga.
Si aad u fahanto dhammaan, fadlan daawo fiidiyowga u dhigma halkaas oo koodka buuxa lagu muujiyey (fiidiyowga 00:00).
Muuujin / Waxa Laga Filan Karo
Marka wax walba si sax ah loo habeeyo, LCD-ga waa inuu muujiyaa xaglaha X, Y, iyo Z ee waqtiga dhabta ah. Waxaad u janjeerin kartaa sensor-ka MPU-6050 si aad u aragto isbeddellada shaashadda. Haddii aad la kulanto dhibaatooyin, hubi rogaal celinta danabka fiilada ama hubi in cinwaannada I2C si sax ah loo dejiyay.
La socoshada qiimaha LCD-ga waxay kuu oggolaan doontaa inaad aragto sida sensor-ku uga jawaabo dhaqdhaqaaqa iyo isbeddellada jihada. Haddii qiimaha uu u muuqdo mid taagan ama khaldan, xaqiiji xiridda oo hubi in sensor-ku si sax ah u shaqeynayo.
/*
*
* 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 LCD2004-I2C display module.
*
* Library and code have been taken from:
* https://github.com/tockn/MPU6050_tockn
*
* Updated by Ahmad Shamshiri on July 07, 2018 at 13:43 in Ajax, Ontario, Canada
* for Robojax.com
* Get this code from Robojax.com
* Watch video instruction for this code at: https://youtu.be/ixe--SXemp8
*
* 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 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(false);
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("Robojax MPU-6050");
lcd.setCursor (0,1); //
lcd.print("Please Wait - 3");
lcd.setCursor (0,1); //
delay(1000);
lcd.print("Please Wait - 2");
delay(1000);
lcd.setCursor (0,1); //
lcd.print("Please Wait - 1");
delay(1000);
}
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(
mpu6050.getAngleX(), // send angle X
mpu6050.getAngleY(), // send angle Y
mpu6050.getAngleZ() // send angle Z
);
delay(100);
}// loop end
/*
* Written by Ahmad Shamshiri for Robojax.com
* lcdDisplay(float x, float y, float z)
* displays value and title on LCD2004-I2C display
* How to use:
* just pass the three values and it will display them.
* lcdDisplay(mpu6050.getAngleX() , mpu6050.getAngleY() , mpu6050.getAngleZ() )
*/
void lcdDisplay(float x, float y, float z)
{
// Robojax.com MPU6050 Demo with LCD2004-I2C Display
lcd.setCursor (0,0); //
lcd.print("Robojax MPU-6050");
lcd.setCursor (0,1); //character zero, line 1
lcd.print("Angle X:");
lcd.setCursor (9,1); //
lcd.print(x);
lcd.setCursor (0,2); //character zero, line 2
lcd.print("Angle Y:");
lcd.setCursor (9,2); //
lcd.print(y);
lcd.setCursor (0,3); //character zero, line 3
lcd.print("Angle Z:");
lcd.setCursor (9,3); //
lcd.print(z);
}
/*
*
* This code is basic usage of the MPU-6050 accelerometer and gyroscope.
*
* This code displays data on the LCD2004 display based on
* the option you set. See below.
*
*
* 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/ixe--SXemp8
*
* 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);
long timer = 0;
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
int typeSelect = 6;// select type . See below
String type[]={ "GyroAng and Ang",// select 0
"GyroAng and Acc",// select 1
"GyroAng and Gyro",// select 2
"AccAng and Acc",// select 3
"AccAng & Gyro",// select 4
"AccAng and Ang",// select 5
"Angle and Temp"// select 6
};
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();
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();
}// if
lcd.clear();// clearn previous values from screen
switch (typeSelect)
{
case 0:// display GyroAngle and Angle
lcdDisplay(mpu6050.getGyroAngleX(),mpu6050.getGyroAngleY(),mpu6050.getGyroAngleZ(),
mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ()
);
break;
case 1:// display GyroAngle and Acceleration value
lcdDisplay(mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ(),
mpu6050.getAccX(),mpu6050.getAccY(),mpu6050.getAccZ()
);
break;
case 2:// display GyroAngle and Gyroscope value
lcdDisplay(mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ(),
mpu6050.getGyroX(),mpu6050.getGyroY(),mpu6050.getGyroZ()
);
break;
case 3:// display Acceleration Angle and Acceleration value
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(),0.0,
mpu6050.getAccX(),mpu6050.getAccY(),mpu6050.getAccZ()
);
break;
case 4:// display Acceleration Angle and Gyro value
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(), 0.0,
mpu6050.getGyroX(),mpu6050.getGyroY(),mpu6050.getGyroZ()
);
break;
case 5:// display Acceleration Angle and Angle
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(), 0.0,
mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ()
);
break;
case 6:// display angle and Temperature
lcdDisplay(mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ(),
mpu6050.getTemp(), 0.0, 0.0
);
break;
}// switch end
delay(100);
}// loop
/*
* Written by Ahmad Shamshiri for Robojax.com
* lcdDisplay(lcdDisplay(float x, float y, float z, float x1, float y1, float z1)
* displays values and titles on the LCD2004-I2C display.
* How to use:
* just pass the 6 values and it will display them.
lcdDisplay(mpu6050.getAccAngleX(),mpu6050.getAccAngleY(),mpu6050.getAccAngleZ(),
mpu6050.getAngleX(),mpu6050.getAngleY(),mpu6050.getAngleZ()
);
*/
void lcdDisplay(float x, float y, float z, float x1, float y1, float z1)
{
// Robojax.com MPU6050 Demo with LCD2004-I2C Display
lcd.setCursor (0,0); //
lcd.print(type[typeSelect]);
lcd.setCursor (17,0); //
String dis = "("+String(typeSelect)+")";
lcd.print(dis);
if(typeSelect !=6){
lcd.setCursor (0,1); //character zero, line 1
lcd.print("X:");
lcd.setCursor (2,1); //
lcd.print(x);
/////////////////////
lcd.setCursor (10,1); //character zero, line 1
lcd.print("X1:");
lcd.setCursor (13,1); //
lcd.print(x1);
lcd.setCursor (0,2); //character zero, line 2
lcd.print("Y:");
lcd.setCursor (2,2); //
lcd.print(y);
////////////////////////
lcd.setCursor (10,2); //character zero, line 1
lcd.print("Y1:");
lcd.setCursor (13,2); //
lcd.print(y1);
lcd.setCursor (0,3); //character zero, line 3
lcd.print("Z:");
lcd.setCursor (2,3); //
lcd.print(z);
//////////////////////
lcd.setCursor (10,3); //character zero, line 3
lcd.print("Z1:");
lcd.setCursor (13,3); //
lcd.print(z1);
}else{
lcd.setCursor (0,1); //character zero, line 1
lcd.print("X:");
lcd.setCursor (2,1); //
lcd.print(x);
/////////////////////
lcd.setCursor (10,1); //character zero, line 1
lcd.print("TMP: ");
lcd.setCursor (15,1); //
lcd.print(x1);
lcd.setCursor (0,2); //character zero, line 2
lcd.print("Y:");
lcd.setCursor (2,2); //
lcd.print(y);
lcd.setCursor (0,3); //character zero, line 3
lcd.print("Z:");
lcd.setCursor (2,3); //
lcd.print(z);
}
}
Kheyraadka & Tixraacyada
-
DibeddaGet the library from GitHubgithub.com
-
DibeddaManufacturer websiteinvensense.com
Faylasha📁
Arduino Libraries (zip)
-
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
Faylka 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 -
LCD2004-I2C
LCD2004-I2C.fzpz0.02 MB
Faylal kale
-
LCD1602 LiquidCrystal Library
robojax-LCD1602_LiquidCrystal.zip -
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