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

کنترل زاویه سروو موتور با ماژول ژایرو MPU6050 و برد آردوینو Arduino

نوشته شده توسط CiferTech

ماژول ژایرو MPU6050 یکی از محبوب‌ترین‌ها در بین نمونه های موجود برای اندازه‌گیری مقادیر x,y,z است. در کل ایده اینکه این مقادیر را بدست آورده و در ادامه یک وسیله را با آن کنترل کنیم همواره جذاب بوده! در این آموزش قصد داریم با استفاده از این مقادیر یعنی x و y اقدام به کنترل سروو موتور کنیم. با استفاده از سناریو های مختلف، که می‌توانید با فراگیری این آموزش پروژه های جذابی را توسعه دهید. در ادامه آموزش کنترل سرو با ماژول MPU6050 با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

آموزش کنترل سرو با ماژول MPU6050 و برد آردوینو نانو - دیجی اسپارک

 


ماژول MPU6050


حالا زمان این رسیده با سخت افزار اصلی این آموزش، یعنی MPU6050 بیشتر آشنا بشیم. Mpu6050 دارای یک شتاب سنج سه محوره و یک ژیروسکوپ سه محوره MEMS می‌باشد. دقت ماژول مبدل آنالوگ به دیجیتال ۱۲ بیت بوده و می‌تواند مقادیر X ، Y ، Z را در یک زمان اندازه گیری کند. بافر این ماژول از نوع FIFO با ظرفیت ۱۰۲۴ بایت می‌باشد. این ماژول به عنوان Slave به آردوینو توسط پایه‌های SCL و SDA متصل می‌شود. با استفاده از پردازشگر دیجیتال، ۴ خروجی برای دستیابی به دقت قابل توجه، در حرکت‌های کند و سریع در سنسور فراهم کرده است. با این روش کاربر می‌تواند بازه اندازه گیری را متناسب با شتاب یا سرعت تغییر دهد. به همین منظور در قسمت ژیروسکوپ سنسور چهار بازه ۲۵۰±، ۵۰۰±، ۱۰۰۰± و ۲۰۰۰± درجه بر ثانیه و در قسمت شتاب سنج سنسور چهار بازه ۲g، ±۴g، ±۸g، ±۱۶g± برای کاربر قابل انتخاب خواهد بود. توجه داشته باشید که ولتاژ کاری این ماژول ۳ الی ۵ ولت می‌باشد.

کنترل سرو با ماژول MPU6050 ژایرو - دیجی اسپارک

 


سروو موتور Servo Motor


سروو موتور نوعی موتور است که می تواند با دقت زیادی بچرخد. به طور معمول این نوع موتور از یک مدار کنترل تشکیل شده است که بازخوردی را در مورد موقعیت فعلی شافت موتور ارائه می دهد، این بازخورد به موتورهای سروو اجازه می دهد تا با دقت زیادی بچرخند. انواع سرو موتورها بر اساس کاربرد آنها در انواع مختلف طبقه بندی می شوند ، مانند سروو موتور AC و موتور سروو DC.

کنترل سرو موتور با ماژول شتاب و ژایرو - دیجی اسپارک

 


برد آردوینو Arduino


مجموعه بردهای آردوینو از جمله بردهای توسعه پرطرفدار بین مهندسین امبدد هستند که در مدل‌های مختلفی از جمله Micro ,  proMini , Nano , Uno و همچنین Mega قابل تهیه هستند. هسته مرکزی این بردهای محبوب از سری AtMega328 می‌باشد. آردوینو پلتفرم سخت ‌افزاری و نرم‌ افزاری متن باز است. همان طور که پیش از این اشاره کردیم، پلتفرم آردوینو شامل یک میکروکنترلر تک‌بردی متن‌باز است که قسمت سخت‌افزار آردوینو را تشکیل می‌دهد. علاوه بر این، پلتفرم آردوینو یک نرم‌افزار آردوینو IDE که به منظور برنامه‌نویسی برای بردهای آردوینو طراحی شده‌است و یک بوت لودر نرم‌افزاری که بر روی میکروکنترلر بارگذاری می‌شود را در بر می‌گیرد.

