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

کنترل دور موتور با شیلد موتور L298P و برد آردوینو Arduino

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

امروز در این پست شیوه مدیریت یک موتور DC ساده با استفاده از برد آردوینو Arduino و شیلد موتور L298P که یکی از درایورهای معروف برای کارهای ساده رباتیک است؛ به شما همراهان آموزش خواهم داد. در ادامه با مرجع تخصصی الکترونیک و رباتیک ، دیجی اسپارک همراه باشید.

 

apmlogo2014_no_background


موتور DC چیست؟


موتور DC یا موتور کلاسیک جریان مستقیم دارای آرمیچری از آهنربای الکتریکی است. یک سوییچ گردشی به نام کموتاتور جهت جریان الکتریکی را در هر سیکل دو بار برعکس می‌کند تا در آرمیچر جریان یابد و آهنرباهای الکتریکی، آهنربای دائمی را در بیرون موتور جذب و دفع کنند. سرعت موتور DC به مجموعه‌ای از ولتاژ و جریان عبوری از سیم پیچ‌های موتور و بار موتور یا گشتاور ترمزی، بستگی دارد. سرعت موتور جریان مستقیم وابسته به ولتاژ و گشتاور آن وابسته به جریان است. سرعت توسط ولتاژ متغیر یا عبور جریان و با استفاده از تپ‌ها (نوعی کلید تغییر دهنده وضعیت سیم‌پیچ) در سیم‌پیچی موتور یا با داشتن یک منبع ولتاژ متغیر، کنترل می‌شود.

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

pmdc-motor-construction

 

 


شیلد درایور موتور L298P آردوینو


شیلد درایور موتور L298 توسط کمپانی LGS برای درایو کردن همزمان ۲ موتور با توان‌های بالا طراحی شده است. این شیلد قابلیت درایو کردن ۲ موتور به صورت همزمان با جریان هر کدام ۲ آمپر را دارا می‌باشد. در این شیلد از ۸ دیود شاتکی برای محافظت از درایور در مقابل جریان برگشتی استفاده شده است. علاوه بر کنترل ۲ موتورDC ، این درایور قابلیت کنترل ۱ استپ موتور را نیز درا می‌باشد. این شیلد دارای ۴ خروجی با قابلیت درایو کردن ۲ عدد موتور DC با حدکثر جریان ۲ آمپر می‌باشد.به وسیله‌‌ی این شیلد نیز می‌توان ، یک عدد استپر را راه اندازی نمود. توسط این برد امکان تغییر جهت چرخش موتور و کنترل سرعت از طریق مدولاسیون PWM و PPL  وجود دارد. در ادامه آموزش با مرجع تخصصی آردینو ، دیحی اسپارک همراه باشید.در این آموزش به برد آردوینو و شیلد L298 به همراه موتور DC نیاز داریم. جهت مطالعه ی آموزش راه اندازی مقدماتی این ماژول به آموزش راه اندازی شیلد L298P که همکارم آموزش داده است مراجعه کنید.

 


کد آردوینو


 

 

int pwm_b = 11; 
int dir_b = 13; 

int pot1;
int pot2;
int value;

void setup() {
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_b, OUTPUT);
}


void loop() {
  value = analogRead(A0);
  if (value > 511) {
    right();
  }
  else {
    left();
  }
}

void right() {
  pot1 = analogRead(A0);
  pot1 = map(pot1, 511, 1023, 0, 255);
  digitalWrite(dir_b, LOW); 
  analogWrite(pwm_b,pot1);
}

void left() {
  pot2 = analogRead(A0);
  pot2 = map(pot2, 511, 0, 0, 255);
  digitalWrite(dir_b, HIGH);  
  analogWrite(pwm_b,pot2); 
}

معرفی متغییر های مورد نیاز جهت کنترل دور و کنترل جهت موتور

int pwm_b = 11; 
int dir_b = 13; 

 

معرفی متغییر هایی جهت خواندن مقادیر پتانسیومتر و تناسب بندی

int pot1;
int pot2;
int value;

 

خروجی قرار دادن پین های مرتبط با کنترل دور موتور

pinMode(pwm_b, OUTPUT);
pinMode(dir_b, OUTPUT);

 

خواندن مقادیر پتانسیومتر و ریختن آن درون متغییر value

value = analogRead(A0);

 

دستور شرطی if (اگر مقادیر پتانسیومتر از ۵۱۱ بیشتر بود حلقه ی right را اجرا کند در غیر این صورت حلقه ی left را اجرا کند)

 if (value > 511) {
    right();
  }
  else {
    left();
  }

 

حلقه ی right ، خواندن مقادیر پتانسیومتر و ریختن آن درون متغییر pot1 ، تناسب بندی بین مقادیر و دستور به موتور جهت چرخش (با تغییر مقدار dir_b به دو حالت LOW و HIGH میتوانیم جهت چرخش موتور را کنترل کنیم.)

void right() {
  pot1 = analogRead(A0);
  pot1 = map(pot1, 511, 1023, 0, 255);
  digitalWrite(dir_b, LOW); 
  analogWrite(pwm_b,pot1);
}

 

بعد از آپلود کد بر روی برد ، یک پتانسیومتر ۱۰K به پین A0 آردوینو متصل و با آن ، جهت چرخش موتور خود را کنترل کنید .

 

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

 

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

حسین فهیمی

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

۷ دیدگاه

  • با سلام و تشکر بابت مطالب ارزشمندتون که رایگان در اختیار همه قرار میدید و پاسخگو هم هستید.
    من برای کنترل دو موتور dc این شیلد رو گرفتم . امروز که میخواستم یه موتور گیربکس رو باهاش کنترل کنم هم با آداپتور ۱۲ ولت درایور رو تغذیه کردم و هم آردوینو رو به لب تاب متصل کردم و در همون لحظه لب تاب خاموش شد و دیگه روشن نشد. به نظر شما باعث سوختنش شده؟

    • با سلام
      با تشکر از شما
      لطفا موارد را از طریق یک کامنت دنبال کنید. با توجه به اینکه آردوینو دارای حفاظت مدار است، ارتباطی با آن نخواهد داشت.

  • سلام من مبخوام تعداد دور رو کنترل کنم یعنی مثلا بزنم ۲۰۰ دور دقیق ۲۰۰ تا زد وایسه…ممنون میشم راهنمایی کنید