آموزش آردوینو

آموزش کنترل سرعت موتور DC با پتانسیومتر و آردوینو

سلام. آموزش کامل کنترل سرعت موتور DC با Arduino و پتانسیومتر و PWM (آموزش آردوینو #5) را آماده کردیم.

چگونه سرعت موتور DC را با آردوینو کنترل کنیم ؟

موتور DC پرکاربردترین موتور در پروژه های روباتیک و الکترونیک است. برای کنترل سرعت موتور DC روشهای مختلفی داریم، ما در این آموزش آردوینو ما با استفاده از PWM سرعت موتور DC را کنترل می کنیم. در این پروژه قادر خواهیم بود سرعت موتور DC را با پتانسیومتر کنترل کنیم و می توانیم با چرخاندن دستگیره پتانسیومتر سرعت را تنظیم کنیم.

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

قسمت قبل : آموزش کامل آنالوگ به دیجیتال در Arduino 

PWM چیست ؟

PWM روشی است که با استفاده از آن می توانیم ولتاژ یا توان را کنترل کنیم. برای درک ساده تر آن ، اگر از 5 ولت برای تغذیه موتور استفاده کنید موتور با سرعت میچرخد، حالا ما ولتاژ را 2 ولت کم کنیم ، یعنی موتور با تغذیه 3 ولت با سرعت کمتری میچرخد. اما چگونه با آردوینو این سرعت را کم کنیم ؟ اینکار با استفاده از PWM انجام میشود. پیشنهاد میکنم مقاله PWM چیست را بخوانید.

ما آموزش تغییر سرعت موتور DC با آردوینو را توسط یک پروژه به طور کامل شرح میدهیم.

پروژه کنترل سرعت موتور DC با پتانسیومتر

شماتیک مدار این پروژه را در تصویر زیر میبینید.

پروژه کنترل سرعت موتور DC با پتانسیومتر

قطعات مورد نیاز این پروژه

  1. برد آردوینو Uno
  2. موتور DC
  3. ترانزیستور 2N2222
  4. پتانسیومتر 100 کیلو اهم
  5. خازن 0.1uf
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

توضیحات کد آردوینو کنترل سرعت موتور

بحث اصلی ما در نوشتن کد برای کنترل سرعت موتور است. در اینجا ما به صورت خط به خط این مسئله را توضیح میدهیم.

در قسمت اول کد ما ابتدا پین PWM که به ترانزیستور متصل میشود را تعریف میکنیم. به شماتیک مدار در بالا دقت کنید. پین PWM را به عنوان 12 در نظر گرفته ایم و به ترانزیستور متصل شده است. و خروجی ترانزیستور به موتور DC متصل شده است.

مقدار PWM با استفاده از پتانسیومتر تعیین میشود. بنابراین باید یک پین را نیز برای پتانسیومتر در نظر بگیریم که در اینجا ما از پین آنالوگ A0 استفاده کرده ایم.

int pwmPin = 12;
int pot = A0;
int c1 = 0;  
int c2 = 0;  

خب ممکن است برایتان سوال پیش بیاید که c1 و c2 چه هستند ؟ C1 و C2 دو متغیر هستند که آن ها را تعریف کردیم کمی بعد به آن ها به طور کامل میپردازیم.

مطلب پیشنهادی:  ساخت فاصله سنج التراسونیک بی سیم با STM32 و آردوینو

حالا باید نوع پین های PWM و pot را تنظیم کنیم. در اینجا PWM به عنوان خروجی و pot به عنوان ورودی تنظیم میشود.

void setup()  {
  pinMode(pwmPin, OUTPUT); // تنظیم پین PWM به عنوان خروجی
  pinMode(pot, INPUT);  // تنظیم پین pot به عنوان ورودی
}

قسمت اصلی کد

اکنون ، در void loop() ، ما با استفاده از analogRead مقدار آنالوگ را از A0 را می خوانیم و آن را در متغیر c2 ذخیره می کنیم. سپس مقدار c2 را از 1024 کم میکنیم و نتیجه را در c1 ذخیره میکنیم.

دلیل کم کردن مقدار آنالوگ از 1024 این است که آنالوگ به دیجیتال برد Arduino Uno با دقت 10 بیتی است (بنابراین مقدار آن بین 0 تا 1024 است). به این معنی که ولتاژهای ورودی بین 0 تا 5 ولت را به یک عدد صحیح بین 0 تا 1024 تبدیل میکند. بنابراین اگر مقدار ورودی anlogValue را در 5/1024 ضرب کنیم ، مقدار دیجیتال ولتاژ ورودی را بدست می آوریم. در قسمت قبلی به طور کامل آنالوگ به دیجیتال را در آردوینو آموزش دادیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
void loop()
{
  c2= analogRead(pot); // دستور خواندن مقدار آنالوگ پتانسیومتر
  c1= 1024-c2; // کم کردن مقدار پتانسیومتر از 1024          
  digitalWrite(pwmPin, HIGH); // روشن کردن پین pwm
  delayMicroseconds(c1);   // به مدت c1 روشن بماند
  digitalWrite(pwmPin, LOW);  // خاموش کردن پین pwm
  delayMicroseconds(c2);   // به مدت c2 خاموش بماند
}

متوجه شدید ؟ دوباره به این تصویر دقت کنید :

Duty Cycle (چرخه وظیفه) PWM اگر بخواهیم کد نوشته شده و این تصویر را با هم مرتبط کنیم. مقدار C2 میشود زمان Off Time و مقدار C1 میشود زمان On time. و به همین ترتیب با استفاده از PWM  و آنالوگ به دیجیتال سرعت موتور DC را کنترل میکنیم. یعنی با استفاده از پتانسیومتر مقدار Duty Cycle یا همان چرخه وظیفه را تغییر میدهیم.

کد کامل پروژه

int pwmPin = 12; 
int pot = A0; 
int c1 = 0;   
int c2 = 0;   
void setup() 
{
  pinMode(pwmPin, OUTPUT); 
  pinMode(pot, INPUT);  
}
void loop()
{
  c2= analogRead(pot); 
  c1= 1024-c2;         
  digitalWrite(pwmPin, HIGH); 
  delayMicroseconds(c1);   
  digitalWrite(pwmPin, LOW);  
  delayMicroseconds(c2);  
}

در قسمت بعدی به طور کامل با اتصال برد آردوینو به ال سی دی کاراکتری آشنا میشویم.

قسمت بعد : آموزش جامع اتصال LCD کاراکتری به برد آردوینو و ایجاد متن متحرک

4.7 (12 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

برای ارسال تصاویر از انجمن سایت استفاده کنید.

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

3 نظر

  1. سلام وقت بخیر
    ممنون بابت توضیحاتتون
    من میخوام دور موتور فن رادیاتور خودرو رو با خروجی گرفتن از سنسور حرارتی متصل به خودرو (مستقل از فشنگی آب ) با یا بدون استفاده از آردوینو به صورت سینوسی (نه دو دور یا چند دور) کنترل کنم
    ممنون میشم.راهنمایی بفرمایید

  2. با سلام. ترانزیستور در این مدار در تمام مدت در ناحیه اشباع قرار دارد یا با توجه به مقدار ولتاژ اعمالی به بیس به ناحیه فعال هم می رود؟

  3. سلام خسته نباشد
    میشه درباره علت انتخاب این نوع خازن و ترانزیستور در این پروژه توضیح دهید
    مرسی ممنون

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *