قسمت دوم آموزش کنترل سرعت موتور DC و تنظیم شدت نور LED با PWM در آردوینو
آموزش عملی به همراه کد، شماتیک مدار و مثال
در قسمت اول با مفهوم PWM و نحوه کنترل سرعت موتور و شدت نور LED آشنا شدیم. اکنون زمان آن رسیده است که یک پروژه عملی طراحی کنیم تا بتوانید از این روش در پروژههای واقعی استفاده کنید.
در این آموزش یک موتور DC و یک LED به کمک آردوینو و یک پتانسیومتر کنترل میشوند. هرچه پتانسیومتر را بچرخانید، سرعت موتور و شدت نور LED تغییر خواهد کرد.
- - -
PWM چگونه سرعت موتور را کنترل میکند؟
برخلاف تصور بسیاری از افراد، PWM ولتاژ را کم نمیکند؛ بلکه ولتاژ را با سرعت بسیار زیاد قطع و وصل میکند.
اگر خروجی به مدت ۵۰ درصد روشن باشد، موتور تقریباً نصف سرعت خود را خواهد داشت.
به این نسبت روشن بودن، **Duty Cycle** گفته میشود.
| Duty Cycle | سرعت موتور | نور LED |
|--------- - |--------- - |------ - |
| 0% | خاموش | خاموش |
| 25% | کم | کم |
| 50% | متوسط | متوسط |
| 75% | زیاد | زیاد |
| 100% | حداکثر | حداکثر |
- - -
قطعات موردنیاز
* Arduino UNO
* موتور DC 12V
* LED پرنور
* MOSFET IRLZ44N یا IRF3205
* دیود 1N5408
* مقاومت 220 اهم
* مقاومت 10K
* پتانسیومتر 10K
* منبع تغذیه 12 ولت
- - -
شماتیک مدار
اتصالات به صورت زیر انجام میشود.
Arduino D9 → مقاومت 220Ω → Gate ماسفت
Source ماسفت → GND
Drain ماسفت → منفی موتور
مثبت موتور → +12V
دیود موازی موتور نصب شود.
پتانسیومتر
پایه اول → GND
پایه دوم → A0
پایه سوم → 5V
LED
پایه مثبت → +5V
پایه منفی → پایه D10 از طریق مقاومت مناسب
- - -

برنامه آردوینو
```cpp
const int pot=A0;
const int motorPin=9;
const int ledPin=10;
int sensorValue;
int pwmValue;
void setup()
{
pinMode(motorPin,OUTPUT);
pinMode(ledPin,OUTPUT);
}
void loop()
{
sensorValue=analogRead(pot);
pwmValue=map(sensorValue,0,1023,0,255);
analogWrite(motorPin,pwmValue);
analogWrite(ledPin,pwmValue);
delay(5);
}
```
- - -
توضیح برنامه
در ابتدا پایههای موتور و LED مشخص شدهاند.
```cpp
const int motorPin=9;
const int ledPin=10;
```
پتانسیومتر روی پایه آنالوگ A0 قرار گرفته است.
```cpp
const int pot=A0;
```
خواندن مقدار پتانسیومتر
```cpp
sensorValue=analogRead(pot);
```
این دستور عددی بین صفر تا ۱۰۲۳ تولید میکند.
از آنجا که PWM فقط بین صفر تا ۲۵۵ کار میکند باید مقدار تبدیل شود.
```cpp
pwmValue=map(sensorValue,0,1023,0,255);
```
در پایان مقدار PWM به موتور و LED ارسال میشود.
```cpp
analogWrite(motorPin,pwmValue);
analogWrite(ledPin,pwmValue);
```
- - -
مثال اول
اگر مقدار پتانسیومتر برابر باشد با
```
250
```
خروجی تقریباً
```
62
```
خواهد شد.
در نتیجه موتور آرام میچرخد و LED نور کمی دارد.
- - -
مثال دوم
اگر مقدار پتانسیومتر
```
512
```
باشد.
PWM تقریباً
```
127
```
خواهد شد.
در این حالت سرعت موتور حدود ۵۰ درصد خواهد بود.
- - -
مثال سوم
اگر مقدار پتانسیومتر
```
1023
```
باشد.
PWM برابر
```
255
```
خواهد شد.
در نتیجه موتور با حداکثر سرعت کار میکند.
- - -
مزایای PWM
* مصرف انرژی بسیار پایین
* افزایش راندمان موتور
* کاهش گرمای تولید شده
* کنترل دقیق سرعت
* کنترل نرم نور LED
* مناسب برای پروژههای صنعتی
- - -
نکات مهم
از اتصال مستقیم موتور به آردوینو خودداری کنید.
حتماً از MOSFET استفاده نمایید.
دیود هرزگرد را فراموش نکنید زیرا از آسیب دیدن ماسفت جلوگیری میکند.
از منبع تغذیه مناسب استفاده کنید.
زمین آردوینو و منبع تغذیه باید مشترک باشد.
- - -
کاربردهای این پروژه
* کنترل سرعت فن
* کنترل سرعت پمپ آب
* کنترل ماشینهای کوچک
* کنترل نور اتاق
* نورپردازی هوشمند
* کنترل سرعت دستگاههای صنعتی
* رباتهای متحرک
* سیستمهای گلخانه هوشمند
- - -
جمعبندی
در این قسمت با نحوه استفاده عملی از PWM برای کنترل سرعت موتور DC و تنظیم شدت نور LED آشنا شدیم. با استفاده از یک پتانسیومتر توانستیم مقدار PWM را بهصورت لحظهای تغییر دهیم و خروجی را به موتور و LED اعمال کنیم. این روش به دلیل راندمان بالا، مصرف انرژی کم و کنترل دقیق، در بسیاری از پروژههای الکترونیکی و صنعتی استفاده میشود.
**پیشنهاد برای قسمت سوم:** آموزش کنترل سرعت موتور و شدت
نور LED با استفاده از نمایشگر LCD یا OLED و نمایش درصد PWM بهصورت زنده، یا کنترل بیسیم از طریق بلوتوث و ESP32. این ادامه، مجموعه آموزش شما را کاملتر و جذابتر خواهد کرد.