روتاری انکودر ESP32؛ آموزش اتصال، کدنویسی و تشخیص جهت
روتاری انکودر ESP32 یکی از روشهای کاربردی برای اضافه کردن
کنترل چرخشی به پروژههای مبتنی بر ESP32 است. با استفاده از یک انکودر چرخشی
میتوان جهت حرکت، تعداد پلهها و فشار دادن دکمه داخلی ماژول را تشخیص داد.
در این آموزش نحوه اتصال ماژول KY-040، تشخیص جهت چرخش، شمارش پلهها،
استفاده از کلید فشاری و روشهای Polling و Interrupt را بررسی میکنیم.
📌 انکودر چرخشی و ESP32 در یک نگاه
Rotary Encoder
KY-040
A / B
SW
Polling / Interrupt
ESP32
روتاری انکودر ESP32 چیست؟
Rotary Encoder ESP32 در واقع ترکیب یک انکودر افزایشی
با برد ESP32 است. این قطعه به جای ارائه یک ولتاژ متغیر مانند پتانسیومتر،
سیگنالهای دیجیتال تولید میکند که از آنها برای تشخیص حرکت و جهت استفاده میشود.
دو خروجی اصلی انکودر معمولاً با نامهای A و B شناخته میشوند.
اختلاف فاز این دو سیگنال به میکروکنترلر اجازه میدهد جهت چرخش محور را مشخص کند.
انکودر چرخشی چگونه کار می کند؟
در هنگام چرخاندن محور، وضعیت دو کانال به ترتیبهای مختلف تغییر میکند.
با بررسی این تغییرات میتوان حرکت را به افزایش یا کاهش یک شمارنده تبدیل کرد.



💡 چرا دو کانال A و B داریم؟
یک کانال فقط وجود حرکت را مشخص میکند؛ اما اختلاف فاز بین دو کانال
به ESP32 امکان میدهد جهت ساعتگرد یا پادساعتگرد را هم تشخیص دهد.
اتصال KY-040 به ESP32
یکی از سادهترین روشها برای ساخت یک کنترلر چرخشی با ESP32 استفاده از
ماژول KY-040 است. این ماژول معمولاً دارای CLK، DT، SW، VCC و GND است.
| پایه | اتصال | وظیفه |
|---|---|---|
| + | 3.3V | تغذیه |
| GND | GND | زمین |
| CLK | GPIO25 | کانال A |
| DT | GPIO26 | کانال B |
| SW | GPIO27 | کلید |
پایه های انکودر در ESP32
در این مثال GPIO25 برای CLK، GPIO26 برای DT و GPIO27 برای SW در نظر گرفته شده است.
این شمارهها صرفاً نمونه هستند و در پروژه واقعی باید قابلیتها و محدودیتهای
برد ESP32 خود را بررسی کنید.

کدنویسی انکودر با روش Polling
برای پروژههای ساده میتوان وضعیت پایهها را در حلقه اصلی برنامه بررسی کرد.
این روش برای آموزش و کاربردهای سبک، ساختار سادهای دارد.
#define CLK_PIN 25
#define DT_PIN 26
#define SW_PIN 27
int counter = 0;
int lastStateCLK;
void setup() {
Serial.begin(115200);
pinMode(CLK_PIN, INPUT_PULLUP);
pinMode(DT_PIN, INPUT_PULLUP);
pinMode(SW_PIN, INPUT_PULLUP);
lastStateCLK = digitalRead(CLK_PIN);
}
void loop() {
int currentStateCLK = digitalRead(CLK_PIN);
if (currentStateCLK != lastStateCLK &&
currentStateCLK == HIGH) {
if (digitalRead(DT_PIN) != currentStateCLK) {
counter--;
} else {
counter++;
}
Serial.println(counter);
}
lastStateCLK = currentStateCLK;
if (digitalRead(SW_PIN) == LOW) {
Serial.println("Button Pressed");
delay(200);
}
}
کدنویسی Rotary Encoder با Interrupt
اگر پروژه شما به ثبت تغییرات سریعتر نیاز دارد، میتوان از Interrupt استفاده کرد.
در این روش ESP32 هنگام تغییر وضعیت GPIO، تابع مربوط به وقفه را اجرا میکند.
این روش برای پروژههایی که همزمان وظایف دیگری نیز روی میکروکنترلر اجرا میشود،
میتواند انتخاب مناسبتری باشد.
Polling یا Interrupt؛ کدام بهتر است؟
| ویژگی | Polling | Interrupt |
|---|---|---|
| سادگی | ✅ زیاد | متوسط |
| پروژه آموزشی | ✅ مناسب | مناسب |
| سرعت بالا | محدودتر | ✅ مناسبتر |
| پیچیدگی کدنویسی | کم | بیشتر |
دکمه فشاری KY-040 چیست؟
بسیاری از ماژولهای KY-040 علاوه بر خروجیهای چرخشی، یک کلید فشاری نیز دارند.
این کلید با نام SW مشخص میشود و میتوان از آن برای انتخاب گزینه، ورود به منو
یا اجرای یک فرمان استفاده کرد.
رفع مشکل جهت اشتباه چرخش
اگر جهت حرکت در برنامه برعکس نمایش داده میشود، اتصال CLK و DT را بررسی کنید.
جابهجا کردن این دو سیگنال یا تغییر منطق تشخیص جهت، معمولاً این مشکل را برطرف میکند.
💡 نکته عیبیابی
اگر مقدار شمارنده هنگام چرخش پرش دارد، علاوه بر منطق نرمافزار،
وضعیت مکانیکی انکودر و Debounce را نیز بررسی کنید.
برای انتخاب قطعه و طراحی پروژه نیاز به مشاوره دارید؟
اگر در انتخاب قطعات الکترونیکی، Arduino، سنسورها، ماژولها یا نحوه اتصال
آنها به مدار سوالی دارید، میتوانید برای دریافت مشاوره فنی
با کارشناسان پژوهشگران تماس بگیرید.
قبل از خرید یا ساخت پروژه، انتخاب درست قطعه میتواند از هزینههای اضافی،
خطاهای طراحی و آسیب به تجهیزات جلوگیری کند.
کاربردهای انکودر چرخشی ESP32
ترکیب این انکودر با ESP32 در پروژههایی که به کنترل یک پارامتر توسط کاربر
نیاز دارند بسیار مفید است.
- کنترل حجم صدا
- تنظیم سرعت موتور
- انتخاب گزینههای منو
- تنظیم روشنایی
- تنظیم دما
- انتخاب فرکانس
- رابط کاربری تجهیزات الکترونیکی

