آموزش آردوینو شتاب و ژایرو پروژه های آردوینو

کنترل لابیرنت با سنسور شتاب و ژایرو MPU6050 و برد Arduino آردوینو

نوشته شده توسط حسین فهیمی

در این پست قصد دارم آموزش کنترل لابیرنت Labyrinth که یک بازی حساس و تمرکز حواس میباشد؛ با ژیروسکوپ MPU6050 رو براتون بزارم. این بازی بسیار مهیج هست مخصوصا زمانی که با سنسور ژیروسکوپ ترکیب میشه… لذت بخش ترین قسمتش همین جاست که شما میتونید ژیروسکوپ MPU6050 رو به یک دستکش متصل کنید و بعد دستکش رو دستتون کنید. با کج کردن دستتون در دو محور X و Y لابیرنت هم مطابق با دست شما کج میشه… لابیرنت(Labyrinth) یک بازی بسیارجذاب میباشد که تمرکز حواس و تعادل شما را به چالش می کشد. شما باید یک گوی فلزی را از موانع متعدد عبور دهید و به خط پایان برسانید. موانعی که سر راه شما هستند عبارتند از دیوارها و حفره هایی که با کوچکترین خطا، شما را مجبور میکنند بازی را از ابتدا شروع کنید. در ادامه با مرجع تخصصی آردوینو، دیجی اسپارک همراه باشید.

 

 


سنسور شتاب و ژایرو MPU6050


ماژول شتاب و ژایرو MPU6050 از یک چیپ سیلیکونی با قابلیت پردازش دیجیتال بهره میبرد. این ماژول توانایی ترسیم الگوریتم های پیچیده ۹ محوری را دارد. در استفاده از سنسورهای مختلف در انواع مدارها به هنگام تنظیمات محور افقی، کاربر با تنظیمات و مشکلات زیادی روبرو خواهد بود. اما با استفاده از ماژول شتاب و ژایرو MPU6050 بسیار کوچک و سبک تمامی این مشکل ها حل خواهند شد. همانطور که در بخش مشخصات فنی مشاهده نمودید، کاربر امکان مشخص کردن بازه کاری را در ۴ حالت مختلف برای هر دو قسمت شتاب سنج و ژیروسکوپ را دارد. ماژول GY521 با تجمیع و ترکیب یک ژیروسکوپ ۳ محور با یک شتاب سنج ۳ محور روی یک چیپ سیلیکونی و بهره گیری از یک پردازشگر دیجیتال حرکت، قادر است الگوریتم پیچیده ۹ محوری را اجرا کند. این ویژگی بسیاری از مشکلاتی را که در تنظیم محور افقی در سنسورهای مجزا ایجاد می گردد را بر طرف خواهد ساخت. برای دستیابی به دقت بالای اندازه گیری در حرکت های کند و حرکتهای سریع در سنسور MPU6050 امکانی فراهم شده تا کاربر بتواند بازه اندازه گیری را متناسب با شتاب یا سرعت زاویه ای تغییر دهد.

 

 


مشخصات ژیروسکوپ MPU6050


  •  خروجی دیجیتال برای سه محور x, y و z در رنج قابل برنامه ریزی   ±۲۵۰، ±۵۰۰، ±۱۰۰۰ و ۲۰۰۰± درجه بر ثانیه
  • نمونه گیری داده ها به صورت ۱۶ بیتی
  • دارای فیلتر قابل برنامه ریزی دیجیتال
  • جریان مصرفی بسیار ناچیز در محدوده ۵ میکروآمپر تا ۳٫۶ میلی آمپر

 

 


مشخصات شتاب سنج


  • خروجی دیجیتال برای سه محور x, y و z در رنج قابل برنامه ریزی   ±۲، ±۴، ±۸ و ۱۶± درجه بر ثانیه
  •  نمونه گیری داده ها به صورت ۱۶ بیتی
  •  جریان مصرفی در حدود ۵۰۰ میکروآمپر
  • تشخیص ضربه و وقفه های در حال برنامه ریزی
  •  تحمل شوک های مکانیکی تا ۱۰ KG

 

 


سروو موتور Servo Motor


سروو نوعی از موتورهای الکتریکی است که با هدف بکارگیری در سیستم‌های کنترل فیدبک طراحی می‌شود. لختی (اینرسی) در این موتورها پایین بوده و در نتیجه تغییر سرعت در این موتورها بسیار سریع است. برای مشاهده ی آموزش کامل راه اندازی سروو موتور و تولید PWM با آردوینو کلیک کنید.

سروموتور یک نوع موتور الکتریکی است که برای کنترل دقیق سرعت و موقعیت در انواع مختلف ماشین‌آلات و سیستم‌های اتوماسیون صنعتی استفاده می‌شود. این موتورها به عنوان “سروموتور” شناخته می‌شوند زیرا به عنوان یک سرومکانیزم عمل می‌کنند که موقعیت و سرعت دقیق موتور را کنترل می‌کند.

