Arduino کے ساتھ LCD 1602 یا LCD2004 پر MPU-6050 سینسر ڈیٹا ڈسپلے کرنا
اس ٹیوٹوریل میں، ہم سیکھیں گے کہ Arduino کا استعمال کرتے ہوئے MPU-6050 سینسر سے ڈیٹا کو LCD 1602 یا LCD2004 پر کیسے ظاہر کیا جائے۔ MPU-6050 ایک ورسٹائل سینسر ہے جو 3-محور گائروسکوپ اور 3-محور ایکسلرومیٹر کو یکجا کرتا ہے، جو اسے موشن ڈیٹیکشن اور اورینٹیشن جیسی مختلف ایپلیکیشنز کے لیے مثالی بناتا ہے۔ اس سینسر کو LCD ڈسپلے سے جوڑ کر، ہم ریئل ٹائم سینسر ڈیٹا، بشمول زاویے اور درجہ حرارت، کو تصور کر سکتے ہیں۔

جیسے جیسے ہم اس پروجیکٹ میں آگے بڑھیں گے، ہم ضروری ہارڈویئر اجزاء، وائرنگ کی تفصیلات، اور کوڈ کے نفاذ کا احاطہ کریں گے۔ اس سے آپ کو یہ سمجھنے میں مدد ملے گی کہ MPU-6050 کو کیسے سیٹ اپ کیا جائے اور اس کا آؤٹ پٹ LCD پر کیسے ظاہر کیا جائے۔ کوڈ کے بارے میں مزید وضاحت کے لیے، ویڈیو کو ضرور دیکھیں (ویڈیو میں 00:00 پر)۔
ہارڈویئر کی وضاحت
اس پروجیکٹ کے بنیادی اجزاء Arduino بورڈ، MPU-6050 سینسر، اور LCD ڈسپلے (1602 یا 2004) ہیں۔ Arduino مائیکروکنٹرولر کے طور پر کام کرتا ہے جو MPU-6050 سے ڈیٹا پراسیس کرتا ہے اور اسے LCD پر بھیجتا ہے۔
MPU-6050 سینسر Arduino کو ڈیٹا بھیجنے کے لیے I2C کمیونیکیشن استعمال کرتا ہے۔ اس میں ایک ایکسلرومیٹر اور گائروسکوپ شامل ہے، جو اسے حرکت اور اورینٹیشن محسوس کرنے کی اجازت دیتا ہے۔ LCD ڈسپلے سینسر ڈیٹا سے حاصل کردہ زاویوں کو ظاہر کرنے کے لیے استعمال ہوتا ہے۔ یہ بھی I2C کے ذریعے Arduino سے جڑتا ہے، جو وائرنگ اور کمیونیکیشن کو آسان بناتا ہے۔
ڈیٹاشیٹ کی تفصیلات
| مینوفیکچرر | Invensense |
|---|---|
| پارٹ نمبر | MPU-6050 |
| لاجک/IO وولٹیج | 3.3 V / 5 V |
| سپلائی وولٹیج | 3.3 V سے 5 V |
| آؤٹ پٹ ڈیٹا ریٹ | 1 kHz (زیادہ سے زیادہ) |
| درجہ حرارت کی حد | -40 سے +85 °C |
| پیکیج | QFN |
| نوٹس / ویریئنٹس | گائروسکوپ اور ایکسلرومیٹر مربوط |
- مخصوص وولٹیج کی حد کے اندر مناسب پاور سپلائی کو یقینی بنائیں۔
- اگر ضروری ہو تو I2C لائنوں پر پل-اپ ریزسٹر استعمال کریں۔
- اپنے سیٹ اپ کے ساتھ مطابقت کے لیے I2C ایڈریس چیک کریں۔
- درست ریڈنگ کے لیے سینسر کو کیلیبریٹ کریں۔
- شارٹ سرکٹ سے بچنے کے لیے وائرنگ میں احتیاط برتیں۔
وائرنگ ہدایات

MPU-6050 کو Arduino سے وائر کرنے کے لیے، MPU-6050 کے VCC پن کو Arduino کے 5V پن سے جوڑ کر شروع کریں۔ اگلا، MPU-6050 کے GND پن کو Arduino کے کسی ایک GND پن سے جوڑیں۔ I2C کمیونیکیشن کے لیے، MPU-6050 کے SDA پن کو Arduino کے اینالاگ پن A4 سے جوڑیں، اور SCL پن کو اینالاگ پن A5 سے جوڑیں۔
LCD ڈسپلے کے لیے، VCC پن کو Arduino کے 5V پن سے اور GND پن کو Arduino کے GND پن سے بھی جوڑیں۔ LCD کے SDA پن کو MPU-6050 کے لیے استعمال ہونے والے اسی A4 پن سے جوڑیں، اور LCD کے SCL پن کو A5 پن سے جوڑیں۔ اس طرح، MPU-6050 اور LCD دونوں ایک ہی I2C لائنیں شیئر کرتے ہیں، جس سے وائرنگ آسان ہو جاتی ہے۔

