
امیدوارم تا اینجا آموزشهامون حسابی به کارت اومده باشن و حسابی حال کرده باشی. حالا وقتشه که بریم سراغ یه مبحث خیلی باحال و کاربردی: راه اندازی موتور dc با l298 آردوینو با روش PWM
توی این مقاله قراره با هم قدم به قدم پیش بریم و یاد بگیریم چطور یه موتور DC رو راهاندازی کنیم. از سیمکشی و اتصالات بگیر تا نوشتن کد توی آردوینو IDE، همه چیز رو حسابی توضیح میدیم تا قشنگ دستت بیاد. هدفمون اینه که هم روشن و خاموش کردن موتور رو یاد بگیری و هم بتونی با PWM (مدولاسیون عرض پالس)، سرعتش رو هم کنترل کنی. اینجوری میتونی کلی کاربرد خفن تو پروژههات داشته باشی.
هر بخش از این آموزش شامل کد کامل و آماده است که خط به خط برات توضیح دادیم که حتی اگه تازه کار هم باشی، راحت متوجه بشی. تازه کلی عکس واضح هم برات گذاشتیم که همه چی رو چشمی ببینی و برات راحتتر باشه. در کنار اینا، نکات مهم و کاربردی رو هم بهت میگیم که هم جلوی اشتباهات رایج رو بگیره و هم پروژهات رو حسابی بهینه کنی.
آخر سر هم، با توجه به چیزایی که از این مقاله و مقالههای قبلی یاد گرفتی، چند تا پروژه باحال و چالشبرانگیز بهت پیشنهاد میدیم. این پروژهها جوری طراحی شدن که بتونی چیزایی که یاد گرفتی رو عملی کنی و مهارتهات رو توی الکترونیک و برنامهنویسی آردوینو حسابی قوی کنی. پس آماده باش که با این راهنمای کامل، پروژههای خلاقانه خودت رو با موتورهای DC و آردوینو به واقعیت تبدیل کنی!
لیست قطعات مورد نیاز راه اندازی موتور dc با l298 آردوینو با روش PWM
تفاوت L298 با L293 چیست؟
خیلی وقتا دیده میشه افراد بین دو آیسی L298 و L293 دو دل هستن. در اصل این دو آیسی برای کنترل موتورهای DC طراحی شدن، اما تفاوتهایی دارن که خیلی مهمه:

اگه موتوری سبکدار (مثلاً 6 ولت و کممصرف) استفاده میکنی، L293 جواب میده.
ولی اگه موتورهایی داری که زیر بار جریان بالاتری میکشن، L298 انتخاب بهتریه.
| ویژگی | L298 | L293 |
|---|---|---|
| جریان خروجی هر کانال | تا 2 آمپر | تا 0.6 آمپر |
| تکنولوژی ساخت | ترانزیستوری | قدیمیتر |
| افت ولتاژ داخلی (ولتاژ از دسترفته) | بیشتر | کمتر |
| توانایی درایو موتورهای سنگینتر | بله | نه خیلی |
| ولتاژ کاری موتور | تا 46 ولت | تا 36 ولت |
| دمای کارکرد بالا | ممکنه داغ شه | کمتر داغ میکنه |
آشنایی با مفهوم PWM
PWM یا “مدولاسیون عرض پالس” (Pulse Width Modulation) یک تکنیک بسیار کاربردی در الکترونیک است که به ما امکان میدهد مقدار متوسط ولتاژ یا توان ارسالی به یک دستگاه، مثل موتور DC، را با خاموش و روشن کردن سریع منبع تغذیه کنترل کنیم. این تکنیک با تغییر نسبت زمان روشن بودن سیگنال (حالت ON) به زمان خاموش بودن آن (حالت OFF) در یک دوره تناوب، که به آن **دوره کاری** (Duty Cycle) گفته میشود، کار میکند. به عبارت سادهتر، دوره کاری تعیین میکند که سیگنال PWM در چه درصدی از زمان روشن است و این درصد مستقیماً روی سرعت یا قدرت خروجی دستگاه تأثیر میگذارد.
PWM در کنترل سرعت موتور DC
برای کنترل سرعت موتور DC با استفاده از PWM، میتوانیم از سیگنالهای PWM تولیدشده توسط میکروکنترلرهایی مثل **آردوینو** استفاده کنیم. در آردوینو، تابع `analogWrite(pin, value)` برای این منظور به کار میرود. در این تابع:
– مقدار `value` میتواند بین 0 تا 255 باشد:
– **0**: موتور کاملاً خاموش است.
– **255**: موتور با حداکثر قدرت کار میکند.
– مقادیر بین 0 تا 255: سرعت موتور را بهصورت تدریجی تنظیم میکنند.