سروموتورها دارای یک مکانیزم بازخورد هستند که به سیستم کنترلی اطلاعات در مورد موقعیت و سرعت موتور را می‌دهند. بر اساس این اطلاعات، سیستم کنترلی می‌تواند موتور را به سرعت و موقعیت دقیقی که نیاز است حرکت دهد. این ویژگی‌ها باعث می‌شود سروموتورها برای بسیاری از کاربردهای دقیق و مهندسی کنترلی مناسب باشند، مانند رباتیک صنعتی، CNC (کنترل عددی رایانه‌ای) ماشین‌ها، دستگاه‌های پزشکی، پرینترها و دستگاه‌های تصویربرداری پزشکی به کار می‌روند. سروموتورها با موتورهای DC (جریان مستقیم) یا موتورهای القائی (AC) استفاده می‌شوند و به وسیله الکترونیک‌های پیشرفته کنترل می‌شوند تا در موقعیت مورد نظر حرکت کنند.

 

 

 


اتصالات


  • SCL ژیروسکوپ به پین A5 آردوینو
  • SDA ژیروسکوپ به پین A4 آردوینو
  • Vcc ماژول و سیم قرمز سرو ها به ۵v آردوینو
  • Gnd ماژول و سیم قهوه ای سرو ها به Gnd آردوینو
  • سیم زرد سرو ها به پین ۹ و ۱۰ آردوینو

 


کد آردوینو


این برنامه از کتابخانه‌های “Servo” و “MPU6050” استفاده می‌کند.ابتدا کتابخانه‌های مورد نیاز به کد اضافه می‌شوند:

  • Servo.h: برای کنترل سروموتورها.
  • MPU6050.h: برای کنترل و خواندن اطلاعات از سنسور MPU6050.
  • Wire.h: برای ارتباط با سنسور MPU6050 از طریق پروتکل I2C.

متغیرهای مورد نیاز برای ذخیره داده‌های سنسور MPU6050 و همچنین سروموتورها تعریف می‌شوند:

  • mpu: یک شی از کلاس MPU6050 برای ارتباط با سنسور MPU6050.
  • ax, ay, az: متغیرهایی برای ذخیره داده‌های شتاب‌سنج (سه محور X، Y و Z).
  • gx, gy, gz: متغیرهایی برای ذخیره داده‌های ژیروسکوپ (سه محور X، Y و Z).
  • xservo و yservo: اشیاء سروموتور برای کنترل دو سروموتور.
  • xdeg و ydeg: متغیرهایی برای ذخیره زاویه مورد نظر برای دو سروموتور.

در تابع setup، تنظیمات اولیه انجام می‌شود:

  • فراخوانی Serial.begin(9600) برای شروع ارتباط سریال برای نمایش داده‌ها در پنجره سریال مانیتور.
  • فراخوانی Wire.begin() برای راه‌اندازی ارتباط I2C.
  • فراخوانی mpu.initialize() برای مقداردهی اولیه سنسور MPU6050.
  • فراخوانی xservo.attach(9) و yservo.attach(10) برای اتصال دو سروموتور به پایه‌های ۹ و ۱۰ آردوینو.

در تابع loop، خواندن داده‌های شتاب‌سنج و ژیروسکوپ از سنسور MPU6050 و کنترل دو سروموتور انجام می‌شود:

  • mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz): این دستور داده‌های شتاب‌سنج و ژیروسکوپ را از سنسور MPU6050 می‌خواند و در متغیرهای معنایی (ax, ay, az, gx, gy, gz) ذخیره می‌کند.
  • xdeg = map(ax, -10000, +10000, 0, 180): این دستور مقدار شتاب در راهنمای محور X را به یک مقدار زاویه مناسب برای سروموتور تبدیل می‌کند.
  • ydeg = map(ay, -10000, +10000, 0, 180): این دستور مقدار شتاب در راهنمای محور Y را به یک مقدار زاویه مناسب برای سروموتور تبدیل می‌کند.
  • xservo.write(xdeg): این دستور زاویه سروموتور X را تنظیم می‌کند.
  • yservo.write(ydeg): این دستور زاویه سروموتور Y را تنظیم می‌کند.
  • delay(100): این دستور به سیستم اجازه می‌دهد تا به مدت ۰٫۱ ثانیه صبر کند و سپس دوباره اطلاعات جدید از سنسور را بخواند و سروموتورها را تنظیم کند.

این کد به عبارت دیگر، سروموتورها را بر اساس داده‌های شتاب‌سنج در محورهای X و Y کنترل می‌کند، به این صورت که زاویه سروموتورها با توجه به شتاب‌های مشاهده شده تغییر می‌کند.

 

/* MPU6050 with Servoes by hossein fahimi*/
#include <Servo.h>
#include "MPU6050.h"
#include "Wire.h"
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
Servo xservo;
Servo yservo;
int xdeg, ydeg;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu.initialize();
  xservo.attach(9);
  yservo.attach(10);
}
 
void loop() {
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  xdeg = map(ax, -10000, +10000, 0, 180);
  ydeg = map(ay, -10000, +10000, 0, 180);
  xservo.write(xdeg);
  yservo.write(ydeg);
  delay(100);
}

خب حالا کدها رو روی آردوینو آپلود کنید و بعد از انجام دادن اتصالات ، میتونید با کج کردن ژیروسکوپ در  محور های X و Y ، لابیرنت را هم کنترل کنید. جهت انجام این آزمایش به چهار کالا نیاز دارید که من در زیر لینک خرید آن ها را برای شما قرار داده ام که میتوانید از فروشگاه دانشجو کیت تهیه کنید:

 


وسایل مورد نیاز


لابیرنت Labyrinth

برد آردوینو Arduino UNO

ماژول MPU6050

سرو موتور Servo Motor

 

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

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

حسین فهیمی

تبادل نظر و رفع عیب با ثبت دیدگاه

۴ دیدگاه