برد آردوینو نانو Nano کنترل سرو با ماژول MPU6050 - دیجی اسپارک

 


موج مربعی یا PWM


موج مربعی یا pwm یا Pulse Width Modulation به معنی مدولاسیون پهنای پالس، روشی برای تنظیم توان الکتریکی، با تغییردادن زمان قطع‌ و‌ وصل شدن منبع در هر سیکل است. در واقع pwm یک سیگنال مربعی می‌باشد که در یک زمان می تواند ۱ یعنی ۵لت و یا ۰ که یعنی ۰ولت باشد که در این بین ما با تغییر Duty Cycle به نتیجه دلخواه که در نور led، حرکت در سروو و موارد دیگر می شویم. برای مثال اگر Duty Cycle یک موج PWM برابر با ۸۰% باشد یعنی در هر سیکل ۸۰% ولتاژ برابر ۵ولت و ۲۰% ولتاژ برابر۰ است.در شکل زیر PWM نشان داده شده است.

شناخت موج مربعی Pulse Width Modulation - دیجی اسپارک

 


توضیح تکمیلی


در پروژه کنترل سرو با ماژول MPU6050 ابتدا مقادیر x و y را توسط ماژول MPU6050 بدست می آوریم. سپس این مقادیر به زوایای مختلفی از سروو اختصاص خواهیم داد. بطوری که با تغییر این مقادیر در محدوده ای خاص زاویه سروو تغییر خواهد کرد، البته این پروژه را با چند سناریوی مختلف تست خواهیم کرد، برای مثال زمانی که تغییر در محور x ها داشته باشیم یک سروو و زمانی که محور y تغییر داشته باشد دومین سروو تغییراتی را داشته باشد.

برد آردوینو نانو Nano کنترل سرو با ماژول MPU6050 - دیجی اسپارک

 


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


سروو موتور SG90

برد آردوینو نانو

ماژول ژایرو MPU6050

وسایل لازم برای کنترل سرو با ماژول MPU6050 - دیجی اسپارک

 


راه‌اندازی با یک سروو موتور


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

 

اتصالات سرو موتور به برد آردوینو نانو - دیجی اسپارک

اتصال ماژول شتاب و ژایرو MPU6050 به آردوینو نانو - دیجی اسپارک

اتصالات پروژه کنترل سرو با ماژول MPU6050 - دیجی اسپارک

 

در این مرحله نوبت به کد های این بخش از پروژه می رسد که بخش هایی از آن را ابتدا بررسی خواهیم کرد، ابتدا کتابخانه های مورد نیاز، برای راه‌اندازی ماژول های استفاده شده در این آموزش را فراخوانی خواهیم کرد.

#include <Wire.h>

#include <MPU6050.h>

#include <Servo.h>

 

در این قسمت یک آبجکت با استفاده از کتابخانه servo.h تعریف می کنیم که نمایان گر سروو استفاده شده است، همچنین اسمی برای آن نیز مشخص می کنیم که من از اسم خود سروو استفاده کردم.

Servo sg90;

 

در ادامه پین های مربوط را مشخص می کنیم با تعریف دو متغیر

int servo_pin = 2;
int servo_pin1 = 3;

 

پس مشخص شدن تنظیمات سروو موتور نوبت به تعریف مقادیر ماژول MPU6050 است.

MPU6050 sensor ;

int16_t ax, ay, az ;

int16_t gx, gy, gz ;

 

در این خط از کد مقادیر ژایرو و accelerometer را از سنسور دریافت و ذخیره خواهیم کرد.

sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);

 

در این بخش مقادیر سنسور و سروو موتور را معادل سازی می کنیم تا نسبت به تغییرات یکدیگر واکنش نشان دهند.

ax = map (ax, -17000, 17000, 0, 180) ;

 

و در نهایت با این خط کد فرمان اجرا خواهیم داد.

sg90.write (ax);

 

کد کامل این بخش از پروژه کنترل سرو با ماژول MPU6050

        
#include <Wire.h>