یقینی بنائیں کہ کنکشن محفوظ ہیں اور کوئی ڈھیلی تاریں نہیں ہیں۔ اگر آپ کا LCD یا سینسر آن نہیں ہوتا ہے، تو وائرنگ اور کنکشن دوبارہ چیک کریں۔
کوڈ مثالیں اور واک تھرو
کوڈ میں، ہم MPU-6050 اور LCD کے لیے ضروری لائبریریاں شامل کرکے شروع کرتے ہیں:
#include
#include
#include
یہاں، ہم MPU-6050 اور LCD دونوں کے لیے انسٹینسز بناتے ہیں۔ MPU-6050 کو I2C کمیونیکیشن کے لیے `Wire` لائبریری کے ساتھ انیشیالائز کیا جاتا ہے، جبکہ LCD کو اس کے ایڈریس اور ڈائمینشنز کے ساتھ سیٹ اپ کیا جاتا ہے۔
سیٹ اپ فنکشن میں، ہم سینسر اور LCD کو انیشیالائز کرتے ہیں:

void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
lcd.begin();
lcd.backlight();
lcd.clear();
}
یہ کوڈ ڈیبگنگ کے لیے سیریل کمیونیکیشن سیٹ اپ کرتا ہے، I2C کمیونیکیشن کو انیشیالائز کرتا ہے، اور LCD کو ڈسپلے کے لیے تیار کرتا ہے۔ ڈسپلے کو دکھائی دینے کے لیے بیک لائٹ آن کی جاتی ہے۔
لوپ فنکشن میں، ہم MPU-6050 سے مسلسل ڈیٹا پڑھتے ہیں اور اسے LCD پر ظاہر کرتے ہیں:
void loop() {
mpu6050.update();
lcd.clear();
lcdDisplay(mpu6050.getAngleX(), mpu6050.getAngleY(), mpu6050.getAngleZ());
delay(100);
}
یہ سنیپٹ سینسر ڈیٹا کو اپڈیٹ کرتا ہے اور ہر 100 ملی سیکنڈ میں نئی ریڈنگ کے لیے LCD صاف کرتا ہے۔ زاویوں کو LCD پر ظاہر کرنے کے لیے `lcdDisplay` فنکشن کو کال کیا جاتا ہے۔
مکمل تفہیم کے لیے، براہ کرم متعلقہ ویڈیو دیکھیں جہاں مکمل کوڈ دکھایا گیا ہے (ویڈیو میں 00:00 پر)۔
ڈیمونسٹریشن / کیا توقع کریں
جب سب کچھ درست طریقے سے سیٹ اپ ہو جاتا ہے، تو LCD کو X، Y، اور Z محوروں کے زاویے ریئل ٹائم میں ظاہر کرنے چاہئیں۔ آپ تبدیلیاں دیکھنے کے لیے MPU-6050 سینسر کو جھکا سکتے ہیں۔ اگر آپ کو مسائل کا سامنا ہو، تو اپنی وائرنگ میں ریورسڈ پولیرٹی چیک کریں یا یقینی بنائیں کہ I2C ایڈریس درست طریقے سے سیٹ ہیں۔
LCD پر اقدار کی نگرانی آپ کو یہ دیکھنے کی اجازت دے گی کہ سینسر حرکت اور اورینٹیشن تبدیلیوں پر کیسے ردعمل دیتا ہے۔ اگر اقدار جامد یا غلط لگتی ہیں، تو کنکشن کی تصدیق کریں اور یقینی بنائیں کہ سینسر درست طریقے سے کام کر رہا ہے۔
/*
*
* 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);
}
}
وسائل اور حوالہ جات
-
باہرونیGet the library from GitHubgithub.com
-
باہرونیManufacturer websiteinvensense.com
فائلیں📁
آرڈوینو لائبریریاں (زپ)
-
Arduino library for MPU9250
robojax-MPU9250-master.zip3.38 MB
فریٹزنگ فائل
-
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
دیگر فائلیں
-
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