⚙️ موتور DC (DC Motor)
| اسم انگلیسی | DC Motor |
|---|---|
| در ووکوی (Wokwi) | نسخهی آمادهای سراغ نداریم |
| دسته | ⚙️ موتور و حرکت |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
موتور DC (DC Motor) سادهترین موتور الکتریکی است: دو سیم دارد، با ولتاژ میچرخد و با جابهجا شدن قطبها جهتش برعکس میشود. پنکهی کوچک، چرخ ماشین اسباببازی و پمپ آکواریوم همه موتور DC دارند. کنار آردوینو، با یک ترانزیستور و PWM سرعتش را کنترل میکنی.
موتور DC در ووکوی (Wokwi)
تا جایی که میدانیم ووکوی نسخهی آمادهی این قطعه را ندارد؛ باتری هم ندارد و تغذیهی همهچیز از پایههای 5V و 3.3V برد میآید. برای تمرین همین کد در ووکوی، یک wokwi-led با مقاومت ۲۲۰ اهم روی پین ۹ و یک wokwi-potentiometer روی A0 بگذار: هرچه PWM بیشتر، نور بیشتر؛ همان چیزی که موتور به شکل دور نشان میدهد.
مدار کامل با موتور، ترانزیستور، دیود و جاباتری در تینکرکد فارسی هم در حالت ساده (2D) و هم در حالت آردوینو (3D) رایگان شبیهسازی میشود. موتور آنجا دو پایهی A و B دارد؛ مثال آمادهی موتور با ترانزیستور را باز کن و دور موتور را زنده ببین.
سیمکشی با آردوینو
آردوینو فقط فرمان میدهد و جریان موتور از جاباتری چهارتایی قلمی (۶ ولت) میآید. ترانزیستور NPN مثل یک شیر برقی سمت منفی موتور را به زمین وصل میکند:
| پایهی قطعه | وصل به |
|---|---|
| موتور، سیم A | مثبت جاباتری ۶ ولت |
| موتور، سیم B | کلکتور ترانزیستور NPN (برای موتور خیلی کوچک 2N2222، برای پرمصرفتر TIP120) |
| امیتر ترانزیستور | GND (مشترک با منفی باتری) |
| بیس ترانزیستور | پین 9 از راه مقاومت ۱ کیلواهم |
| دیود 1N4007 | موازی با موتور؛ نوار دیود سمت مثبت باتری |
| پتانسیومتر | دو سر به 5V و GND، پایهی وسط به A0 |
زمین باتری و زمین آردوینو باید به هم وصل باشند؛ بدون زمین مشترک، ولتاژ بیس مرجعی ندارد و موتور تکان نمیخورد. چرایی دیود را در بخش «دیود هرزگرد» از ۱۵ مدار پایهی الکترونیک توضیح دادهایم.
کد نمونه
پتانسیومتر سرعت را تعیین میکند، ولی موتور زیر یک حداقل PWM فقط وزوز میکند و نمیچرخد. این کد آن ناحیهی بیفایده را حذف میکند:
// DC motor speed from a potentiometer, with a minimum start duty.
// Wiring: pin 9 -> 1k -> NPN base; motor between battery + and collector;
// emitter -> GND; flyback diode across the motor; pot wiper -> A0
const int MOTOR_PIN = 9; // PWM pin
const int POT_PIN = A0;
const int MIN_DUTY = 70; // below this the motor only hums
void setup() {
pinMode(MOTOR_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int pot = analogRead(POT_PIN); // 0..1023
int duty = 0;
if (pot > 50) { // bottom of the knob = stop
duty = map(pot, 50, 1023, MIN_DUTY, 255);
}
analogWrite(MOTOR_PIN, duty);
Serial.print("duty:");
Serial.println(duty);
delay(50);
}
عدد MIN_DUTY به موتور و باتریات بستگی دارد. با سریال مانیتور پیدایش کن: کمترین عددی که موتور با آن از حالت ایستاده راه میافتد. برای فهم درصد PWM و ولتاژ میانگین، ماشینحساب PWM را ببین.
اشتباههای رایج
- موتور مستقیم روی پین: پایهی آردوینو برای جریان موتور ساخته نشده و ممکن است برای همیشه خراب شود.
- فراموش کردن دیود: موتور یک سیمپیچ است و موقع قطع شدن ولتاژ برگشتی بزرگی میسازد که ترانزیستور را میسوزاند.
- زمین مشترک نگذاشتن: آردوینو و باتری موتور دو مدار جدا میشوند و ترانزیستور هیچوقت روشن نمیشود.
- تغذیهی موتور از 5V آردوینو با USB: جریان لحظهی شروع ولتاژ را میاندازد و برد مدام ریست میشود.
آموزشهای مرتبط
- ترانزیستور NPN، کلیدی که موتور را روشن میکند
- درایور L293D، وقتی جهت چرخش را هم با برنامه میخواهی
- درس مدار با ووکوی، جلسهی موتور DC و ترانزیستور
- گلخانه هوشمند با ESP32، با فن و آبیاری خودکار
سؤالهای رایج
ووکوی موتور DC دارد؟
تا جایی که میدانیم ووکوی قطعهی آمادهی موتور DC ندارد. برای تمرین کد PWM یک LED جای موتور بگذار تا شدت نور نشاندهندهی سرعت باشد. خود موتور با ترانزیستور، دیود و باتری در تینکرکد فارسی رایگان شبیهسازی میشود.
چرا موتور با PWM کم نمیچرخد و فقط وزوز میکند؟
موتور برای غلبه بر اصطکاک یک حداقل ولتاژ لازم دارد. زیر آن، جریان میکشد و گرم میشود ولی نمیچرخد. در کد یک حداقل PWM (مثلاً ۷۰ از ۲۵۵) بگذار و زیر آن موتور را کامل خاموش کن.
چرا نمیشود موتور را مستقیم به پین آردوینو وصل کرد؟
موتور کوچک هم معمولاً بیش از ۱۰۰ میلیآمپر میکشد و در لحظهی شروع چند برابر؛ پایهی آردوینو حدود ۴۰ میلیآمپر تحمل دارد. ترانزیستور یا درایور، جریان را از باتری میدهد و آردوینو فقط فرمان میدهد.