#include <MPU6050.h>

#include <Servo.h>   

Servo sg90;          

int servo_pin = 2;

MPU6050 sensor ;

int16_t ax, ay, az ;

int16_t gx, gy, gz ;

void setup ( )

{ 

sg90.attach ( servo_pin );

Wire.begin ( );

Serial.begin  (9600); 

Serial.println  ( "Initializing the sensor" ); 

sensor.initialize ( ); 

Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed"); 

delay (1000); 

Serial.println ( "Taking Values from the sensor" );

delay (1000);

}




void loop ( ) 

{ 

sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);

ax = map (ax, -17000, 17000, 0, 180) ;

Serial.println (ax);

sg90.write (ax); 

delay (200);

}

 


راه‌اندازی با دو عدد سروو موتور


در این بخش از پروژه کنترل سرو با ماژول MPU6050 با استفاده از دو عدد سروو اقدام به راه‌اندازی این پروژه خواهیم کرد، در واقع این بخش به این شکل است که با تغییر مقادیر y یک سروو  و با تغییر مقادیر x دومین سروو شروع به حرکت خواهد کرد. اتصالات را مطابق جدول و شماتیک زیر برقرار کنید.

 

اتصالات ماژول شتاب MPU6050 به آردوینو نانو

اتصالات دو عدد کنترل سرو با ماژول MPU6050 - دیجی اسپارک

اتصالات کنترل سرو با ماژول MPU6050 - دیجی اسپارک

اتصالات دو عدد سرو موتور برای کنترل سرو با ماژول MPU6050 و آردوینو - دیجی اسپارک

 

کد های این بخش پروژه کنترل سرو با ماژول MPU6050 تفاوت چندانی با کد قبلی ندارد تنها یک سروو چدید تعریف کردیم و همچنین مقادیر y را به سروو جدید نسب دادیم. کد کامل این بخش را می توانید در کادر زیر مشاهده کنید.

        
#include <Wire.h>

#include <MPU6050.h>

#include <Servo.h>   

Servo sg90;          
Servo sg90two;          


int servo_pin = 2;
int servo_pin1 = 3;

MPU6050 sensor ;

int16_t ax, ay, az ;

int16_t gx, gy, gz ;

void setup ( )

{ 

sg90.attach ( servo_pin );
sg90two.attach ( servo_pin1 );


Wire.begin ( );

Serial.begin  (9600); 

Serial.println  ( "Initializing the sensor" ); 

sensor.initialize ( ); 

Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed"); 

delay (1000); 

Serial.println ( "Taking Values from the sensor" );

delay (1000);

}


void loop ( ) 

{ 

sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);

ax = map (ax, -17000, 17000, 0, 180) ;
ay = map (ay, -17000, 17000, 0, 180) ;

Serial.println (ax);

sg90.write (ax); 
sg90two.write (ay); 


delay (200);

}

کنترل سرو با ماژول MPU6050 دو عدد موتور با آردوینو - دیجی اسپارک

 


جمع بندی


در آموزش کنترل سرو با ماژول MPU6050 با استفاده از سروو موتور SG90 و همچنین ماژول MPU6050 توانستیم مقادیر x, y را نسبت به زوایای سروو map کنیم، در این پروژه از برد آردوینو نانو استفاده شد که با اسفاده از همین کد و اتصالات می توانید از برد آردوبنو UNO نیز استفاده کنید و براحتی پروژه را راه‌اندازی کنید.

 

  • تنظیمات منوی tools در نرم افزار آردوینو نیز مانند تصویر زیر است.

 

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

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

CiferTech

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

۴ دیدگاه

  • درود استاد.. من میخوام از دو سروو موتور MG945 استفاده کنم… از همین کد میتونم استفاده کنم یا نمیشه؟! ممنون میشم راهنمایی کنید

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

    • با سلام
      این مورد توسط بنده تست نشده است، از دیگر کاربرانی که در این زمینه تجربه ای دارند، تقاضا میکنم در بحث شرکت کنند.