آموزش ESP32 30/55 - کنترل سرو با وب از طریق MQTT با استفاده از سرویس Adafruit IO | کیت آموزشی IoT سنفائندر
در این آموزش، یاد خواهیم گرفت که چگونه موقعیت یک موتور سرو را با استفاده از میکروکنترلر ESP32 و پروتکل MQTT از طریق وب کنترل کنیم. با استفاده از سرویس Adafruit IO، شما قادر خواهید بود سرو را در زوایای مختلف مانند ۰°، ۹۰° یا ۱۸۰° بهصورت از راه دور قرار دهید. این پروژه قابلیتهای ESP32 را نشان میدهد که شامل Wi-Fi و بلوتوث داخلی است و آن را به ابزاری قدرتمند برای کاربردهای IoT تبدیل میکند.

در این پروژه، ما یک کارگزار MQTT را با استفاده از Adafruit IO راهاندازی خواهیم کرد، یک داشبورد برای کنترل سروو ایجاد میکنیم و ESP32 را به آن متصل میکنیم. موقعیت سروو از طریق یک اسلایدر بر روی داشبورد قابل تنظیم خواهد بود، که کنترل در زمان واقعی را از هر دستگاه متصل به اینترنت (در ویدیو در ۵:۳۰) امکانپذیر میسازد.
تجهیزات توضیح داده شده
اجزای اصلی این پروژه شامل میکروکنترلر ESP32 و موتور سرو است. ESP32 یک میکروکنترلر چندمنظوره با قابلیتهای Wi-Fi و Bluetooth یکپارچه است که آن را برای برنامههای IoT ایدهآل میکند. این میکروکنترلر با استفاده از پروتکل MQTT که سبک و کارآمد برای ارسال پیامها در اینترنت است، با سرویس Adafruit IO ارتباط برقرار میکند.
موتور سرو یک عملگر چرخشی است که امکان کنترل دقیق موقعیت زاویهای را فراهم میکند. این موتور با دریافت سیگنال مدولاسیون عرض پالس (PWM) کار میکند که موقعیت آن را تعیین میکند. در این پروژه، ما موتور سرو را به یکی از پایههای دیجیتال روی ESP32 متصل خواهیم کرد تا بتوانیم زاویه آن را از راه دور کنترل کنیم.
جزئیات برگه داده
| تولیدکننده | پاراالکس |
|---|---|
| شماره قطعه | SG90 |
| ولتاژ منطق/ورودی و خروجی | 3.3 ولت - 5 ولت |
| ولتاژ تغذیه | 4.8 ولت - 6.0 ولت |
| جریان خروجی (به ازای هر کانال) | ۱ A ماکس |
| راهنمایی در مورد فرکانس PWM | ۵۰ هرتز |
| محدودیتهای منطقی ورودی | 0.3 ولت - 0.7 ولت |
| کاهش ولتاژ / RDS(روشن)مقدار اشباع | حداکثر 0.2 ولت |
| محدودیتهای حرارتی | دمای کار: -10 درجه سانتیگراد تا 60 درجه سانتیگراد |
| بسته | قاب پلاستیکی |
| یادداشتها / انواع | مینی سرو، چرخش ۱۸۰° |
- تامین ولتاژ مناسب برای سروو (۴.۸ ولت - ۶.۰ ولت).
- برای ارتباط بین ESP32 و سروو از یک زمین مشترک استفاده کنید.
- سیگنال PWM را زیر نظر داشته باشید تا از تجاوز به محدودیتهای سروو جلوگیری شود.
- به طور ایمن سروو را متصل کنید تا از قطع ارتباط در حین عملکرد جلوگیری شود.
- کتابخانه MQTT آدافروت را بهروزرسانی کنید تا اطمینان حاصل شود که سازگاری دارد.
نقشههای MQTT
دستورالعملهای سیمکشی

