کنترل سرعت موتور DC با آردوینو + فیلم

در این پروژه قصد داریم کنترل سرعت موتور DC را با آردوینو یاد بگیریم چرا که از موتور های DC در رباتیک و پروژه های الکترونیکی و صنعتی بسیار استفاده میشود.برای کنترل این نوع موتورها راه های بسیار زیادی وجود دار که ما در این پروژه از PWM آردوینو استفاده خواهیم کرد و با یک پیتانسیومتر میزان سرعت موتور را تعیین خواهیم کرد.
مطابق معمول تمامی پروژه های آردوینو در سایت ملی یونی ما ابتدا مفاهیم را را توضیح خواهیم داد و در ادامه سراغ کدنویسی و بستن قطعات خواهیم رفت.یکی از مهمترین مفاهیم موجود در میکرو کنترلر ها مفهموم PWM است که بسیار کاربردی است پس با هم این مفهموم مورد بررسی قرار میدهیم.
مدولاسیون عرض پالس (PWM=Pulse Width Modulation)
به طور خیلی ساده اگر بخواهیم از PWM صحبت کنیم بایستی بگوییم که PWM یک تکنیک است که با استفاده از آن میتوانیم ولتاژ یا پاور را کنترل کنیم.برای درک بهتر فرض کنید که 5 ولت را به موتور اعمال میکنید،موتور با سرعت بالا حرکت میکند;حال اگر این ولتاژ را به 3 ولت کاهش دهیم ، سرعت موتور نیز کاهش میابد.این مفهوم در پروژه برای کنترل ولتاژ با استفاده از PWM مورد استفاده قرار میگیرد.
در دل PWM یک مفهوم کاملا ساده نهفته وجود دارد به نام duty cycle که به صورت زیر تعریف میشود.
% Duty cycle = (TON/(TON + TOFF)) *100
Where, TON = HIGH time of the square wave
TOFF = LOW time of square wave

حال به عکس بالا توجه کنید ، تا زمانی که کلید در یک دوره زمانی بسته باشد ، موتور در این مدت به طور مداوم روشن خواهد شد. حال اگر کلید برای 8 میلی ثانیه بسته شود و 2 میلی ثانیه باز شود در یک چرخه (cycle) ده میلی ثانیه ای در 8 میلی ثانیه روشن خواهد بود.حال اگر طبق فرمول بالا محاسبه کنید Ton=8 و Toff=2 در نتیجه یک duty cycle=80% خواهیم داشت یعنی در واقع 80 درصد انرژی باتری در آن دوره ی زمانی به موتور داده میشود.( چشم انسان توانایی دیدن اینکه 8 میلی ثانیه روشن و 2 میلی ثانیه خاموشی موتور را ندارد و چیزی که میبیند و درک میکند این است که موتور با 80% سرعت خود میچرخد.
در مابقی موارد شکل بالا نیز به همین صورت میتوان تحلیل و استفاده کرد.حال که با این مفاهیم آشنا شدیم سراغ راه اندازی پروژه میرویم.
وسایل و قطعات مورد نیاز برای کنترل موتور DC
آردوینو یونو Arduino UNO | ![]() | خرید از فروشگاه ملی یونی |
موتور DC | خرید از فروشگاه ملی یونی | |
ترانزیستور 2N2222 | خرید از فروشگاه ملی یونی | |
پتانسیومتر 100 کیلو اهم | خرید از فروشگاه ملی یونی | |
خازن 0.1 میکروفاراد | خرید از فروشگاه ملی یونی | |
برد بورد | خرید از فروشگاه ملی یونی | |
سیم های اتصال | خرید از فروشگاه ملی یونی |
دیاگرام مداری و نحوه اتصال قطعات

کدنویسی پروژه با توضیحات
در قطعه کد زیر ما ابتدا تمامی متغیر ها را به همراه نوع آن مشخص میکنیم. c1 و c2 و پین آنالوگ A0 برای خروجی پتانسیومتر و پین 12 که PWM است.
int pwmPin = 12;
int pot = A0;
int c1 = 0;
int c2 = 0;
حال ، در کد زیر ، در تابع ()void setup پین A0 را به عنوان ورودی و پین 12 را خروجی در نظر میگیریم.
void setup() {
pinMode(pwmPin, OUTPUT); // پین 12 به عنوان خروجی
pinMode(pot, INPUT); // پین آنالوگ ورودی
}
حال در تابع ()void loop مقدار A0 را با استفاده از دستور analogRead میخوانیم در متغیر c2 ذخیره میکنیم.سپس 1024 را از c2 کم کرده و در متغیر c1 ذخیره میکنیم.حال پین 12 را HIGH میکنیم(ولتاژ 5 ولت به آن اعمال میکیم).سپس یک تاخیر که مقدار آن را c1 مشخص میکند را اعمال کرده و سپس پین 12 را صفر میکنیم و یک تاخیر که این بار c2 مقدار آن را مشخص میکند را اعمال میکنیم.
void loop()
{
c2= analogRead(pot);
c1= 1024-c2;
digitalWrite(pwmPin, HIGH); // پین 12 را 5 ولت قرار میدهیم
delayMicroseconds(c1); // به اندازه متغیر سی1 میکرو ثانیه تاخیر ایجاد میکنیم
digitalWrite(pwmPin, LOW); // پین 12 را صفر میکنیم
delayMicroseconds(c2); // به اندازه متغیر سی2 میکرو ثانیه تاخیر ایجاد میکنیم
}
نحوه ی کار پروژه کنترل سرعت موتور DC

ما در این مدار از از یک پتانسیومتر (مقاومت متغیر) 100 کیلو اهمی برای کنترل سرعت موتور DC استفاده کرده ایم که به پایه ی آنالوگ A0 آردوینو متصل شده است و موتور DC نیز به پایه ی شماره 12 آردوینو که یک پایه ی PWM است متصل میکنیم.نحوه ی کار آن بسیار ساده است.مقدار ولتاژ آنالوگ از پایه ی A0 خوانده میشود.و این ولتاژ در پتانسیومتر قابل تغییر است.با کم و زیاد کردن پتانسیومتر ، ولتاژ نیز تغییر کرده و سرعت موتور نیز تغییر میکند و در واقع ما با پتانسیومتر پهنای پالس را کم و زیاد میکنیم و طبق مفهوم PWM و duty cycle سرعت موتور DC را کنترل میکنیم.
کدنویسی کامل پروژه کنترل سرعت موتور DC
int pwmPin = 12; // assigns pin 12 to variable pwm
int pot = A0; // assigns analog input A0 to variable pot
int c1 = 0; // declares variable c1
int c2 = 0; // declares variable c2
void setup() // setup loop
{
pinMode(pwmPin, OUTPUT);
pinMode(pot, INPUT);
}
void loop()
{
c2= analogRead(pot);
c1= 1024-c2; // subtracts c2 from 1000 ans saves the result in c1
digitalWrite(pwmPin, HIGH);
delayMicroseconds(c1);
digitalWrite(pwmPin, LOW);
delayMicroseconds(c2);
}
فیلم از نحوه ی کارکرد پروژه کنترل سرعت موتور DC

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