برای این پروژه چه قطعاتی لازم است؟
برای ساخت یک پروژه کامل ممکن است به ESP32، KY-040، بردبورد، سیم جامپر،
نمایشگر و سایر قطعات الکترونیکی نیاز داشته باشید.
🛒 قطعات پروژه را از پژوهشگران تهیه کنید
برای تهیه ESP32، ماژولهای انکودر، سنسورها و سایر تجهیزات الکترونیکی
میتوانید محصولات موجود در فروشگاه پژوهشگران را بررسی کنید.
مقالات بیشتر درباره ESP32 و الکترونیک
📚 مقالات بیشتر پژوهشگران
آموزشهای بیشتر درباره ESP32، آردوینو، سنسورها، ماژولها و پروژههای
الکترونیکی را در مجموعه مقالات پژوهشگران ببینید.
مشاوره فنی برای انتخاب قطعه
🛠️ برای انتخاب قطعه نیاز به مشاوره دارید؟
اگر برای انتخاب ESP32، KY-040، سنسورها، ماژولها یا سایر قطعات پروژه
خود سوال دارید، قبل از خرید و طراحی مدار میتوانید برای مشاوره فنی با
مجموعه پژوهشگران در ارتباط باشید.
سوالات متداول انکودر چرخشی و ESP32
روتاری انکودر ESP32 چگونه به برد متصل می شود؟
در یک اتصال نمونه میتوان CLK و DT را به دو GPIO ورودی و SW را به یک
GPIO دیگر متصل کرد. در این مقاله از GPIO25، GPIO26 و GPIO27 استفاده شده است.
آیا KY-040 برای ESP32 مناسب است؟
بله، KY-040 یکی از ماژولهای متداول برای پروژههای مبتنی بر میکروکنترلر
است و میتوان از آن برای ساخت رابطهای چرخشی استفاده کرد.
Polling بهتر است یا Interrupt؟
برای پروژههای ساده Polling راحتتر است، اما در پروژههای سریعتر یا
زمانی که پردازنده وظایف دیگری دارد، Interrupt گزینه مناسبتری است.
جمع بندی
استفاده از یک روتاری انکودر در کنار ESP32 روشی ساده برای ساخت رابطهای
کاربری و کنترل پارامترهای مختلف است. دو کانال A و B جهت و مقدار حرکت را
مشخص میکنند و کلید SW نیز امکان اجرای یک فرمان جداگانه را فراهم میکند.
برای پروژههای ساده، Polling نقطه شروع خوبی است و برای کاربردهای سریعتر
میتوان سراغ Interrupt رفت. انتخاب GPIO مناسب، توجه به Debounce و بررسی
مشخصات دقیق ماژول نیز در عملکرد نهایی اهمیت دارد.
💬 تجربه شما از کار با انکودر چیست؟
اگر قبلاً با KY-040، ESP32 یا انکودرهای چرخشی کار کردهاید،
تجربهتان را در بخش نظرات با ما و سایر کاربران به اشتراک بگذارید.
اگر با مشکل پرش شمارش، تشخیص جهت یا Debounce روبهرو شدهاید،
راهحل خودتان را هم بنویسید؛ شاید تجربه شما مشکل یک کاربر دیگر را حل کند.




