آموزش ESP32 49/55 - کنترل موتور DC از طریق اینترنت با استفاده از Adafruit IoT | کیت ESP32 سان فاندर
در این آموزش، ما به بررسی نحوه کنترل یک موتور DC از طریق اینترنت با استفاده از ESP32 و سرویس MQTT آدافروت IO خواهیم پرداخت. سرعت و جهت موتور DC به صورت از راه دور قابل تغییر است، که این امکان را میدهد که از هر جا که اتصال اینترنت وجود داشته باشد، کنترل کارآمدی داشته باشیم. این پروژه تواناییهای میکروکنترلر ESP32 را نشان میدهد که دارای Wi-Fi داخلی است و آن را برای کاربردهای اینترنت اشیاء (IoT) ایدهآل میکند.
ما به پیادهسازی یک سیستم خواهیم پرداخت که موتورها میتوانند از طریق یک رابط وب متصل به Adafruit IO روشن، خاموش و سرعت آنها تنظیم شوند. کاربران میتوانند به موضوعات خاصی برای کنترل موتور اشتراکگذاری کنند و پارامترها را متناسب با آن تنظیم کنند. برای درک بهتر فرآیند، حتماً ویدیوی همراه با این آموزش را مشاهده کنید (در ویدیو در ۰۰:۰۰).
توضیح سختافزار
برای این پروژه، ما از میکروکنترلر ESP32 استفاده خواهیم کرد که قلب سیستم ماست. ESP32 قادر به مدیریت ارتباطات Wi-Fi است و آن را برای برنامه IoT ما مناسب میسازد. این میکروکنترلر به پلتفرم Adafruit IO متصل میشود و به ما امکان میدهد تا پیامها را از طریق پروتکل MQTT ارسال و دریافت کنیم.
علاوه بر این، ما از درایور موتور L293D استفاده خواهیم کرد که برای کنترل موتور DC ضروری است. L293D میتواند دو موتور DC را راهاندازی کند و کنترل هر دو جهت و سرعت را از طریق مدولاسیون عرض پالس (PWM) امکانپذیر میسازد. این در واقع به عنوان یک رابط بین ESP32 و موتور عمل میکند و جریان بالاتری که موتور نیاز دارد را مدیریت میکند در حالی که ESP32 را از هرگونه سیگنالهای برگشتی مضر ایزوله میکند.
جزئیات برگه داده
| تولیدکننده | تگزاس اینسترومنتس |
|---|---|
| شماره قطعه | L293D |
| ولتاژ منطقی/ورودی و خروجی | ۴.۵ - ۳۶ ولت |
| ولتاژ برق تامین | ۴.۵ - ۳۶ ولت |
| جریان خروجی (به ازای هر کانال) | 600 میلی آمپر |
| جریان اوج (به ازای هر کانال) | ۱٫۲ الف |
| راهنمایی فرکانس PWM | ۱۰ کیلوهرتز (معمولی) |
| آستانههای منطقی ورودی | ۰.۸ ولت (بالا)، ۲.۰ ولت (پایین) |
| افت ولتاژ / RDS(on)/ اشباع | 1.5 ولت حداکثر |
| محدودیتهای حرارتی | ۱۵۰ درجه سانتیگراد |
| بسته | DIP-16 |
| یادداشتها / انواع | درایور نیمه-H چهارتایی با جریان بالا |
- اطمینان حاصل کنید که تهویه مناسب برای عملکرد مداوم فراهم شده باشد.
- از PWM برای کنترل کارآمد سرعت موتور استفاده کنید.
- باتوجه به محدودههای ولتاژ ورودی برای جلوگیری از آسیب، دقت کنید.
- اتصالات زمین بین تمام اجزا را بررسی کنید.
- به ولتاژ برگشتی احتیاط کنید؛ در صورت لزوم از دیودها استفاده کنید.
- دو بار سیمکشی را بررسی کنید زیرا قطبیت میتواند بر جهت موتور تأثیر بگذارد.
- قبل از عملکرد کامل، با ولتاژ پایینتر آزمایش کنید.
- بدونید که در استفاده طولانی مدت، ممکن است داغ شدن بیش از حد رخ دهد.
- اطمینان حاصل کنید که اگر از کلیدهای مکانیکی استفاده میشود، آنها را دبونس کنید.
- اطمینان حاصل کنید که ESP32 توسط جریان موتوری بارگذاری نشده است.
دستورالعملهای سیمکشی
اول با اتصال منبع تغذیه شروع کنید. پایه مثبت منبع تغذیه خارجی خود را به پایه VCC از L293D (پایه ۸) و گراند را به پایه GND (پایه ۴) متصل کنید. اطمینان حاصل کنید که ESP32 در صورت نیاز به طور جداگانه تأمین برق شود، معمولاً از طریق اتصال میکرو USB.
سپس، موتور را به L293D متصل کنید. یک پایه موتور باید به پایه خروجی ۳ (پایه ۲ L293D) و پایه دیگر به پایه خروجی ۶ (پایه ۷ L293D) متصل شود. برای سیگنالهای کنترل، پایه ۱۳ ESP32 را به پایه ورودی ۲ (پایه ۱ L293D) و پایه ۱۴ را به پایه ورودی ۷ (پایه ۲ L293D) متصل کنید. پایه فعالسازی (پایه ۱) نیز باید به منبع ۵ ولت متصل شود تا درایور فعال شود. در نهایت، مطمئن شوید که زمین ESP32 به زمین L293D متصل است تا یک مرجع مشترک داشته باشید.
نمونههای شِفر (کود) و راهنمایی
شِفر (کود) ارائه شده کتابخانههای لازم را راهاندازی کرده و مشتری Wi-Fi و MQTT را پیکربندی میکند. شناسههای کلیدی شاملmotorSpeed,motorDirection, وmotorStartکه عملیات موتور را بر اساس دستورات دریافتی از Adafruit IO مدیریت میکند.
bool debug = false;
#define motor1A 13
#define motor2A 14
int motorSpeed = 0;
int motorDirection = 1;
int motorStart = 1;
در این بخش، پایههای موتور به همراه متغیرهای اولیه برای کنترل سرعت، جهت و وضعیت شروع/توقف موتور تعریف شدهاند. متغیرmotorSpeedبر اساس ورودی از Adafruit IO تنظیم خواهد شد.
void setup() {
Serial.begin(115200);
WiFi.begin(WLAN_SSID, WLAN_PASS);
delay(2000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
در تابع راهاندازی، ارتباط سریال آغاز میشود و ESP32 به شبکه Wi-Fi مشخص شده متصل میشود. این اتصال برای فعالسازی ارتباط MQTT حیاتی است.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
runMotor();
}
این تابع حلقه ارتباط MQTT را برقرار میکند و بستههای ورودی را پردازش میکند تا موتور را بر اساس آخرین دستورات دریافتی کنترل کند. تابعrunMotor()برای اعمال تنظیمات فعلی بر روی موتور فراخوانی میشود.
نمایش / چه انتظاری داشته باشیم
زمانی که تنظیمات کامل و شِفر (کود) بارگذاری شد، شما باید قادر باشید موتور را از طریق داشبورد Adafruit IO کنترل کنید. شما میتوانید سرعت موتور را با استفاده از یک اسلایدر تنظیم کرده و جهت آن را با یک کلید تغییر دهید. اگر همه چیز به درستی وصل شده باشد، موتور به این دستورات در زمان واقعی پاسخ خواهد داد و کم بودن تأخیر سیستم را نشان میدهد (در ویدئو در :00).
مسائل رایج شامل معکوس شدن جهت موتور به دلیل سیمکشی نادرست است، بنابراین در صورت عدم عملکرد صحیح موتور، اتصالات را دوباره بررسی کنید. همچنین، اطمینان حاصل کنید که موضوعات MQTT شما به درستی در Adafruit IO تنظیم شدهاند تا با شِفر (کود) مطابقت داشته باشند.
زمانبندی ویدیوها
- ۰۰:۰۰ شروع
- ۲:۲۱ معرفی پروژه
- کنترل موتور DC در ساعت ۴:۲۰
- 6:39 درایور موتور L293D
- MQTT چیست؟
- تنظیم Adafruit IO :03
- 19:17 توضیح سیمکشی
- شِفر (کود) توضیح داده شده در ۲۲:۴۲
- 35:28 نمایش پروژه
/*
* این یک شِفر (کود) آردوینو برای ESP32 به موتور DC است که از سرویس MQTT آدافرویت استفاده میکند.
* ویدیو راهنما را مشاهده کنید https://youtu.be/OUgyPXNYg3g
* 📚⬇️ صفحه دانلود و منابع https://robojax.com/RJT673
* نوشته احمد شمشیری
* در تاریخ 18 فوریه 2024
*
* کتابخانه MQTT آدافرویت مثال SSL/TLS ESP32
*
* /// منبع: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
bool debug = false;
#define motor1A 13
#define motor2A 14
// تنظیمات PWM
const int freq = 500; // فرکانس PWM: 500 هرتز
const int resolution = 8; // رزولوشن PWM: ۸ بیت
const int channelA = 0; // کانال PWM برای موتور 1A: 0
const int channelB = 1; // کانال PWM برای موتور2A: 1
char* dir[]={"CCW", "CW"};
int motorSpeed =0;
int motorDirection =1;
int motorStart = 1;
int dutyCycle =0;
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* نقطه دسترسی WiFi *********************************/
*
* #define WLAN_SSID "Book"
* #define WLAN_PASS "88888888"
*
* /************************* راهاندازی Adafruit.io
*/
#define AIO_SERVER "io.adafruit.com"
// از پورت ۸۸۸۳ برای MQTTS استفاده میشود
#define AIO_SERVERPORT 8883
// پیکربندی حساب Adafruit IO
// برای به دست آوردن این مقادیر، به https://io.adafruit.com مراجعه کنید و بر روی کلید فعال کلیک کنید.
// #define AIO_USERNAME "نام_کاربری_آدافرات_شما"
// #define AIO_KEY "کلید آدافرایت آیاو"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_jHpm60SEsWUdU5x472FViZjWzsY9"
/*
* وضعیت جهانی (شما نیازی به تغییر این ندارید!) ******************/
*
* // WiFiFlientSecure برای پشتیبانی از SSL/TLS
* WiFiClientSecure کلاینت;
*
* // راهاندازی کلاس کلاینت MQTT با عبور دادن کلاینت WiFi و جزئیات سرور و ورود MQTT.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // اعتبارنامه زرین (CA) root io.adafruit.com
* const char* adafruitio_root_ca = \
* "-----BEGIN CERTIFICATE-----\n"
* "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
* "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
* "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
* "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
* "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
* "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
* "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
* "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
* "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
* "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
* "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
* "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
* "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
* "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
* "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
* "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
* "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
* "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
* "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
* "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
* "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
* "-----END CERTIFICATE-----\n";
*
* /****************************** خوراکها
*/
// یک فید به نام 'test' برای انتشار و 'test2' برای اشتراک راهاندازی کنید.
// مسیرهای MQTT برای AIO به شکل زیر است: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe MOTOR_SPEED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/motor.speed");
Adafruit_MQTT_Subscribe MOTOR_DIRECTION = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/motor.direction");
Adafruit_MQTT_Subscribe MOTOR_START = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/motor.start");
Common Course Links
Common Course Files
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
هیچ فایلی موجود نیست.