بسته به اندازه و قدرت موتور، میتوان خروجی PWM آردوینو را به بیس یک ترانزیستور یا گیت یک **ماسفت** (MOSFET) متصل کرد. این کار باعث میشود که موتور، حتی اگر بسیار پرقدرت باشد، از طریق سیگنال PWM بهصورت دقیق کنترل شود. در این حالت، آردوینو با تولید سیگنال PWM، گیت ماسفت را مرتباً خاموش و روشن میکند و به این ترتیب، موتور با سرعت دلخواه میچرخد. این روش نهتنها ساده و مؤثر است، بلکه به دلیل مصرف انرژی پایین آردوینو، برای کنترل موتورهای قوی نیز بسیار مناسب است.
پروژه کنترل موتور dc با l298 آردوینو با روش PWM
در ادامه بخش های مختلف پروژه با هم انجام میدیم تا در انتها بتونیم دور یک موتور کنترل کنیم و شما با این آموزش و خلاقیت خودتون میتونید ربات هایی مختلفی بسازید که به جهت ها و سرعت های مختلف حرکت کند.
نحوه اتصال ماژول L298N به آردوینو
برای اینکه بتونی موتورت رو به آردوینو وصل کنی، باید بدونی هر پایه چی کار میکنه

این بخش نحوه اتصال فیزیکی ماژول L298N به آردوینو Uno را مشخص میکند. اتصال صحیح پینها برای عملکرد درست موتورها ضروری است. جدول زیر اتصالات را نشان میدهد:
| پین ماژول L298N | متصل به پایه آردوینو | توضیحات |
|---|---|---|
| IN1 | 11 | کنترل جهت چرخش موتور A (ورودی اول)، سیگنال دیجیتال برای جهتدهی. |
| IN2 | 10 | کنترل جهت چرخش موتور A (ورودی دوم)، مکمل IN1 برای تغییر جهت. |
| IN3 | 5 | کنترل جهت چرخش موتور B (ورودی اول)، سیگنال جهتدهی. |
| IN4 | 6 | کنترل جهت چرخش موتور B (ورودی دوم)، مکمل IN3 برای تغییر جهت. |
| ENA (PWM) | A2 | تنظیم سرعت موتور A با استفاده از PWM، مقدار 0 تا 255. |
| ENB (PWM) | A1 | تنظیم سرعت موتور B با استفاده از PWM، مقدار 0 تا 255. |
| VCC | منبع 12V خارجی | تأمین ولتاژ اصلی برای تغذیه موتورها، باید با مشخصات موتور سازگار باشد. |
| GND | GND آردوینو | اتصال زمین مشترک برای جلوگیری از نویز و اطمینان از عملکرد صحیح. |
| 5V | 5V آردوینو (اختیاری) | تغذیه منطقی ماژول (در صورت نیاز)، معمولاً برای مدار کنترل. |
نکته مهم: پینهای A1 و A2 به صورت پیشفرض PWM پشتیبانی نمیکنند. برای استفاده از PWM، پیشنهاد میشود ENA را به پین 9 و ENB را به پین 3 تغییر دهید، زیرا این پینها در آردوینو Uno قابلیت PWM دارند.
کدنویسی راه اندازی ماژول L298N به آردوینو
تعریف پایهها
این بخش پایههای مورد استفاده را در کد تعریف میکند تا آردوینو بداند کدام پینها برای کنترل موتورها اختصاص داده شدهاند.
تنظیم پایهها
در این بخش، پایهها به عنوان خروجی تنظیم میشوند تا آردوینو بتواند سیگنالهای کنترلی را به ماژول ارسال کند.
void setup() {
pinMode(in1, OUTPUT); // تنظیم IN1 به عنوان خروجی برای جهت موتور A.
pinMode(in2, OUTPUT); // تنظیم IN2 به عنوان خروجی برای جهت موتور A.
pinMode(in3, OUTPUT); // تنظیم IN3 به عنوان خروجی برای جهت موتور B.
pinMode(in4, OUTPUT); // تنظیم IN4 به عنوان خروجی برای جهت موتور B.
pinMode(ENA, OUTPUT); // تنظیم ENA به عنوان خروجی برای سرعت موتور A.
pinMode(ENB, OUTPUT); // تنظیم ENB به عنوان خروجی برای سرعت موتور B.
}
کنترل موتورها
این بخش جهت چرخش موتورها (جلو، توقف، عقب) را بدون کنترل سرعت مدیریت میکند.
void loop() {
// چرخش به جلو: فعال کردن جهت مثبت برای هر دو موتور.
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
delay(1000); // تاخیر 1 ثانیه.
// توقف: غیرفعال کردن تمام سیگنالها.
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
delay(500); // تاخیر 0.5 ثانیه.
// چرخش به عقب: فعال کردن جهت منفی برای هر دو موتور.
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
delay(1000); // تاخیر 1 ثانیه.
}
کنترل سرعت با PWM
این بخش از PWM برای تنظیم سرعت موتورها استفاده میکند و جهت را نیز کنترل میکند.
void loop() {
// چرخش به جلو با سرعت متوسط: تنظیم سرعت و جهت مثبت.
analogWrite(ENA, 150); analogWrite(ENB, 150);
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
delay(1000); // تاخیر 1 ثانیه.
// توقف: تنظیم سرعت به صفر.
analogWrite(ENA, 0); analogWrite(ENB, 0);
delay(500); // تاخیر 0.5 ثانیه.
// چرخش به عقب با سرعت کم: تنظیم سرعت و جهت منفی.
analogWrite(ENA, 80); analogWrite(ENB, 80);
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
delay(1000); // تاخیر 1 ثانیه.
}
تابع PWM سفارشی
این تابع یکپارچهسازی کنترل سرعت و جهت را سادهتر میکند.
void ABCD(int a, int b, int c, int d) {
// تنظیم سرعت موتورها با PWM و جهت با سیگنال دیجیتال.
analogWrite(ENA, a); analogWrite(ENB, b);
digitalWrite(in1, c); digitalWrite(in2, !c); // جهت مخالف برای IN2.
digitalWrite(in3, d); digitalWrite(in4, !d); // جهت مخالف برای IN4.
}
void loop() {
// چرخش به جلو با سرعت متوسط.
ABCD(150, 150, HIGH, HIGH);
delay(1000); // تاخیر 1 ثانیه.
// توقف.
ABCD(0, 0, LOW, LOW);
delay(500); // تاخیر 0.5 ثانیه.
// چرخش به عقب با سرعت کم.
ABCD(80, 80, LOW, LOW);
delay(1000); // تاخیر 1 ثانیه.
}

