دليل ESP32 49/55 - التحكم في محرك التيار المستمر عبر الإنترنت باستخدام Adafruit IoT | مجموعة ESP32 من SunFounder
في هذا الدليل، سنستكشف كيفية التحكم في موتور تيار مستمر عبر الإنترنت باستخدام ESP32 وخدمة Adafruit IO MQTT. يمكن التحكم في سرعة واتجاه موتور التيار المستمر عن بُعد، مما يسمح بتحكم فعال من أي مكان متصل بالإنترنت. يعرض هذا المشروع إمكانيات متحكم ESP32 الدقيق، الذي يتميز بشبكة Wi-Fi مدمجة، مما يجعله مثالياً لتطبيقات إنترنت الأشياء (IoT).
سنقوم بتنفيذ نظام يمكن من خلاله بدء المحرك وإيقافه وضبط سرعته عبر واجهة ويب متصلة بـ Adafruit IO. يمكن للمستخدمين الاشتراك في مواضيع محددة للتحكم في المحرك وضبط المعلمات وفقًا لذلك. لفهم العملية بشكل أفضل، تأكد من مشاهدة الفيديو المرافق لهذا الدليل (في الفيديو عند 00:00).
شرح الأجهزة
لهذا المشروع، سنستخدم متحكم ESP32، الذي هو قلب نظامنا. يتمتع ESP32 بقدرة على التعامل مع اتصالات الواي فاي، مما يجعله مثالياً لتطبيقات إنترنت الأشياء الخاصة بنا. يتصل بمنصة Adafruit IO، مما يتيح لنا إرسال واستقبال الرسائل عبر بروتوكول MQTT.
بالإضافة إلى ذلك، سنستخدم وحدة قيادة المحرك L293D، والتي تعد ضرورية للتحكم في المحرك DC. يمكن لوحدة L293D قيادة محركين DC وتسمح بالتحكم في كل من الاتجاه والسرعة من خلال تعديل عرض النبضة (PWM). تعمل هذه الوحدة بشكل أساسي كواجهة بين ESP32 والمحرك، حيث تدير التيار العالي الذي يتطلبه المحرك مع عزل ESP32 عن أي إشارات عكسية قد تضر بالجهاز.
تفاصيل ورقة البيانات
| المص manufacturer | تكساس إنسترومنتس |
|---|---|
| رقم الجزء | L293D |
| جهد المنطق/المدخلات والمخرجات | ٤.٥ - ٣٦ فولت |
| جهد الإمداد | ٤.٥ - ٣٦ فولت |
| جهد الخرج (لكل قناة) | 600 ميللي أمبير |
| تيار الذروة (لكل قناة) | 1.2 أ |
| إرشادات تردد PWM | 10 كيلو هرتز (تقريباً) |
| عتبات منطق الإدخال | 0.8 فولت (مرتفع)، 2.0 فولت (منخفض) |
| فقدان الجهد / RDS(on)/ التشبع | 1.5 فولت كحد أقصى |
| الحدود الحرارية | ١٥٠ درجة مئوية |
| حزمة | DIP-16 |
| ملاحظات / متغيرات | سائق نصف H عالي التيار رباعي |
- تأكد من توافر تبريد مناسب للتشغيل المستمر.
- استخدم PWM للتحكم في سرعة المحرك بفاعلية.
- راقب حدود جهد الإدخال لتجنب التلف.
- تحقق من الاتصالات الأرضية الصحيحة بين جميع المكونات.
- كن حذرًا من الجهد العكسي؛ استخدم الديودات إذا لزم الأمر.
- تحقق من الأسلاك مرة أخرى حيث يمكن أن تؤثر القطبية على اتجاه المحرك.
- اختبر باستخدام جهد أقل قبل التشغيل الكامل.
- راقب سخونة الجهاز أثناء الاستخدام المطول.
- تأكد من تقليل الاهتزازات للمفاتيح الميكانيكية إذا تم استخدامها.
- تأكد من أن ESP32 ليس محملاً بشكل زائد بواسطة تيار المحرك.
تعليمات التوصيل
ابدأ بتوصيل مصدر الطاقة. اربط القطب الموجب لمصدر الطاقة الخارجي بدبوس VCC من L293D (دبوس 8) والأرضي بدبوس GND (دبوس 4). تأكد من أن الـ ESP32 يعمل بشكل منفصل إذا لزم الأمر، عادةً من خلال اتصال ميكرو USB.
بعد ذلك، قم بتوصيل المحرك بالـ L293D. يجب توصيل طرف واحد من المحرك برقم الخرج 3 (رجل 2 من الـ L293D) والطرف الآخر برقم الخرج 6 (رجل 7 من الـ L293D). بالنسبة لإشارات التحكم، قم بتوصيل رجل 13 من ESP32 برقم المدخل 2 (رجل 1 من الـ L293D) ورجل 14 برقم المدخل 7 (رجل 2 من الـ L293D). يجب أيضًا توصيل رجل التفعيل (رجل 1) بمصدر 5 فولت لتفعيل السائق. وأخيرًا، تأكد من توصيل أرضية ESP32 بأرضية الـ L293D كمرجع مشترك.
أمثلة الشيفرة وبرنامج الشرح
يقوم الكود المقدم بتهيئة المكتبات الضرورية ويقوم بإعداد واي فاي وعميل 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 بشبكة الواي فاي المحددة. هذه الاتصال ضروري لتمكين الاتصال عبر MQTT.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
runMotor();
}
تقوم هذه الدالة بحلقة لتأسيس اتصال MQTT ومعالجة الحزم الواردة للتحكم في الموتور بناءً على آخر الأوامر المستلمة. الدالةrunMotor()يُطلب منه تطبيق الإعدادات الحالية على المحرك.
عرض / ما يمكن توقعه
عندما تكتمل الإعدادات ويتم رفع الشيفرة، يجب أن تكون قادرًا على التحكم في المحرك من خلال لوحة تحكم Adafruit IO. يمكنك ضبط سرعة المحرك باستخدام منزلق وتغيير اتجاهه باستخدام مفتاح تبديل. إذا كانت الأسلاك متصلة بشكل صحيح، سيتفاعل المحرك مع هذه الأوامر في الوقت الحقيقي، مما يظهر انخفاض زمن الانتقال للنظام (في الفيديو عند 00:00).
تشمل المشكلات الشائعة اتجاه المحرك المعكوس بسبب التوصيل الخاطئ، لذا تحقق مرة أخرى من التوصيلات إذا لم يتصرف المحرك كما هو متوقع. بالإضافة إلى ذلك، تأكد من أن مواضيع MQTT الخاصة بك معدة بشكل صحيح في Adafruit IO لتتناسب مع الكود.
طوابع زمنية للفيديو
- 00:00 بدء
- ٢:٢١ مقدمة إلى المشروع
- كيفية التحكم في المحرك الكهربائي المستمر 4:20
- 6:39 سائق المحرك L293D
- 11:42 ما هو MQTT؟
- 15:03 إعداد Adafruit IO
- 19:17 شرح الأسلاك
- 22:42 شرح الكود
- عرض المشروع 35:28
/*
* هذا هو كود Arduino لـ ESP32 للتحكم في محرك DC باستخدام خدمة MQTT من Adafruit
* شاهد تعليمات الفيديو https://youtu.be/OUgyPXNYg3g
* 📚⬇️ صفحة التنزيلات والموارد https://robojax.com/RJT673
* كتب بواسطة أحمد شمشيري
* في 18 فبراير 2024
*
* مثال مكتبة Adafruit MQTT ESP32 Adafruit IO SSL/TLS
*
* /// المرجع: 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: 8 بت
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"
/*
* نقطة وصول الواي فاي *********************************/
*
* #define WLAN_SSID "كتاب"
* #define WLAN_PASS "88888888"
*
* /************************* إعداد Adafruit.io
*/
#define AIO_SERVER "io.adafruit.com"
// استخدام المنفذ 8883 لـ MQTTS
#define AIO_SERVERPORT 8883
// تكوين حساب Adafruit IO
// .للحصول على هذه القيم، قم بزيارة https://io.adafruit.com وانقر على المفتاح النشط
// #define AIO_USERNAME "اسم_المستخدم_الخاص_بك_في_أدافرويت"
// #define AIO_KEY "مفتاح_ADAFRUIT_IO_الخاصة_بك"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_jHpm60SEsWUdU5x472FViZjWzsY9"
/*
* الدولة العالمية (لا تحتاج إلى تغيير هذا!) ******************/
*
* // WiFiFlientSecure لدعم SSL/TLS
* WiFiClientSecure client;
*
* // إعداد فئة عميل MQTT باستخدام عميل WiFi وبيانات تسجيل الدخول للخادم MQTT.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com الجذر CA
* 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 تتبع الشكل: <اسم المستخدم>/feeds/<اسم التغذية>
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
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
لا توجد ملفات متاحة.