در این آموزش، خواهیم آموخت که چگونه یک ساخت گیمبال (Gimbal) با آردوینو یا پلتفرم لرزشگیر با سرو موتورها درست کنیم. گیمبال را با استفاده از یک نرم افزار مدل سازی 3 بعدی طراحی کرده ام. این طرح شامل 3 سرو موتور MG996R برای کنترل 3 محور است و دارای یک پایه است که سنسور MPU6050، آردوینو و باتری روی آن قرار داده می شود.
می توانید این مدل سه بعدی را همراه با فایل های STL که برای چاپ سه بعدی بکار می رود را در اینجا دانلود کنید:
مدل سه بعدی گیمبال با آردوینو:
فایل STEP مدل سه بعدی گیمبال
فایلهای STL گیمبال
با استفاده چاپگر Creality CR-10 3D، همه بخش ها را به صورت 3 بعدی چاپ کردیم و همه بخش ها عالی از آب درآمد.
سرهم کرن قطعات گیمبال با آردوینو
نصب گیمبال بسیارآسان بود. من با نصب سرو محور قائم( Yaw ) شروع کردم. با استفاده از پیچ و مهره های M3، آن را به پایه محکم کردم.
سپس، با استفاده از همان روش سرو محور طولی(Roll) را محکم کردم. این قطعات مشخصاً به گونه ای طراحی شده اند که به راحتی با سروهای MG996R منطبق شوند.
برای اتصال بخش ها به یکدیگر، از بازوهای(horn) گرد استفاده کردم که به عنوان لوازم جانبی همراه سروها هستند.
ابتدا باید بازوی گرد را با استفاده از دو پیچ به پایه محکم کرده و سپس با یک پیچ دیگر به سرو موتور مذکور متصل کنیم.
این رویه را برای نصب بقیه اجزا، سرو محور عرضی(Pitch) و پلتفرم بالایی تکرار کردم.
سپس،برای مرتب کردن سیم های سرو، آنها را از سوراخ های نگه دارنده عبور دادم. سپس سنسور MPU6050 را قرار داده و با استفاده از پیچ و مهره به پایه محکم کردم.
به عنوان منبع تغذیه پروژه، از دو باتری لیتیوم-یون(Li-ion) استفاده کرده و آنها را در نگه دارنده باتری قرار دادم. نگه دارنده باتری را با استفاده از دو پیچ و مهره به پایه محکم کردم.
باتری های لیتیوم-یون حدود 7.4 ولت را تولید می کنند، اما ما برای تغذیه آردوینو و سروها به ولتاژ 5 ولت نیاز داریم.
به همین خاطر از یک مبدل کاهنده استفاده کردم که 7.4 ولت را به 5 ولت تبدیل می کند.
دیاگرام مدار گیمبال با آردوینو
تنها چیزی که باقی مانده متصل کردن اجزا به همدیگر است.در زیر دیاگرام مداری این پروژه را می بینید که نحوه اتصال قطعات به هم را نشان می دهد.
می توانیداجزای مورد نیاز برای آین مقاله آموزشی آردوینو را از لینک های زیر دریافت کنید:
- ماژول MPU6050 IMU
- موتور سرور مدل MG996R
- ماژول منبع تغذیه کاهنده با خروجی 5ولت
- برد آردوینو
- بردبورد
- سیم بردبوردی
در انتها اجزا را به هم چسبانده و سیم ها را دورن پایه قرار داده و با استفاده از درپوش پایین، سیمها را می پوشانم.
بدین ترتیب پلتفرم خود متعادل ساز یا گیمبال آردوینو تکمیل شده و همانند آنچه انتظار داشتیم عمل می کند. تنها چیزی که باقی مانده بررسی کد برنامه است.
کد ساخت گیمبال با آردوینو
کد آردوینو برای این مثال، نسخه ویرایش داده شده مثال MPU6050_DMP از مثال های کتابخانه i2cdevlib نوشته Jeff Rowberg است.
گیمبال آردوینو DIY | کد پلتفرم لرزشگیر
توضیحات کد: ما از خروجی قابل خواندن yaw، pitch و roll استفاده می کنیم.
// Get Yaw, Pitch and Roll values #ifdef OUTPUT_READABLE_YAWPITCHROLL dmpGetQuaternion(&q, fifoBuffer); dmpGetGravity(&gravity, &q); dmpGetYawPitchRoll(ypr, &q, &gravity); // Yaw, Pitch, Roll values - Radians to degrees ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI; // Skip 300 readings (self-calibration process) if (j <= 300) { correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings j++; } // After 300 readings else { ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Value = map(ypr[1], -90, 90, 0, 180); int servo2Value = map(ypr[2], -90, 90, 180, 0); // Control the servos according to the MPU6050 orientation write(servo0Value); write(servo1Value); write(servo2Value); } #endif
هنگامی که مقادیر را دریافت می کنیم، ابتدا رادیان را به درجه تبدیل می کنیم.
// Yaw, Pitch, Roll values - Radians to degrees ypr[0] = ypr[0] * 180 / M_PI; ypr[1] = ypr[1] * 180 / M_PI; ypr[2] = ypr[2] * 180 / M_PI;
سپس منتظر مانده یا 300 عمل خواندن را انجام می دهیم، زیرا در این لحطه سنسور هنوز در فرآیند خود-کالیبره سازی(self-calibration) می باشد. همچنین، مقدار Yaw را دریافت کرده که همانند مقادیر Pitch و Roll ، در آغاز 0 نیست، بلکه همواره یک مقدار تصادفی است.
// Skip 300 readings (self-calibration process) if (j <= 300) { correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings j++; }
بعد از 300 بار خوانش، ابتدا مقدار Yaw را با تفریق مقدار تصادفی گرفته شده، برابر 0 می کنیم. سپس مقادیر Yaw، Picth و Roll را از -90 تا +90 درجه، به 0 تا 180 درجه نگاشت می کنیم که برای راه اندازی سروها کاربرد دارد.
// After 300 readings else { ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180 int servo0Value = map(ypr[0], -90, 90, 0, 180); int servo1Value = map(ypr[1], -90, 90, 0, 180); int servo2Value = map(ypr[2], -90, 90, 180, 0); // Control the servos according to the MPU6050 orientation write(servo0Value); write(servo1Value); write(servo2Value); }
در نهایت با نوشتن یک تابع، این مقادیر را به عنوان سیگنال های کنترلی به سروها ارسال می کنیم. البته، درصورتی که تنها بخواهید محورهای X و Y را متعادل کرده و از این پلتفرم به عنوان گیمبال دوربین استفاده کنید، ، می توانید سرو محور قائم را غیرفعال سازید.
یک گیمبال دوربین واقعی
لطفاً توجه کنید که این حالت از یک گیمبال دوربین واقعی بسیار دور است. جابجایی ها در این پلتفرم ملایم و نرم نیستند زیرا این سروها برای این کار مناسب نیستند. گیمبال دوربین واقعی از یک نوع خاص موتور BLCD برای جابجایی های نرم استفاده می کنند. بنابراین این پروژه را تنها به عنوان یک پروژه دانشجویی درنظر بگیرید.
منبع: ترجمه از وبسایت howtomechatronics.com
تا اینجا برای این آموزش ساخت گیمبال با آردوینو کافی است. امیدوارم از آن لذت برده و چیز جدیدی آموخته باشید. سوالات و نظرات خود را در قسمت کامنتها قرار داده و من حتما چک خواهم کرد. توصیه میکنم مقالات مرتبط به روباتیک و مکاترونیک و دیگر پروژههای آردوینو را هم بخونید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
ممنون از مطلب خوبتون.یه سوال. اگر موتور رو عوض کنیم و یه موتور BLCD خوب بذاریم میتونیم امیدوار باشیم که کیفیت گیمبال جدید ۶۰تا ۷۰ درصد بهبود پیدا کنه ٔ؟ اگر به ۷۰ درصد کارآیی گیمبال حرفه ای هم برسه عالیه
خیر. راه اندازی سرو و براشلس ها کاملا متفاوت هست
سلام وقتتون بخیر برای کد نویسیش از چه نرم افزاری استفاده کردید
سلام و درود برشما!🙋🏻♂️ ، اول اینکه ممنون از سایت خوبتون و اینکه مطالب رو به طور کامل در اختیار کاربران قرار دادید! 🙏🏻🙏🏻
و سوال اینکه: سرعت پردازش در این نوع آردوینو کمی پایین هست و عمل متعادل سازی با کمی دیلی انجام میشه! ، آیا امکانش هست بجای آردوینو از ESP32 استفاده کنیم؟؟ 🤔
🙏🏻