در این بخش از آموزش و چند جلسه بعدی قصد داریم نحوه راه اندازی چند موتور پر کاربرد را توسط برد آردوینو Uno به شما آموزش دهیم.در اولین جلسه راه اندازی موتور DC با آردوینو را یاد میگیریم.
به طور کلی ما سه نوع موتور پر کاربرد داریم :
- موتور DC
- موتور سرور
- موتور پله ای (استپر)
موتور DC (جریان مستقیم) معروف ترین نوع موتور است. موتورهای DC معمولا دو سیم دارند، یک سیم منفی و یک سیم مثبت. اگر این دو سیم را مستقیما به باتری وصل نمایید، موتور می چرخد و اگر جهت سیم ها را عوض کنید موتور برعکس می چرخد.
نکته : هرگز موتور را به صورت مستقیم به برد آردوینو متصل نکنید. این عمل ممکن است باعث آسیب دیدن برد شود. حتما باید از یک آیسی درایور یا ترانزیستور به این منظور استفاده نمایید. اگر اطلاعات در مورد برنامه نویسی بردهای آردوینو ندارید آموزش های آردوینو موجود در سایت را دنبال کنید.
ادامه آموزش را به سه بخش تقسیم می کنیم :
- راه اندازی اولیه موتور
- کنترل سرعت موتور
- کنترل جهت چرخش موتور
قطعات و تجهیزات لازم برای راه اندازی موتور DC با آردوینو:
- یک عدد برد آردوینو UNO
- یک عدد ترانزیستور PN2222
- یک عدد موتور DC 6V
- یک عدد دیود 1N4001
- یک عدد مقاومت 270 اهم
مراحل :
مطابق شکل قطعات را به برد آردوینو متصل نمایید :
نکات مهم :
به موارد زیر در اجرای این پروژه دقت نمایید :
- به اتصال صحیح پایه های ترانزیستور دقت نمایید. مطابق شکل جهت تخت ترانزیستور باید سمت برد آردوینو باشد.
- مطابق شکل جهت کاتد دیود (خط رنگی روی دیود) باید سمت تغذیه+5V باشد.
کد راه اندازی اولیه موتور :
int motorPin = 3; void setup() { } void loop() { digitalWrite(motorPin, HIGH); }
نکات برنامه :
ترانزیستور مانند یک کلید عمل می کند و تغذیه را به موتور اعمال می کند. پایه شماره 3 آردوینو هدایت ترانزیستور را تنظیم می کند (وصل یا قطع بودن) که با نام ‘motorPin’ در برنامه تعریف شده است.
نتایج :
با یک شدن پایه شماره 3 آردوینو، موتو با حداکثر سرعت شروع به چرخش می کند.
مدار کنترل سرعت موتور :
شکل زیر نحوه اتصال موتور به برد آردوینو را نشان می دهد :
کد آردوینو :
int motorPin = 9; void setup() { pinMode(motorPin, OUTPUT); Serial.begin(9600); while (! Serial); Serial.println("Speed 0 to 255"); } void loop() { if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed <= 255) { analogWrite(motorPin, speed); } } }
نکات برنامه :
همان طور که پیش تر توضیح داده شد، ترانزیستور مانند یک کلید عمل می کند و تغذیه را به موتور اعمال می کند. پایه شماره 3 آردوینو هدایت ترانزیستور را تنظیم می کند (وصل یا قطع بودن) که با نام ‘motorPin’ در برنامه تعریف شده است.
زمانی که برنامه آغاز می شود، برنامه در پنجره Serial Monitor از شما مقداری را برای تنظیم موتور می گیرد که این مقدار باید بین 0 تا 255 باشد.
در تابع loop ، توسط دستور ‘Serial.parseInt’ مقدار وارد شده در پنجره Serial Monitor خوانده شده و به متغیر نوع int تبدیل می شود. شما می توانید هر عددی را در اینجا وارد نمایید. دستور if در سطر بعدی مقدار خوانده شده را در صورتی که عددی بین 0 تا 255 باشد به صورت آنالوگ روی پایه مربوطه میکروکنترلر مینویسد.
نتایج :
موتور DC متناسب با مقدار سرعت وارد شده (متناسب با اعداد بین 0 تا 255) در پنجره Serial Monitor می چرخد.
کنترل جهت چرخش موتور :
به منظور چرخش جهت موتور DC بدون عوض کردن سیم های متصل به پایه ها از مداری به نام H-Bridge استفاده می شود. توسط مدار H-Bridge می توانید جهت جریان را عوض نمایید. این مدار در کاربردهای مختلفی استفاده می شود که یکی از پرکاربردترین آنها کنترل موتور در ربات ها می باشد. دلیل نام گذاری آن نیز اتصال 4 عدد ترانزیستور به شکل حرف H انگلیسی می باشد.
یکی از آی سی های معروف برای این مدار L298 می باشد. این آی سی می تواند سرعت و جهت حرکت موتور DC و استپر را کنترل نماید. همچنین قابلیت کنترل دو موتور به صورت همزمان نیز وجود دارد اگر حداکثر جریان لازم برای هر موتور 2A باشد. اگرچه در این جریان ها نیاز به استفاده از هیت سینک نیز وجود دارد.
قطعات و تجهیزات لازم :
- یک عدد برد آردوینو UNO
- یک عدد آی سی L298
- یک عدد موتور DC
- یک عدد برد بورد
- 10 عدد سیم جامپر
مراحل انجام پروژه :
مطابق شکل زیر موتور DC را به برد آردوینو متصل نمایید :
شکل بالا نحوه استفاده از آی سیL298 را به منظور کنترل دو موتور نشان می دهد. برای هر موتور 3 پایه وجود دارد که به ترتیب عبارت اند از ورودی 1 (IN1)، ورودی 2 (IN2)، فعال ساز موتور 1 (EN1)، ورودی 3 (Input3)، ورودی 4 (Input4) و فعال ساز موتور دوم (Enable2).
از آنجایی که در این مثال میخواهیم تنها یک موتور را کنترل نماییم، پایه IN1 را به پایه 5 آردوینو، پایه IN2 را به پایه 7 آردوینو و پایه Enable1 را به پایه 6 آردوینو متصل می کنیم. پایه های 5 و 7 دیجیتال هستند در حالی که پایه 6 نیاز به سیگنال مدولاسیون عرض پالس (PWM) برای کنترل سرعت نیاز دارد.
جدول زیر نحوه چرخش موتور را متناسب با سیگنال اعمال شده به پایه های IN1 و IN2 نشان می دهد :
ورودی IN1 | ورودی IN1 | چرخش موتور |
0 | 0 | ترمز |
1 | 0 | چرخش جلو |
0 | 1 | چرخش عقب |
1 | 1 | ترمز |
پایه IN1 آی سی L298 به پایه 8 آردوینو متصل شده است در حالی که پایه IN2 به پایه 9 آردوینو متصل شده است. این دو پایه دیجیتال آردوینو جهت چرخش موتور را کنترل می کنند. پایه ENA آی سی به پایه PWM شماره 2 آردوینو متصل شده است. این پایه سرعت موتور را کنترل می کند.
به منظور تنظیم مقادیر پایه های 8 و 9 آردوینو، از تابع digitalWrite() استفاده می کنیم و برای تنظیم پایه 2 از تابع analogWrite() استفاده می کنیم.
مراحل اجرای پروژه :
- ولتاژ +5V و زمین آی سی را به تغذیه و زمین برد متصل نمایید.
- موتور را به پایه های 2 و 3 آی سی متصل نمایید.
- پایه IN1 آی سی را به پایه 8 آردوینو وصل نمایید.
- پایه IN2 آی سی را به پایه 9 آردوینو وصل نمایید.
- پایه EN1 آی سی را به پایه 2 آردوینو وصل نمایید.
- پایه SENS A آی سی را به زمین متصل نمایید.
- با استفاده از کابل USB برد آردوینو را به کامپیوتر خود وصل کرده و با استفاده از نرم افزار آردوینو کد را بر روی برد آپلود نمایید.
- از طریق کابل USB یا تغذیه جداگانه برد آردوینو را روشن نمایید.
کد آردوینو :
const int pwm = 2 ; //initializing pin 2 as pwm const int in_1 = 8 ; const int in_2 = 9 ; //For providing logic to L298 IC to choose the direction of the DC motor
void setup() { pinMode(pwm,OUTPUT) ; //we have to set PWM pin as output pinMode(in_1,OUTPUT) ; //Logic pins are also set as output pinMode(in_2,OUTPUT) ; }
void loop() { //For Clock wise motion , in_1 = High , in_2 = Low digitalWrite(in_1,HIGH) ; digitalWrite(in_2,LOW) ; analogWrite(pwm,255) ; /* setting pwm of the motor to 255 we can change the speed of rotation by changing pwm input but we are only using arduino so we are using highest value to driver the motor */ //Clockwise for 3 secs delay(3000) ; //For brake digitalWrite(in_1,HIGH) ; digitalWrite(in_2,HIGH) ; delay(1000) ; //For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH digitalWrite(in_1,LOW) ; digitalWrite(in_2,HIGH) ; delay(3000) ; //For brake digitalWrite(in_1,HIGH) ; digitalWrite(in_2,HIGH) ; delay(1000) ; }
نتایج :
موتور برای مدت 3 ثانیه در جهت عقربه های ساعت (CW) می چرخد و برای 3 ثانیه در خلاف جهت عقربه های ساعت (CCW) می چرخد. در قسمت بعدی با راه اندازی سروو موتور با melec.ir همراه باشید…
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام،آيا میشود motorpin رو بجای ۹ روی یکی از انالوگ ها نوشت،مثلا تعیین پین a0 بعنوان پین-موتور؟ ایا ممکنه؟ مرسی از اموزش خوبتون.
سلام ، آقا عباس بستگی داره برد آردوینو شما مدلش چی باشه مثلا UNO یا DUE و… اگر برد شما دارای پایه های آزاد PWM باشد (حتی DAC ) میتوانید عوض کنید. محدودیتی نیست باید به مشخصات برد در سایت آردوینو نگاه کنید و ببینید از چه پایه هایی برای تابع analogWrite میتوان استفاده کرذ. مثلا برای
UNO برد آردوینو :
PWM: 3, 5, 6, 9, 10,11
سلام.ممنون برای مطالب و آموزشهای خوبتون . من 1 سوالی دارم که نحوه شماره گزاری پایه های l298 از 1 تا 15 از پاییه های کوچک شروع میشود؟؟؟؟ چون اولین پایه روی ای سی پاییه بزرگ (همون پایه هایی ک جلو تر هستن)است. و پایه های کوچک(پایه هایی ک عقبتر هستن). یا ربطی نداره و من باید بدون در نظر گرفتن اینکه پاییه بزرگ اولین پایه است و کوچک دومی . دقیق طبق عکسی که شما قرار دادین برای شماره گزاری از پاییه کوچک(عقبی) شروع به شماره گزاری و صل کردن پایه ها به اردوینو کنم؟؟؟؟ اشتباه وصل کنم ای سی خراب میشه؟؟؟ ممنون میشم رانمایی کنید
سلام، بله صد در صد مشکل ایجاد میشه برعکس بزنید. همیشه به دیتاشیت قسمت مکانیکال مراجعه کنید. در عکس زیر شماره پایه ها مشخص هستن:
پ ن : ببخشید دیر جواب میدم.
یک سوالی داشتم، اگر دو تا موتور آرمیچر رو به آردونیو وصلش کنم و هردو موتور ها همزمان فعالیت کنن؟؟آردینیو خراب نمیشه ؟؟؟ آرمیچر من ۱.۵ ولته و آردونیو من Mega2560هستش.
با تشکر از سایت خوبتون..
ولی فک کنم شکل نحوه استفاده از آی سی L298 اشتباه بارگزاری شده..
سلام
ببخشید میشه بجای ترانزیستور PN2222 از C945 استفاده کرد؟؟
سلام وقت بخیر من وقتی موتور کورلس رابا اردوینو و درایور راهاندازی میکنم سرعت موتور خیلی خیلی پایینه