برای ارتباط موتور سرو با ESP32، ابتدا سیم زمین موتور سرو را به پایه زمین روی ESP32 وصل کنید. سپس، سیم برق (معمولاً قرمز) موتور سرو را به پایه 5V روی ESP32 متصل کنید. در نهایت، سیم سیگنال (که معمولاً زرد یا سفید است) را به پایه دیجیتال 25 روی ESP32 وصل کنید. اطمینان حاصل کنید که اتصالات محکم باشد تا از هر گونه قطع ارتباط در حین کار جلوگیری شود.
اگر از باتری برای تأمین انرژی ESP32 استفاده میکنید، مطمئن شوید که ولتاژ باتری در محدوده قابل قبول برای هر دو، ESP32 و سروو باشد. علاوه بر این، دوباره بررسی کنید که سیمکشی با تعریفات پایههایی که در شِفر (کود) خود استفاده کردهاید، مطابقت دارد تا از هرگونه مشکل جلوگیری شود (در ویدیو در ۱۲:۴۵).
نمونههای شِفر (کود) و راهنما
در شِفر (کود) ارائه شده، ابتدا کتابخانههای لازم برای ESP32 و MQTT را وارد میکنیم. ما شیء سروو را تعریف کرده و پایهای که به آن متصل است را مشخص میکنیم.const int servoPin = 25;زاویه پیشفرض نیز با تنظیم شده استconst int defaultServoAngle = 90;، که موقعیت اولیه خواهد بود وقتی که ESP32 راهاندازی میشود.
Servo myServo;
const int servoPin = 25;
const int defaultServoAngle = 90;
int servoAngle = defaultServoAngle;
این قطعه شِفر (کود) سروو را بر روی پایه ۲۵ راهاندازی کرده و زاویهی پیشفرض آن را به ۹۰ درجه تنظیم میکند. متغیرservoAngleبر اساس پیامهای دریافتی از کارگزار MQTT بهروز خواهد شد.
در setup()عملکرد، به Wi-Fi متصل میشویم و کلاینت MQTT را راهاندازی میکنیم. اعتبارنامههای Adafruit IO در اینجا تعریف شده است، از جمله نام کاربری و کلید:
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_xmIW58uNNsjJCSOqzZ9QoHyq29wu"
این بخش اتصال به سرویس Adafruit IO را ایجاد میکند. مطمئن شوید که این مقادیر را با اطلاعات کاربری Adafruit IO خود جایگزین کنید هنگام پیادهسازی شِفر (کود).
در نهایت، حلقه اصلی اطمینان حاصل میکند که ارتباط با سرور MQTT فعال باقی بماند و پیامهای دریافتی را پردازش کند. موقعیت سروو بر اساس زاویه دریافتی بهروزرسانی میشود:
mqtt.processPackets(500);
int pulseWidth = map(servoAngle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
این شِفر (کود) زاویه سروو را به عرض پالس مربوطه نگاشت میکند و آن را به موتور سروو ارسال میکند.processPackets()این تابع به ESP32 اجازه میدهد تا پیامهای ورودی MQTT را مدیریت کند و اطمینان حاصل کند که سروو به دستورات ارسال شده از طریق داشبورد Adafruit IO واکنش نشان میدهد.
نمایش / چه انتظاری باید داشت
پس از تنظیم همه چیز، باید بتوانید سروو را از داشبورد Adafruit IO با استفاده از اسلایدر که ایجاد کردهاید کنترل کنید. با حرکت دادن اسلایدر، سروو زاویه خود را بهصورت بلادرنگ تنظیم خواهد کرد. اطمینان حاصل کنید که ESP32 شما به Wi-Fi متصل است و اتصال MQTT پایدار است. اگر سروو پاسخ نداد، سیمکشی و منبع تغذیه سروو را بررسی کنید (در ویدیو در :15).
به محدودههای کاری سروآ موتور توجه کنید؛ ارسال مقداری خارج از ۰° تا ۱۸۰° ممکن است باعث رفتار غیرقابل پیشبینی آن شود. شِفر (کود) شامل بررسیهایی است تا از بروز چنین اتفاقاتی جلوگیری کند و زاویه را در این محدوده محدود کند.
زمانبندی ویدیو
- ۰۰:۰۰ شروع
- ۱:۵۴ مقدمه پروژه
- ۲:۵۲ مقدمهای بر MQTT
- تنظیم Adafruit IO ساعت ۶:۵۰
- 9:54 سیم کشی سروو
- ۱۱:۰۷ شِفر (کود) توضیح داده شد
- 18:59 انتخاب بورد ESP32 و پورت COM
- نمایش پروژه ۲۲:۱۰
Common Course Links
Common Course Files
مواردی که ممکن است به آنها نیاز داشته باشید
-
علیاکسپرسموتور سرو SG90 با زاویه ۱۸۰ یا ۳۶۰ را از علیاکسپرس خریداری کنید.s.click.aliexpress.com
منابع و مراجع
-
مستنداتآموزش ESP32 17/55 - مستندات موتور سرو سونفندرdocs.sunfounder.com
-
خارجیسرور SG90 در اَمه زون آمریکاamzn.to
فایلها📁
سایر فایلها
-
دیتاشیت موتور SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB