اتصال شتاب سنج و ژیروسکوپ MPU6050 به برد آردوینو
MPU6050 یک تراشه ژیروسکوپ و شتاب سنج بسیار محبوب است که دارای شش محور با وضوح اندازه گیری 16 بیت است. این دقت بالا در حس و هزینه ارزان آن را در بین مهندسان بسیار محبوب کرده است. حتی بسیاری از محصولات تجاری به MPU6050 مجهز هستند. ترکیب ژیروسکوپ و شتاب سنج معمولاً به عنوان واحد اندازه گیری اینرسی یا IMU نامیده می شود.
حسگرهای IMU در طیف گسترده ای از کاربرد ها مانند تلفن های همراه، تبلت ها، ماهواره ها، فضاپیماها، پهپادها، روباتیک و بسیاری موارد دیگر استفاده می شوند. آنها برای ردیابی حرکت، جهت گیری و تشخیص موقعیت، کنترل پرواز و … استفاده می شوند.
ماژول شتاب سنج MPU6050
ماژول MPU6050 در مجموع دارای 8 پین است. برای برقراری ارتباط استفاده از حداقل 4 پین آن ضروری است. پین اوت یک ماژول MPU6050 به شرح زیر است:
- VCC برق ماژول را تامین می کند، به پین 5 ولت آردوینو متصل می شود.
- GND به پایه GND آردوینو متصل شد.
- ساعت سریال SCL برای ارائه پالس ساعت برای ارتباطات I2C استفاده می شود.
- داده های سریال SDA برای انتقال داده ها از طریق ارتباط I2C استفاده می شود.
- XDA Auxiliary Serial Data – می تواند برای ارتباط سایر ماژول های I2C با MPU6050 استفاده شود.
- ساعت سریال کمکی XCL – می تواند برای ارتباط سایر ماژول های I2C با MPU6050 استفاده شود.
- ADD/ADO پین انتخاب آدرس در صورت استفاده از چندین ماژول MPU6050
- پین وقفه INT برای نشان دادن اینکه دادهها برای خواندن MCU در دسترس هستند.
مدار راه اندازی MPU6050 با آردوینو
تصویر زیر شماتیک مدار ارتباط MPU6050 با آردوینو را نشان می دهد. MPU6050 از ارتباط I2C برای ارتباط استفاده می کند. از آنجایی که پینهای I2C تا 5 ولت تحمل دارند، میتوانیم آنها را به آردوینو به صورت مستقیم متصل کنیم. پایه SCL به پایه SCL (A5) آردوینو متصل است. پایه SDA به پایه SDA (A4) آردوینو متصل است.
کد آردوینو برای شتاب سنج MPU6050
در این مثال، دادههای شتابسنج، ژیروسکوپ و دما را از ماژول MPU6050 میخوانیم و آن را روی نمایشگر سریال چاپ میکنیم. برای اینکار ابتدا باید کتابخانه های لازم را نصب کنیم. برای نصب کتابخانه ها، Library Manager را در Arduino IDE باز کنید. سپس کتابخانه های زیر را جستجو و نصب کنید: Adafruit MPU6050، Adafruit Unified Sensor Library و Adafruit Bus IO Library. مقاله نصب کتابخانه در آردوینو میتواند برای شما مفید باشد.
پس از اتمام کار، یک پروژه اردوینو جدید ایجاد کنید و کد را در آن قرار دهید. سپس آن را کامپایل و در آردوینو آپلود کنید. پس از آپلود، سریال مانیتور را باز کنید و نتیجه را در آنجا مشاهده کنید.
کد کامل فایل انتهای صفحه قرار داده شده است در اینجا قسمت های مهم کد را توضیح میدهیم. در ابتدا، کتابخانه Adafruit MPU6050، Adafruit Sensor و Wire Library را قرار داده ایم که برای برقراری ارتباط با MPU6050 و دریافت اطلاعات ضروری هستند. سپس یک نمونه جدید به نام mpu ایجاد کرده ایم که برای دریافت خوانش از MPU6050 IMU استفاده می شود.
#include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> Adafruit_MPU6050 mpu;
در تابع setup، ما ارتباط سریال و IMU MPU6050 را مقداردهی اولیه کرده ایم. سپس پارامترهای محدوده شتاب سنج، محدوده ژیروسکوپ و پهنای باند فیلتر تنظیم می شوند. پارامترهای محدوده بر دقت خواندن تأثیر می گذارد. بنابراین، در صورت نیاز، می توان آنها را مطابق با مقادیر کتابخانه تغییر داد. پارامتر setFilterBandwidth پهنای باند فیلتر پایین گذر را تغییر می دهد.
void setup(void) { Serial.begin(115200); // MPU6050 IMU if (!mpu.begin()) { Serial.println("Failed to find MPU6050 chip"); while (1) { delay(10); } } Serial.println("MPU6050 Found!"); // محدوده شتاب سنج mpu.setAccelerometerRange(MPU6050_RANGE_8_G); // محدوده ژیروسکوپ mpu.setGyroRange(MPU6050_RANGE_500_DEG); // پهنای باند فیلتر mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); delay(100); }
در تابع loop، مقادیر از MPU6050 با کمک کتابخانه Adafruit خوانده می شوند و سپس در سریال مانیتور چاپ می شوند. این کار هر ثانیه تکرار خواهد شد.
void loop() { /* دریافت داده های جدید از سنسور */ sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); /* چاپ کردن مقادیر دریافت شده */ Serial.print("Acceleration X: "); Serial.print(a.acceleration.x); Serial.print(", Y: "); Serial.print(a.acceleration.y); Serial.print(", Z: "); Serial.print(a.acceleration.z); Serial.println(" m/s^2"); Serial.print("Rotation X: "); Serial.print(g.gyro.x); Serial.print(", Y: "); Serial.print(g.gyro.y); Serial.print(", Z: "); Serial.print(g.gyro.z); Serial.println(" rad/s"); Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degC"); Serial.println(""); delay(1000); }
فیلم زیر نشان می دهد که چگونه می توانیم یک MPU6050 را با آردوینو راه اندازی کنیم. می بینید که وقتی ماژول می چرخد، مقادیر سریال مانیتور تغییر می کند.
موارد موجود در فایل : فایل سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام و عرض ادب
آقا یه سوال . الآن وقتی ماژول من در حالت عادی هست ، شتاب هیچکدوم از محورهای من صفر نیست. چیکار باید بکنم که شتاب هر سه محورم در حالت عادی صفر باشه؟
سلام خدمت همگی عزیزان. من این مشکل رو مدتیه که خودم اوکیش کردم و خواستم راهکار را با بقیه دوستان هم به اشتراک بذارم که اگه کسی دیگه به این مشکل برخورد بدونه که راهکارش چیه. رفقا اگه توی سریال مانیتور یا نحوه کارکرد و یا خروجی کار به مشکل برخوردین حالا به هرنحوی مثلا گیر کرد یا محورها صفر نمیشد، اول اینکه ماژول رو به شکل صحیح دست بگیرید یا جاسازی کنید و دوم اینکه از تابع () millis استفاده کنید. اینجوری دیگه به مشکل بر نمیخورید. و سوم هم اینکه سعی کنیدبآود ریتتون زیاد بالا نباشه ینی دیگه حدددداکثرش روی 115200 تنظیمش کنید اگه نیاز به بآود ریت بالا داشتید.
ایام به کام🖐🏻
سلام مهندس چگونه میتوانم وارد انجمن شوم ممنون میشم راهنماییم کنید
در منوی سایت روی انجمن بزنید
سلام مهندس من وقتی که کد رو آپلود میکنم و بعد به سریال مانیتور میرم یک سری عدد هست که هیچ نشونه ای ندارد که کدام دماسنج وکدام شتاب سنج و کدام ژیروسکوپ است ممنون میشم راهنماییم کنید
سلام وقت بخیر
یک تصویر از نتیجه در سریال مانیتور در انجمن ارسال کنید
بزرگوار سلام خسته نباشید . من اتصالات رو روی nodemsu وصل کردم برنامه رو هم بهش دادم و درست اپلود میشه وقتی میرم تو سرایل مانیتور و دکمه rstبرد رو میزنم چیزای عجیب غریب مینویسه (l⸮|⸮⸮l⸮#|⸮⸮⸮⸮⸮|2c⸮c⸮⸮no⸮lNo⸮⸮⸮cp)این قسمتی از چیزیه که نشون میده baud رو هم روی 115200 گزاشتم ممنون میشم راهنمایی کنید
سلام عزیز
زمانی که دکمه ریست را میزنید یک سری اطلاعات از سمت برد در سریال مانیتور نمایش داده میشود که اگر باود ریت روی 115200 باشد باید متن ها را بتوانید ببینید.
سلام مجدد . برای راه اندازی به پین vcc ژیروسکوپ حتما باید 5 ولت وصل کنیم چون تو nodemsu 5v نداریم ممنون میشم کمک کنید
سلام عزیز
پین 5 ولت داریم
سلام وقتتون بخیر . من میخوام با استفاده از برد nodemsu esp8266 این سنسور رو راه اندازی کنم امکانش هست ؟ از همین کد میشه استفاده کرد ؟
سلام عزیز
بله امکانش هست
راه حلی وجود داره که توی خروجی سریال مانیتور خط ها تغییر یا اپدیت نشن؟
یعنی بعد از هر delay خط جدیدی اضافه نشه اما اطلاعاتش تغییر کنن
سلام عزیز
خیر امکانش نیست
سلام
ببخشید آیا میشه این سنسور رو به موتور پله ای متصل کرد به گونه ای که با تغییر زاویه محور z موتور بچرخه ؟
سلام عزیز
بله این سنسور رو به آردوینو متصل کنید و یک شرط ایجاد کنید که با تغییر z استپر موتور حرکت کنه
سلام
من طبق روال بالا جلو رفتم سریال مانیتور رو که باز میکنم پیام زیر نوشته میشه تو همون حالت میمونه
Failed to find MPU6050 chip
سلام عزیز
اتصالاتتون رو باید بررسی کنید
سلام
فایل موجود در لینک دانلود سورس کامل نیست کلا 17 خط برنامه است که شامل دو تا تابع می باشد
سلام عزیز
ممنون از اطلاع رسانی شما، اصلاح شد
هم تو آموزش شما. هم آموزش های مشابه تو سایت های دیگه، پایه های scl و sda رو به a4 و a5 وصل کردن. ولی تو کد نوشته شده پایه هارو به عنوان ورودی تعریف نکردیم. میشه توضیح بدید دلیلش چیه؟
سلام عزیز
ارتباط I2C هست و از این پایه ها scl برای تنظیم کلاک هست و sda برای انتقال داده ها که هم ورودی میتونه باشه و هم خروجی. جهت کسب اطلاعات بیشتر میتونید مقاله ارتباط i2c رو مطالعه کنید
فایل کد کامل مربوط به این پروژه نیست. لطفا چک کنید. ممنونم
سلام عزیز
بررسی شد فایل صحیح هست. با نرم افزار WinRAR باز کنید
سلام. دستتون درد نکنه بابت مطالب عالی.
یه سوال داشتم. خروجی شتاب و زاویه از mpu چه بازه ای هست؟ عددی که نمایش داده میشه از چه مقدار تا چه مقدار تغییر میکنه؟
سلام عزیز
دما -40 تا 85°C
چرخش ±250°/s, ±500°/s, ±1000°/s و ±2000°/s
شتاب ±2g, ±4g, ±8g و ±16g