شِفر (کود) آردوینو برای MPU-6050 با نمایشگر LCD1602 از نوع I2C
در این آموزش یاد میگیریم چگونه شتابسنج و ژیروسکوپ MPU-6050 را از طریق ارتباط I2C به نمایشگر LCD1602 متصل کنیم. MPU-6050 اندازهگیریهای زاویهای را فراهم میکند که روی LCD نمایش داده خواهند شد. این پروژه به شما کمک میکند زاویههای MPU-6050 را بهصورت بلادرنگ مشاهده کنید و درک خود از دادههای حساس(حس کننده) و نحوهٔ ارتباط با نمایشگر را افزایش دهید.


تا پایان این آموزش، شما یک تنظیم کاری خواهید داشت که زاویههای X، Y و Z را روی صفحهنمایش LCD نمایش میدهد. این روش بسیار خوبی برای کسب تجربه عملی با دادههای حساس(حس کننده) و فناوری نمایش در پروژههای آردوینو است. برای توضیحات بیشتر، حتماً ویدیو را در زمان 00:00 ببینید.
سختافزار به زبان ساده
اجزای اصلی این پروژه حساس(حس کننده) MPU-6050 و ماجیول نمایشگر LCD1602 هستند. MPU-6050 یک حساس(حس کننده) چندمنظوره است که یک شتابسنج سهمحوره و یک ژیروسکوپ سهمحوره را ترکیب میکند و اندازهگیری زاویه را بهصورت لحظهای فراهم میسازد. این دستگاه از طریق I2C ارتباط برقرار میکند که امکان یکپارچهسازی بدون مشکل با آردوینو را فراهم میسازد.
نمایشگر LCD1602 نیز از پروتکل I2C استفاده میکند که سیمکشی را ساده کرده و تعداد پایههای مورد نیاز برای ارتباط را کاهش میدهد. رابط I2C اجازه میدهد چندین دستگاه روی همان باس متصل شوند که آن را برای پروژههایی با چندین حساس(حس کننده) یا قطعه کارآمد میسازد.
جزئیات دیتاشیت
| تولیدکننده | اینونسنس |
|---|---|
| شماره قطعه | MPU-6050 |
| ولتاژ منطق/ورودی-خروجی | 3.3 V / 5 V |
| ولتاژ تغذیه | 3.3 V تا 5 V |
| نرخ داده خروجی | 1 kHz (حداکثر) |
| محدوده ژیروسکوپ | ±250، ±500، ±1000، ±2000 درجه بر ثانیه |
| دامنه شتابسنج | ±2g، ±4g، ±8g، ±16g |
| بسته | بسته بدون پایه چهارگوش (QFN) |
| یادداشتها / انواع | شامل پردازشگر حرکت دیجیتال (DMP) |
- نشانی I2C را بررسی کنید (پیشفرض 0x68).
- اطمینان حاصل کنید که ولتاژ منبع تغذیه مناسب است (۳٫۳ ولت یا ۵ ولت).
- اگر از قبل روی برد نصب نشدهاند، از مقاومتهای pull-up برای خطوط SDA و SCL استفاده کنید.
- برای پایداری، استفاده از خازنهای دکوپلینگ در نزدیکی پایههای تغذیه را در نظر بگیرید.
- برای جلوگیری از مشکلات ارتباطی، اتصالات سیمکشی را بررسی کنید.
دستورالعملهای سیمکشی

برای سیمکشی MPU-6050 و نمایشگر LCD1602 به آردوینو خود، اتصالات زیر را دنبال کنید:
- متصل کنید
VCCپایه MPU-6050 به5Vپایه روی آردوینو. - متصل کنید
GNDپایه MPU-6050 بهGNDپایه روی آردوینو. - وصل کنید
SDAپایهِ MPU-6050 بهA4پایه روی آردوینو. - متصل کنید
SCLپایهِ MPU-6050 بهA5پایه روی آردوینو. - برای نمایشگر LCD1602، آن را وصل کنید
VCCسنجاق کردن به5Vروی آردوینو. - متصل کنید
GNDپایه LCD1602 بهGNDپایه روی آردوینو. - وصل کنید
SDAپایه LCD1602 به همانA4پایه مورد استفاده برای MPU-6050. - متصل کنید
SCLپایه LCD1602 به همانA5پایه مورد استفاده برای MPU-6050.
حتماً اتصالات خود را دوباره بررسی کنید، زیرا سیمکشی نادرست ممکن است منجر به خرابی دستگاه یا عدم برقراری ارتباط صحیح شود.
نمونههای شِفر (کود) و راهنمای گامبهگام
شِفر (کود) با وارد کردن کتابخانههای لازم برای MPU-6050 و نمایشگر LCD آغاز میشود. بخش زیر نشان میدهد چگونه MPU-6050 را مقداردهی اولیه کنیم:
MPU6050 mpu6050(Wire);در اینجا، ما نمونهسازی میکنیمMPU6050شیء، که برای خواندن دادهها از حساس(حس کننده) استفاده خواهد شد. سپس باید دستگاه را درsetup()تابع:
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
lcd.begin();
lcd.backlight();
}این شِفر (کود) ارتباط سریال، باس I2C و حساس(حس کننده) MPU-6050 را مقداردهی اولیه میکند. همچنین نمایشگر LCD را مقداردهی اولیه کرده و نور پسزمینه آن را روشن میکند. حلقه شامل منطق بهروزرسانی و نمایش زوایا است:
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);
}در این حلقه، زاویههای X، Y و Z بهروزرسانی شده و روی السیدی نمایش داده میشوند. تابعlcdDisplay()برای قالببندی صحیح خروجی استفاده میشود. میتوانید شِفر (کود) کامل را که در پایین مقاله بارگذاری شده است پیدا کنید.
نمایش / آنچه باید انتظار داشته باشید
وقتی راهاندازی کامل شد و شِفر (کود) آپلود شد، باید زاویههای X، Y و Z را بهصورت لحظهای روی نمایشگر LCD ببینید. اگر همه چیز بهدرستی سیمکشی شده باشد، نمایشگر هر 100 میلیثانیه یکبار تازه میشود و جهت فعلی MPU-6050 را نشان میدهد.
اشتباهات رایج شامل اطمینان از صحیح بودن اتصالات I2C و پایدار بودن منبع تغذیه است. اگر MPU-6050 به درستی راهاندازی نشود، ممکن است روی LCD دادههای نادرست یا هیچ دادهای مشاهده کنید (در ویدئو در 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);
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
آمازونخرید LCD1602-I2C از اَمه زونamzn.to
-
ایبیخرید LCD1602-I2C از eBayebay.us
-
علیاکسپرسخرید ۱۰ عدد LCD1602-I2C از علیاکسپرسs.click.aliexpress.com
منابع و مراجع
-
خارجیوبسایت تولیدکنندهinvensense.com
فایلها📁
کتابخانههای آردوینو (zip)
-
کتابخانه LCD Arduino LCD1602 از Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB -
کتابخانه آردوینو برای MPU9250
robojax-MPU9250-master.zip3.38 MB
فایل فریزینگ
-
ماجیول LCD LCD1602-I2C با ۴ سیم
LCD1602-I2C.fzpz0.01 MB -
برد MPU-6050 GY-521
MPU-6050 Board GY-521.fzpz0.01 MB