- ابزارآلات و آهنربا
-
ابزارآلات
- ابزار اندازه گیری (مولتیمتر، کولیس و . . .)
- ابزار سوراخکاری (مته، سه نظام، چهار نظام، پنج نظام و . . .)
- ابزار و تجهیزات کار (پیچ گوشتی، انبردست، سیمچین، پنس و . . .)
- برد بورد، فیبر خام و سوراخدار (فیبر مدار چاپی و PCB)
- پیچ و اسپیسر (پیچ و مهره رباتیک و اسپیسر پلاستیکی و فلزی)
- سیم و کابل (سیم افشان، فلت، باندی، کابل شارژ، پرینتر، و . . .)
- لحیمکاری (هویه، نوک هویه، پایه هویه، سیم لحیم، روغن لحیم و . . . )
- منبع تغذیه، باتری و جاباتری (باتری قلمی، نیم قلمی، کتابی و . . . )
-
ابزارآلات
- برد هوشمند
- پرینتر سه بعدی
- رباتیک و پروازی
- ماژول
- قطعات الکترونیک
- کیت الکترونیکی و انواع جعبه
- موتور
- اصناف مختلف
راه اندازی موتور DC با درایور L293D و آردوینو
کسانی که میخواهند رباتی بسازند که حرکت میکند، باید بدانند که چگونه میتوان یک موتور DC را به آیسی مخصوص و آردوینو متصل کرد. واقعیت آن است که ارزانترین و آسانترین راه برای انجام این کار، استفاده از آیسی L293D میباشد. اینک در پروژه کنترل و راه اندازی موتور DC با درایور L293D و آردوینو، موضوع گفته شده را به صورت عملی توضیح میدهیم زیرا با این روش هم سرعت و هم مسیر حرکت ربات تنظیم خواهد شد.
دیگر مزیت این پروژه، امکان کنترل کردن یک استپر موتور تکقطبی مانند 28BYJ-48 یا یک استپر موتور دوقطبی مانند NEMA 17 خواهد بود. پس برای یادگیری این آموزش، با بهنام رباتیک همراه باشید.
فهرست مطالب
لوازم مورد نیاز برای پروژه راه اندازی موتور DC با درایور L293D و آردوینو
کنترل و راه اندازی موتور DC با درایور L293D و آردوینو
برای اینکه بتوانید موتور DC مدنظرتان را به طور تمام و کمال کنترل کنید، باید بتوانید سرعت و مسیر چرخش آن را تحت اشراف خود درآورید. امکان انجام این کار با یکی از دو روش زیر وجود دارد:
PWM؛ برای کنترل سرعت موتور
شما میتوانید با تغییر ولتاژ ورودی یک موتور DC، سرعت آن را کم یا زیاد کنید. یکی از تکنیکهای پرطرفدار و کاربردی برای انجام این کار، مدولاسیون پهنای پالس یا همان PWM است.
PWM تکنیکی به شمار میرود که در آن مقدار میانگین ولتاژ ورودی توسط ارسال پالسهای روشن و خاموش تنظیم میشود. این ولتاژ میانگین برای عرض پالسها که با عنوان چرخه وظیفه نیز شناخته شده، ناچیز میباشد.
در این میان، هر چه چرخه وظیفه بیشتر شود، ولتاژ میانگین وارد شده به موتور DC نیز افزایش مییابد و در نتیجه سرعت موتور هم بیشتر خواهد شد. در سمت دیگر، هر چه چرخه وظیفه کمتر گردد، ولتاژ میانگین ورودی موتور DC هم کمتر خواهد شد و سرعت آن افت میکند.
تصویر زیر تکنیک PWM را با چرخههای وظیفه متعدد و ولتاژ میانگین متعدد نشان میدهد.
H-Bridge؛ برای کنترل مسیر چرخش موتور
مسیر چرخش موتور را میتوان با تغییر قطب واردکننده ولتاژ به موتور عوض کرد. یک تکنیک پرکاربرد برای انجام این کار، H-Bridge نام دارد.
یک مدار مجهز به H-Bridge چهار سوئیچ دارد که به شکل حرف انگلیسی H مرتب شدهاند و موتور نیز در وسط آنها جای گرفته است.
بستن دو سوئیچ به صورت همزمان سبب میشود که قطب واردکننده ولتاژ به موتور تغییر کند و در نتیجه مسیر چرخش موتور عوض شود.
انیمیشن زیر نحوه کارکرد مدار H-Bridge را نشان میدهد.
آشنایی با آیسی L293D پیش از راه اندازی موتور DC با درایور L293D و آردوینو
L293D یک درایور موتور دو کاناله از نوع H-Bridge است که توانایی راهاندازی دو موتور DC یا یک استپر موتور را دارا میباشد. این یعنی L293D میتواند دو موتور را به صورت جداگانه کنترل کند تا بتوانیم این آیسی را یکی از بهترین گزینهها برای رباتهای دارای دو چرخ بدانیم.
در اکثر مواقع، از L293D برای درایو کردن موتورها استفاده میشود ولی میتوان از آن برای کنترل هر نوع قطعه رسانا مانند رله سولونوئید یا یک ترانزیستور سوئیچینگ پاور نیز بهره برد.
آیسی درایور L293D میتواند چهار سولونوئید، چهار موتور DC تک مسیره، دو موتور DC دو مسیره و یا یک استپر موتور را کنترل کند.
این آیسی همچنین، با ولتاژ تغذیه 4.5 تا 36 ولت سازگار است و میتواند در اوج عملکرد، در هر کانال 1.2 آمپر جریان ارائه دهد بنابراین با اکثر موتورهایی که در بازار وجود دارد، سازگار است.
L293D یک دیود نگهدارنده داخلی دارد تا وقتی موتور بدرستی به آن وصل نشده، آسیبی به موتور وارد نکند.
آشنایی با مشخصات فنی L293D پیش از راه اندازی موتور DC با درایور L293D و آردوینو
ولتاژ خروجی موتور |
4.5 تا 36 ولت |
ولتاژ ورودی منطقی |
5 ولت |
جریان خروجی در هر کانال |
600 میلیآمپر |
حداکثر جریان خروجی در هر کانال |
1.2 آمپر |
آشنایی با پینهای L293D قبل از راه اندازی موتور DC با درایور L293D و آردوینو
آیسی L293D مجموعاً 16 پین دارد که در ادامه به بررسی آنها میپردازیم:
آشنایی با پینهای پاور پیش از شروع پروژه راه اندازی موتور DC با درایور L293D و آردوینو
این آیسی به طور کلی دو پین پاور دارد که عبارتند از:
- VS (Vcc2): این پین قدرت لازم برای H-Bridge داخلی آیسی را فراهم میآورد تا موتورها کنترل شوند. شما میتوانید ولتاژ 4.5 تا 36 ولت را به این پین وارد کنید.
- VSS (Vcc1): این پین برای کنترل مدار منطقی داخلی که باید 5 ولت باشد، کاربردی خواهد بود.
- GND: این همان پین اتصال به زمین است. تمامی چهار پین GND این آیسی از داخل به هم وصل شدهاند و وظیفه خارج کردن گرمای ایجاد شده در شرایط سخت و شدید کاری را بر عهده دارند.
آشنایی با پینهای خروجی قبل از شروع پروژه راه اندازی موتور DC با درایور L293D و آردوینو
کانالهای خروجی L293D برای کنترل موتور اول در پینهای Out1 و Out2 و برای کنترل موتور دوم در پینهای Out3 و Out4 ارائه شدهاند. شما میتوانید ولتاژ 5 تا 36 ولت DC را به این پینها وارد کنید.
هر کانال آیسی میتواند 600 میلیآمپر جریان را به موتور DC هدایت کند ولی مقدار جریان رسیده به موتور بستگی به منبع نیروی استفاده شده توسط شما خواهد داشت.
آشنایی با پینهای کنترل مسیر پیش از شروع پروژه راه اندازی موتور DC با درایور L293D و آردوینو
با استفاده از پینهای کنترل مسیر، میتوانید مشخص کنید که موتور به سمت جلو برود یا عقب. در واقع این پینها سوئیچهای مدار H-Bridge که درون L293D قرار گرفتهاند را کنترل میکنند.
این آیسی به ازای هر کانال، دو پین کنترل مسیر دارد. پینهای IN1 و IN2 مسیر چرخش موتور اول و پینهای IN3 و IN4 مسیر چرخش موتور دوم را کنترل میکنند.
برای مشخص کردن نحوه چرخش موتور، میتوانید ولتاژ 5 ولت HIGH و یا LOW را به پینهای نامبرده اعمال کنید. جدول زیر نشان میدهد که این پینها چهطور کار میکنند:
مسیر چرخش |
پین IN2 |
پین IN1 |
موتور خاموش |
Low(0) |
Low(0) |
حرکت به جلو |
Low(0) |
High(1) |
حرکت به عقب |
High(1) |
Low(0) |
موتور خاموش |
High(1) |
High(1) |
آشنایی با پینهای کنترل سرعت قبل از آغاز پروژه راه اندازی موتور DC با درایور L293D و آردوینو
پینهای کنترل سرعت ENA و ENB برای روشن و خاموش کردن موتورها و کنترل سرعت آنها به کار میروند.
رساندن این پینها به وضعیت HIGH سبب چرخش موتورها شده و رساندن وضعیت آنها به LOW سبب متوقف شدن موتورها میشود. ضمناً به خاطر وجود مدولاسیون پهنای پالس (PWM) میتوان سرعت موتورها را کنترل کرد.
سیمکشی مدار پروژه راه اندازی موتور DC با درایور L293D و آردوینو
حالا که همه چیز را در مورد آیسی L293D میدانیم، باید شروع به وصل کردن آن به آردوینو بکنیم.
ابتدا منبع تغذیه را به موتورها وصل میکنیم. در این پروژه، از موتور اسباببازی DC که با عنوان موتور TT نیز شناخته شده و در رباتهای دارای دو چرخ دیده میشود، استفاده کردهایم. این موتورها برای فعالیت به ولتاژ 3 تا 12 ولت نیاز دارند بنابراین ولتاژ 5 ولت را به پین Vcc2 آیسی L293D وصل میکنیم.
در مرحله بعد، باید ولتاژ 5 ولت منطقی را به مدار L293D بزنیم. برای انجام این کار، میبایست پین VSS یا Vcc1 آیسی را به پین خروجی 5 ولت آردوینو متصل کنیم.
اینک نوبت به اتصال ورودی آیسی و وصل کردن پینهای ENA، IN1، IN2، IN3، IN4 و ENB آن به ترتیب به پینهای دیجیتالی 9، 8، 7، 5، 4 و 3 آردوینو رسیده است. توجه داشته باشید که PWM در پینهای خروجی 9 و 3 آردوینو به صورت پیشفرض فعال است.
در نهایت، سراغ وصل کردن یک موتور به پینهای OUT1 و OUT2 و موتور دیگر به پینهای OUT3 و OUT4 میرویم. شما میتوانید اتصالات هر کدام از موتورها که میخواهید را تغییر دهید زیرا هیچ روش مطلقاً درست یا مطلقاً اشتباهی برای این کار وجود ندارد.
وقتی طبق توضیحات، سیمکشی مدار پروژه راه اندازی موتور DC با درایور L293D و آردوینو را انجام دادید، باید چیزی شبیه تصویر زیر در اختیار داشته باشید.
کد نمونه پروژه راه اندازی موتور DC با درایور L293D و آردوینو
کد زیر به شما نشان میدهد که چگونه سرعت و مسیر چرخش موتور DC را با آیسی L293D کنترل کنید. این چند خط کد میتوانند نمونه مناسبی برای پروژههای مشابه شما باشند.
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
// This function lets you control spinning direction of motors
void directionControl() {
// Set motors to maximum speed
// For PWM maximum possible values are 0 to 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Turn on motor A & B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// This function lets you control speed of the motors
void speedControl() {
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accelerate from zero to maximum speed
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
توضیح کد پروژه راه اندازی موتور DC با درایور L293D و آردوینو
کدهای نوشته شده در آردوینو ساده هستند و برای استفاده از آنها نیازی به کتابخانه نخواهد بود. این کدها با بیان اینکه کدام پینهای آردوینو به کدام پینهای آیسی L293D وصل شده، آغاز شدهاند.
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
در قسمت Setup، همه پینهای کنترل موتور (اعم از پینهای کنترل مسیر و پینهای کنترل سرعت) عنوان خروجی دیجیتال را دریافت کردهاند. ضمن اینکه همه پینهای کنترل مسیر نیز به وضعیت LOW درآمدهاند تا موتورها خاموش شوند.
void setup() {
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
در قسمت Loop، دو تابع تعریف شده را با فاصله زمانی 1 ثانیه ایجاد کردهایم.
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
این تابعها عبارتند از:
- directionControl(): این تابع به موتورها فرمان میدهد تا با بیشترین سرعت ممکن به مدت 2 ثانیه به سمت جلو بروند. سپس به مدت 2 ثانیه مسیر حرکت موتور را برعکس میکند. در نهایت موتورها خاموش خواهند شد.
void directionControl() {
// Set motors to maximum speed
// For PWM maximum possible values are 0 to 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Turn on motor A & B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
- speedControl(): این تابع با تولید سیگنال PWM توسط تابع analogWire()، سرعت هر دو موتور را از 0 به حداکثر مقدار ممکن میرساند. سپس سرعت آنها را به 0 کاهش خواهد داد و در پایان موتورها را خاموش خواهد کرد.
void speedControl() {
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accelerate from zero to maximum speed
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
سلام..
خسته نباشید..من تازه، کار با آردینو رو شروع کردمو اولین تجربه خودم رو با دوعدد موتور dcطبق برنامه شما مدار رو بستم و تستش کردم..خوشبختانه همانگونه که گفته بودید و در تشریح برنامه ذکر کرده بودین مدار بدون هیچ مشکلی کار میکرد..ممنون و سپاس فراوان از زحمات شما..برای برنامه های کار بردی که مورد نیازم هست چگونه میتونم با شما در ارتباط باشم؟در مجموع ممنونم
سلام
وقت بخیر
خیلی خوشحالیم که تونستید با مقاله آموزشی ما یکی از اولین پروژههای آردوینو خودتون رو به انجام برسونید.
شما میتونید برای اینکه با ما در ارتباط باشید، توی یکی از شبکههای اجتماعی واتساپ، تلگرام و ایتا در ارتباط باشید.
با تشکر از همراهی شما