موتورها و ترانزیستورها از جمله مهمترین و رایجترین قطعات الکترونیکی هستند. حال با توجه به کاربرد این قطعات، در این پروژه میخواهیم نحوه راه اندازی موتور DC با آردوینو و ترانزیستور را به شما آموزش دهیم؛ پس با بلاگ بهنام رباتیک همراه باشید.
زمانی که یک دکمه فشاری به پین دیجیتالی شماره 2 آردوینو وصل میشود، برد هوشمند ترانزیستور را با مدولاسیون پهنای باند (PWM) کنترل میکند تا در ادامه سرعت موتور افزایش و در پایان کاهش یابد.
آشنایی با ترانزیستورها قبل از راه اندازی موتور DC با آردوینو
آردوینو تنها قادرست تا در پینهای دیجیتالی خود 40 میلیآمپر جریان و 5 ولت ولتاژ دریافت کند. این در حالی است که اکثر موتورها برای فعالیت به جریان یا ولتاژ بیشتری نیاز دارند. در این شرایط، یک ترانزیستور میتواند به عنوان دکمه دیجیتالی فعالیت کند تا به آردوینو بگوید بارهای دریافت شده را با جریان و ولتاژ شدیدتری کنترل نماید. ترانزیستور استفاده شده در این پروژه که TIP120 نام دارد، میتواند 60 ولت و 5 آمپر (به ترتیب) ولتاژ و جریان را تحمل کند و تکمیلکننده مدار طراحی شده در این پروژه باشد.
زمانی که یک ترانزیستور از PWM بهره میبرد، در واقع شبیه مواقعی است که به یک LED پالس وارد میشود. این یعنی هر چه مقدار PWM بیشتر باشد، سرعت چرخش موتور نیز افزایش خواهد یافت و هر چه مقدار PWM کاهش یابد، سرعت چرخش موتور هم افت خواهد کرد.
ترانزیستورها سه پین دارند. در ترانزیستورهای BJT (مانند نمونه استفاده شده در پروژه راه اندازی موتور DC با آردوینو)، پینها عبارتند از پایه، کلکتور و امیتر. کمترین مقدار جریان در پین پایه، مدار بین پینهای کلکتور و امیتر را میبندد.
ترانزیستورهای BJT دو نوع دارند؛ NPN و PNP. ترانزیستور TIP120 به کار رفته در این پروژه از نوع NPN میباشد؛ این یعنی پین کلکتور به موتور و پین امیتر به اتصال به زمین (GND) وصل خواهد شد.
آشنایی با موتورها پیش از راه اندازی موتور DC با آردوینو
موتورها طی فرآیندی به نام القاء کار میکنند. این بدان معناست که وقتی شما مقدار انرژی الکتریکی را از طریق سیم وارد میکنید، میدان مغناطیسی ایجاد میشود. در این میان، چنانچه جریان افزایش یابد، سیمپیچ میدان مغناطیسی قویتری به وجود میآورد.
در یک موتور DC، سیمپیچ در اطراف شفت موتور قرار دارد تا میدان مغناطیسی ایجاد شده با آهنرباهای درون بدنه موتور کشیده و دفع شود.
زمانی که یک موتور از حرکت بازمیایستد، این احتمال وجود دارد که جریان کمی ایجاد شود زیرا در این شرایط شفت موتور همچنان در حال چرخش است. در اینجا، یک دیود قرار گرفته به صورت موازی با پایههای موتور اجازه نخواهد داد تا انرژی ایجاد شده به مدار آسیب وارد کند.
وقتی موتورها فعالیت میکنند، بیشترین جریان را میکشند. جریان توقف به مقدار جریانی میگویند که یک موتور به هنگام وادار شدن به توقف، دریافت میکند. در مواقعی که موتور در حال فعالیت است، جریان بسیار ناچیزی را میکشد.
مقدار ولتاژ مورد نیاز یک موتور نشاندهنده حداکثر ولتاژ مربوط به آن میباشد. توجه داشته باشید که اعمال ولتاژ بیشتر یا کمتر از مقدار گفته شده، عمر موتور را کاهش خواهد داد. در این بین، چنانچه ولتاژ کمتری از مقدار توصیه شده وارد نمایید، سرعت چرخش موتور کمتر خواهد شد.
معمولاً برای اینکه یک موتور بتواند فعالیت کند، به 50 درصد مقدار ولتاژ توصیه شده نیاز خواهد داشت. بر این اساس، اگر از این مقدار کمتر ولتاژ وارد کنید، شاید موتور اصلاً روشن نشود.
لوازم مورد نیاز برای پروژه راه اندازی موتور DC با آردوینو و ترانزیستور
سیمکشی مدار پروژه راه اندازی موتور DC با آردوینو و ترانزیستور
ابتدا سیمها را به پینهای قدرت و اتصال به زمین (GND) وصل کنید. در تصویری که میبینید، سیم قرمز و سیم مشکی به ترتیب مخصوص قدرت و اتصال به زمین هستند. بهتر است این دو سیم را به صورت عمودی در کنار برد بورد وصل نمایید تا بدین ترتیب ولتاژ 5 ولت به برد اعمال و اتصال به زمین برقرار شود.
اینک دکمه فشاری یا پوش باتن را تقریباً در قسمت مرکزی برد بورد بگذارید. یک سیم پین شماره 2 دیجیتالی آردوینو را به یکی از پایههای دکمه وصل میکند. همان پایه از طریق مقاومت 10 کیلو اهم به زمین وصل میشود. دیگر پایه باقی مانده دکمه میبایست به منبع تغذیه 5 ولت متصل گردد.
پین شماره 9 آردوینو را به پین پایه ترانزیستور TIP120 بزنید. اگر ترانزیستور را طوری بگیرید که قسمت فلزی آن پشت به شما باشد، پین سمت چپی پایه خواهد بود. در واقع همین پایه باز یا بسته بودن مدار را کنترل میکند. در ادامه پین کلکتور ترانزیستور نیز به یکی از پایههای موتور و پین امیتر به اتصال به زمین (GND) وصل خواهد شد.
دیگر سمت موتور به قطب مثبت باتری 9 ولت وصل میشود. در نهایت قطب منفی باتری را به پایه GND آردوینو بزنید.
شماتیک مدار پروژه راه اندازی موتور DC با آردوینو و ترانزیستور
نمونه کد پروژه راه اندازی موتور DC با آردوینو و ترانزیستور
در ادامه نمونه کد برای کنترل یک موتور DC با ترانزیستور آورده شده است.
/*
Motor Control with a Transistor
This example shows you how to control a motor's using a transistor.
When a pushbutton on pin 2 is pressed, the Arduino will control a transistor
via PWM, which will slowly ramp up the motor's speed, then slow it down.
The circuit :
* momentary switch with one end connected to 5V, the other end connected
to GND through a 10-kilohm resistor, and digital pin 2.
* TIP120 tranistor, with the Base connected to digital pin 9, the Emitter to ground,
and the Collector to one lead from a 9V DC motor
* a 9V battery, with the ground connected to the Arduino's ground, and the power
connected to the motor
* 1N4001 diode across the motor's leads, with the striped side connected to the 9V
The Arduino can only provide 40mA at 5V on its pins. Most motors require
more current and/or voltage to overcome inertia and run. A transistor
can act as a digital switch, enabling the Arduino to control loads with
higher electrical requirements.
Created on 03 January 2013
by Scott Fitzgerald
https://docs.arduino.cc/learn/electronics/transistor-motor-control
This example code is in the public domain.
*/
// give a name to digital pin 2, which has a pushbutton attached
int pushButton = 2;
// the transistor which controls the motor will be attached to digital pin 9
int motorControl = 9;
// the setup routine runs once when you press reset:
void setup() {
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
// make the transistor's pin an output:
pinMode(motorControl, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the state of the button and check if it is pressed
if(digitalRead(pushButton) == HIGH){
// ramp up the motor speed
for(int x = 0; x <= 255; x++){
analogWrite(motorControl, x);
delay(50);
}
// ramp down the motor speed
for(int x = 255; x >= 0; x--){
analogWrite(motorControl, x);
delay(50);
}
}
delay(1); // delay in between reads for stability
}
توضیحات کد پروژه راه اندازی موتور DC با آردوینو و ترانزیستور
ابتدا باید در اینجا و برای حالت دکمه فشاری و پین کنترل موتور، متغیر تعریف کنیم.
int pushButton = 2;
int motorControl = 9;
در قسمت Setup، پینهای زیر را به ترتیب به عنوان ورودی و خروجی تنظیم کنید:
void setup() {
pinMode(pushButton, INPUT);
pinMode(motorControl, OUTPUT);
}
حال که مرحله قبل را پشت سر گذاشتهاید، به قسمت Loop بروید.
void loop() {
وضعیت دکمه فشاری را بخوانید و ببینید آیا HIGH است یا خیر. میتوان این ارزیابی را مستقیماً در دستور if() مشاهده کرد.
if(digitalRead(pushButton) == HIGH){
چنانچه دکمه را فشار دادید، میتوانید سرعت موتور را با افزایش مقدار PWM پین motorControl بیشتر کنید. وقتی سرعت موتور به بیشترین مقدار خود رسید، آن را کاهش دهید.
for(int x = 0; x <= 255; x+=5){
analogWrite(motorControl, x);
delay(50);
}
for(int x = 255; x >= 0; x-=5){
analogWrite(motorControl, x);
delay(50);
}
دستور ()if را ببندید و تأخیر ناچیزی را در آخر قسمت Loop بیفزایید.
}
delay(1);
}