ساخت گیمبال با آردوینو – لرزشگیر دوربین

در این آموزش، خواهیم آموخت که چگونه یک ساخت گیمبال (Gimbal) با آردوینو یا پلتفرم لرزشگیر با سرو موتورها درست کنیم.  گیمبال را با استفاده از یک نرم افزار مدل سازی 3 بعدی طراحی کرده ام. این طرح شامل 3 سرو موتور MG996R برای کنترل 3 محور است و دارای یک پایه است که سنسور MPU6050، آردوینو و باتری روی آن قرار داده می شود.

ساخت گیمبال با آردوینو

می توانید این مدل سه بعدی را همراه با فایل های STL که برای چاپ سه بعدی بکار می رود را در اینجا دانلود کنید:

مدل سه بعدی گیمبال با آردوینو:

فایل STEP مدل سه بعدی گیمبال

فایلهای STL  گیمبال

با استفاده چاپگر Creality CR-10 3D، همه بخش ها را به صورت 3 بعدی چاپ کردیم و همه بخش ها عالی از آب درآمد.

ساخت گیمبال با آردوینو

سرهم کرن قطعات گیمبال با آردوینو

نصب گیمبال بسیارآسان بود. من با نصب سرو محور قائم( Yaw ) شروع کردم. با استفاده از پیچ و مهره های M3، آن را به پایه محکم کردم.

گیمبال با آردوینو

سپس، با استفاده از همان روش سرو محور طولی(Roll) را محکم کردم. این قطعات مشخصاً به گونه ای طراحی شده اند که به راحتی با سروهای MG996R منطبق شوند.

گیمبال با آردوینو

برای اتصال بخش ها به یکدیگر، از بازوهای(horn) گرد استفاده کردم که به عنوان لوازم جانبی همراه سروها هستند.

گیمبال با آردوینو

ابتدا باید بازوی گرد را با استفاده از دو پیچ به پایه محکم کرده و سپس با یک پیچ دیگر به سرو موتور مذکور متصل کنیم.

ساخت گیمبال با آردوینو

این رویه را برای نصب بقیه اجزا، سرو محور عرضی(Pitch) و پلتفرم بالایی تکرار کردم.

ساخت گیمبال با آردوینو

سپس،برای مرتب کردن سیم های سرو، آنها را از سوراخ های نگه دارنده عبور دادم. سپس سنسور MPU6050 را قرار داده و با استفاده از پیچ و مهره به پایه محکم کردم.

مطلب پیشنهادی:  آموزش کار با سنسور‌های دما و رطوبت DHT11 و DHT22 با استفاده از آردوینو

ساخت گیمبال با آردوینو

به عنوان منبع تغذیه پروژه، از دو باتری لیتیوم-یون(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

تا اینجا برای این آموزش ساخت گیمبال با آردوینو کافی است. امیدوارم از آن لذت برده و چیز جدیدی آموخته باشید. سوالات و نظرات خود را در قسمت کامنت‌ها قرار داده و من حتما چک خواهم کرد. توصیه می‌کنم مقالات مرتبط به روباتیک و مکاترونیک و دیگر پروژه‌های آردوینو را هم بخونید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

4 دیدگاه

  1. ممنون از مطلب خوبتون.یه سوال. اگر موتور رو عوض کنیم و یه موتور BLCD خوب بذاریم میتونیم امیدوار باشیم که کیفیت گیمبال جدید ۶۰تا ۷۰ درصد بهبود پیدا کنه ٔ؟ اگر به ۷۰ درصد کارآیی گیمبال حرفه ای هم برسه عالیه

  2. سلام وقتتون بخیر برای کد نویسیش از چه نرم افزاری استفاده کردید

  3. سلام و درود برشما!🙋🏻‍♂️ ، اول اینکه ممنون از سایت خوبتون و اینکه مطالب رو به طور کامل در اختیار کاربران قرار دادید! 🙏🏻🙏🏻
    و سوال اینکه: سرعت پردازش در این نوع آردوینو کمی پایین هست و عمل متعادل سازی با کمی دیلی انجام میشه! ، آیا امکانش هست بجای آردوینو از ESP32 استفاده کنیم؟؟ 🤔
    🙏🏻