// تعریف پایهها
int in1 = 11; // ورودی اول موتور A برای کنترل جهت.
int in2 = 10; // ورودی دوم موتور A برای جهت مخالف.
int in3 = 5; // ورودی اول موتور B برای کنترل جهت.
int in4 = 6; // ورودی دوم موتور B برای جهت مخالف.
int ENA = A2; // پایه سرعت موتور A (توجه: PWM محدود).
int ENB = A1; // پایه سرعت موتور B (توجه: PWM محدود).
void setup() {
pinMode(in1, OUTPUT); // تنظیم جهت موتور A.
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT); // تنظیم جهت موتور B.
pinMode(in4, OUTPUT);
pinMode(ENA, OUTPUT); // تنظیم سرعت موتور A.
pinMode(ENB, OUTPUT); // تنظیم سرعت موتور B.
}
void loop() {
// چرخش به جلو با سرعت متوسط.
digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // جهت مثبت موتور A.
digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // جهت مثبت موتور B.
analogWrite(ENA, 150); analogWrite(ENB, 150); // سرعت متوسط.
delay(2000); // 2 ثانیه.
// توقف کامل.
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(ENA, 0); analogWrite(ENB, 0); // سرعت صفر.
delay(1000); // 1 ثانیه.
// چرخش به عقب با سرعت کم.
digitalWrite(in1, LOW); digitalWrite(in2, HIGH); // جهت منفی موتور A.
digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // جهت منفی موتور B.
analogWrite(ENA, 80); analogWrite(ENB, 80); // سرعت کم.
delay(2000); // 2 ثانیه.
// توقف دوباره.
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(ENA, 0); analogWrite(ENB, 0); // سرعت صفر.
delay(2000); // 2 ثانیه.
}
نکات تکمیلی
- محدودیت PWM: پینهای A1 و A2 PWM نیستند. برای عملکرد صحیح، ENA را به 9 و ENB را به 3 تغییر دهید.
- تست سختافزاری: اتصالات و منبع 12V را بررسی کنید.
- محافظت: از دیود برای جلوگیری از جریان برگشتی استفاده کنید.
- تنظیم سرعت: مقادیر PWM (0-255) را بر اساس نیاز موتور تنظیم کنید.
- جامپرها: اگر ماژول جامپر دارد، برای PWM آنها را بردارید.
باهم مرور کنیم چه کار هایی انجام دادیم و چی یاد گرفتیم
-
ماژول L298 رو به آردوینو وصل کنیم
-
موتورهای DC رو روشن/خاموش کنیم
-
جهت چرخش رو تغییر بدیم
-
سرعت چرخش رو با PWM کنترل کنیم
این پروژه یکی از پایهایترین پروژههای رباتیک و کنترل موتوره که میتونه توی خیلی از پروژههات بهت کمک کنه؛ از ماشین کنترلی گرفته تا ربات مسیریاب.
اگه این آموزش برات مفید بود، حتما توی بخش نظرات بنویس که به چه پروژههایی علاقهمندی؟ یا اگر سوالی داشتی درباره ماژول L298 یا کدنویسی آردوینو، همین پایین بپرس، جواب میدم. تجربه خودت از کار با L298 رو هم بنویس که بقیه بتونن استفاده کنن. منتظر کامنتهاتون هستم
باکس دانلود
راهنمای دانلود :
- برای دانلود فایل های پیوستی ابتدا در حساب کاربری خود ورود یا ثبت نام کنید.
- در صورت عدم دانلود فایل پیوست شده می توانید در قسمت گزارش خرابی لینک دلیل عدم دانلود را شرح دهید و از ما امتیاز دریافت کنید .
- تمامی فایل های پیوست شده متعلق به سایت ربات افزار می باشد و نشر آن به هر نحوه، قانونی و شرعی اشکال دارد.
_______ _______


































با عضویت در ربات افزار میتوانید :