در این مقاله به طور کامل نحوه راه اندازی روتاری انکودر با آردوینو را آموزش خواهیم داد. روتاری انکودرها نوعی سنسور هستند که برای اندازهگیری زاویه یا سرعت چرخش یک محور استفاده میشوند و کاربردهای فراوانی در پروژههای مختلف مانند رباتیک و کنترل سرووها و… دارند. در این مقاله، ابتدا با مفاهیم پایهای روتاری انکودر و نحوه عملکرد آنها آشنا میشویم. سپس، به طور گام به گام مراحل اتصال و راه اندازی انکودر به برد آردوینو را آموزش خواهیم داد. در ادامه، کدهای لازم برای خواندن مقادیر انکودر و کاربردهای مختلف آن را بررسی میکنیم.
در این مقاله چه میخوانیم؟
- روتاری انکودر چه تفاوتی با پتاسیومتر دارد؟
- نحوه کار روتاری انکودر
- پایههای ماژول روتاری انکودر
- سیمکشی – راه اندازی ماژول روتاری انکودر با آردوینو
- خواندن کد آردوینو
- توضیحات هر کد
- راه اندازی ماژول روتاری انکودر با وقفه آردوینو
- کنترل سروو موتور با روتاری انکودر (سیم کشی، کد آردوینو)
روتاری انکودر چه تفاوتی با پتاسیومتر دارد؟
درست است که هر دو روتاری انکودر و پتاسیومتر برای اندازهگیری زاویه یا موقعیت چرخشی استفاده میشوند، اما تفاوتهای اساسی بین آنها وجود دارد که کاربرد هر کدام را در شرایط مختلف مشخص میکند. در جدول زیر خلاصهای از تفاوتهای اصلی بین روتاری انکودر و پتاسیومتر را بررسی میکنیم.
ویژگی | پتاسیومتر | روتاری انکودر |
نوع خروجی | آنالوگ | دیجیتال |
دقت | کم | بالا |
محدوده اندازهگیری | محدود | نامحدود |
کاربرد | تنظیمات ساده | کاربردهای دقیق |
هزینه | ارزان | گران |
حال اگر بخواهیم عمیقتر به تفاوت این دو قطعه بپردازیم، موارد به شرح زیر میشوند:
نوع خروجی:
- پتاسیومتر: خروجی آنالوگ (ولتاژ) ارائه میدهد که با زاویه چرخش متناسب است.
- روتاری انکودر: خروجی دیجیتال (پالس) ارائه میدهد که تعداد پالسها با زاویه چرخش نسبت مستقیم دارد.
دقت:
- پتاسیومتر: دقت کمتری دارد و ممکن است در اثر نویز و عوامل محیطی دچار خطا شود.
- روتاری انکودر: دقت بسیار بالایی دارد و در برابر نویز و عوامل محیطی مقاومتر است.
محدوده اندازهگیری:
- پتاسیومتر: معمولا محدوده چرخشی محدودی (مثلا 0 تا 360 درجه) دارد.
- روتاری انکودر: محدودیت زاویهای ندارد و میتواند چرخشهای 360 درجه و بیشتر را اندازهگیری کند.
کاربرد:
- پتاسیومتر: برای تنظیمات ساده مانند تنظیم ولوم صدا یا روشنایی مناسب است.
- روتاری انکودر: برای کاربردهای دقیقتر مانند کنترل رباتها، سرووها، و ماشینهای CNC مناسبتر است.
هزینه:
- پتاسیومتر: معمولا ارزانتر از روتاری انکودر است.
- روتاری انکودر: به دلیل پیچیدگی بیشتر، گرانتر از پتاسیومتر است.
حال به سراغ راه اندازی روتاری انکودر با آردوینو و نحوه کار آن میپردازیم.
نحوه کار روتاری انکودر
روتاری انکودرها سنسورهایی هستند که برای اندازهگیری زاویه یا سرعت چرخش یک محور استفاده میشوند. آنها در زمینههای مختلفی مانند رباتیک، کنترل سرووها، تنظیمات دقیق و … کاربرد دارند.
دیسک و سنسور
یک دیسک چرخان که به محور متصل است، هسته اصلی کار انکودر است. این دیسک دارای تعداد مشخصی شکاف یا خطوط است. در مقابل این دیسک، یک سنسور نوری یا مغناطیسی قرار دارد.
پالس و زاویه
با چرخش دیسک، سنسور نور یا میدان مغناطیسی را از بین شکافها یا خطوط عبور میکند. هر بار عبور از یک شکاف یا خط، یک پالس الکتریکی تولید میشود. تعداد پالسهای تولید شده با زاویه چرخش محور نسبت مستقیم دارد. به عبارتی، هر چه زاویه چرخش بیشتر باشد، پالسهای بیشتر تولید میشود.
جهت و کاربرد
برخی از انکودرها دارای دو سنسور هستند که میتوانند جهت چرخش را نیز تشخیص دهند. با توجه به ترتیب تولید پالسها در هر سنسور، جهت چرخش مشخص میشود.
خرید روتاری انکودر برای کنترل سرووها، تنظیم مقادیر، اندازهگیری زاویه و سرعت در ماشینآلات مختلف و … استفاده میشود.
پایههای ماژول روتاری انکودر
برای راه اندازی روتاری انکودر با آردوینو باید با پایههای ماژول روتاری انکودر نیز آشنا باشید. پایههای رایج در یک ماژول روتاری انکودر و عملکرد آنها به شرح زیر است:
- VCC: این پایه منبع تغذیه ماژول را تامین میکند و معمولا به ولتاژ 3.3 یا 5 ولت DC متصل میشود.
- GND: این پایه زمین ماژول است و به زمین منبع تغذیه متصل میشود.
- A: این پایه یکی از پایههای سیگنال خروجی انکودر است. با چرخش شافت انکودر، پالسهایی با ولتاژ بالا و پایین از این پایه خارج میشود.
- B: این پایه دیگر پایه سیگنال خروجی انکودر است. پالسهای تولید شده از این پایه با پالسهای پایه A همفاز یا 180 درجه اختلاف فاز دارند.
- CLK: این پایه (که گاهی اوقات SW نیز نامیده میشود) برای دکمهی فشاری روی انکودر است. اگر انکودر دارای دکمه باشد، با فشردن آن، پالسی از این پایه خروج میکند.
برخی از ماژولهای روتاری انکودر ممکن است پایههای دیگری نیز داشته باشند، مانند:
- Z: این پایه برای نشان دادن یک دور کامل شافت انکودر استفاده میشود. هر بار که شافت یک دور کامل میچرخد، یک پالس از این پایه خارج میشود.
- RESET: این پایه برای ریست کردن شمارش انکودر به موقعیت اولیه استفاده میشود.
سیمکشی – راه اندازی ماژول روتاری انکودر با آردوینو
برای راه اندازی یک ماژول روتاری انکودر با آردوینو، به موارد زیر نیاز دارید:
- برد آردوینو (مانند Uno، Nano یا Mega)
- ماژول روتاری انکودر
- سیمهای جامپر
- (اختیاری) نمایشگر LCD
مراحل کار:
اتصال ماژول انکودر به آردوینو:
- پایه VCC ماژول را به پین 5 ولت آردوینو وصل کنید.
- اتصال پایه GND ماژول را به پین GND.
- پایه A ماژول را به پین دیجیتال 2 آردوینو وصل کنید.
- اتصال پایه B ماژول را به پین دیجیتال 3.
(اختیاری) اتصال نمایشگر LCD
برای نمایش مقادیر خوانده شده توسط انکودر، میتوانید از یک نمایشگر LCD استفاده کنید. اتصالات LCD به آردوینو به نوع LCD شما بستگی دارد.
بارگذاری کد آردوینو:
کد زیر را در برنامه آردوینو خود بارگذاری کنید:
آزمایش:
- برد آردوینو را روشن کنید.
- شافت انکودر را بچرخانید.
- مقادیر خوانده شده توسط انکودر در مانیتور سریال چاپ میشوند.
خواندن کد آردوینو
حال که دانستیم راه اندازی روتاری انکودر با آردوینو چگونه است، باید گفت که برای خواندن کد آردوینو، به چند روش میتوانید عمل کنید:
استفاده از محیط برنامه نویسی آردوینو (Arduino IDE)
این روش رایج ترین روش برای خواندن کد آردوینو است. برای این کار مراحل زیر را دنبال کنید:
- نرم افزار Arduino IDE را دانلود و نصب کنید. (https://arduinoo.ir/arduino-download/)
- برد آردوینو خود را به کامپیوتر متصل کنید.
- فایل کد آردوینو را که میخواهید باز کنید، در Arduino IDE بیابید.
- روی دکمه “Open” کلیک کنید.
- کد در ویرایشگر متن Arduino IDE باز میشود.
- میتوانید کد را بخوانید، آن را ویرایش کنید و آن را بر روی برد آردوینو خود آپلود نمایید.
استفاده از ویرایشگر متن
میتوانید از هر ویرایشگر متنی برای خواندن کد آردوینو استفاده کنید. برخی از ویرایشگرهای متن محبوب برای این کار عبارتند از: Notepad++، Sublime Text و Visual Studio Code.
برای خواندن کد آردوینو با استفاده از ویرایشگر متن، مراحل زیر را دنبال کنید:
- ویرایشگر متن خود را باز کنید.
- فایل کد آردوینو را که میخواهید باز کنید، پیدا کنید.
- روی فایل دوبار کلیک کنید.
- کد در ویرایشگر متن باز میشود.
- میتوانید کد را بخوانید و آن را ویرایش کنید.
توجه: برای ویرایش کد آردوینو و آپلود آن بر روی برد آردوینو، باید Arduino IDE را مورد استفاده قرار دهید.
استفاده از ابزارهای آنلاین
چندین ابزار آنلاین وجود دارد که به شما امکان میدهد کد آردوینو را بخوانید. برخی از ابزارهای آنلاین محبوب برای این کار عبارتند از: Pastebin، GitHub و Codepen.
برای خواندن کد آردوینو با استفاده از ابزار آنلاین، مراحل زیر را دنبال کنید:
- به ابزار آنلاین مورد نظر خود بروید.
- روی دکمه “New Paste” یا “New Snippet” کلیک کنید.
- کد آردوینو را که میخواهید در ویرایشگر متن بچسبانید.
- روی دکمه “Save” یا “Publish” کلیک کنید.
- کد در ابزار آنلاین نمایش داده میشود.
- میتوانید کد را بخوانید و آن را ویرایش کنید.
توجه: برای ویرایش کد آردوینو و آپلود آن بر روی برد آردوینو، باید Arduino IDE را مورد استفاده قرار دهید.
توضیحات هر کد
ساختار کلی یک کد معمولی روتاری انکودر آردوینو و وظایف اصلی بخشهای مختلف آن عبارتاند از:
کتابخانهها
در ابتدای کد، کتابخانههای مورد نیاز برای برنامه گنجانده میشوند. کتابخانههای رایج برای کار با روتاری انکودر در آردوینو عبارتند از:
- Encoder.h: این کتابخانه توابعی برای خواندن مقادیر از انکودر و ردیابی موقعیت آن ارائه میدهد.
- <Arduino.h>: این کتابخانه توابع پایه آردوینو مانند pinMode(), digitalWrite() و delay() را ارائه میدهد.
تعریف پینها
پینهای آردوینو که به پایههای انکودر متصل هستند، تعریف میشوند. به عنوان مثال:
#define A_PIN 2
#define B_PIN 3
اشیاء انکودر
یک شیء از کلاس Encoder برای مدیریت انکودر ایجاد میشود. پینهای A و B بهعنوان آرگومان به سازنده شیء منتقل میشوند. به عنوان مثال:
Encoder encoder(A_PIN, B_PIN);
تنظیمات اولیه
پینهای متصل به انکودر به عنوان ورودی با استفاده از تابع pinMode() تنظیم میشوند. به عنوان مثال:
pinMode(A_PIN, INPUT);
pinMode(B_PIN, INPUT);
حلقه اصلی
این بخش از کد بارها و بارها اجرا میشود. در حلقه اصلی، اقدامات زیر انجام میگردند:
- خواندن موقعیت انکودر: از تابع encoder.read() برای خواندن موقعیت فعلی انکودر استفاده میشود.
- چاپ موقعیت: موقعیت خوانده شده در مانیتور سریال به چاپ میرسد.
- تأخیر: از تابع delay() برای ایجاد وقفه کوتاه بین خواندنها استفاده میشود.
کد کامل
یک نمونه کد کامل برای خواندن مقادیر از یک روتاری انکودر و چاپ آنها در مانیتور سریال در زیر آمده است:
#include <Encoder.h>
#define A_PIN 2
#define B_PIN 3
Encoder encoder(A_PIN, B_PIN);
void setup() {
Serial.begin(9600);
pinMode(A_PIN, INPUT);
pinMode(B_PIN, INPUT);
}
void loop() {
long position = encoder.read();
Serial.print(“Position: “);
Serial.println(position);
delay(100);
}
نکته: این فقط یک کد نمونه است و ممکن است نیاز به اصلاحاتی برای مطابقت با نیازهای خاص شما داشته باشد.
راه اندازی ماژول روتاری انکودر با وقفه آردوینو
استفاده از وقفهها در آردوینو میتواند راه کارآمدتری برای خواندن مقادیر از یک روتاری انکودر باشد، به خصوص زمانی که نیاز به خواندن مقادیر با سرعت بالا دارید.
در این روش، به جای خواندن مداوم موقعیت انکودر در حلقه اصلی، از وقفهها برای اجرای کد فقط زمانی که انکودر تغییر موقعیت میدهد استفاده میشود. راه اندازی روتاری انکودر با آردوینو با استفاده از وقفه عبارتاند از:
مراحل راه اندازی
اتصال ماژول انکودر:
- پایه VCC ماژول را به پین 5 ولت آردوینو وصل کنید.
- پایه GND ماژول را به پین GND آردوینو وصل کنید.
- پایه A ماژول را به پین دیجیتال 2 آردوینو وصل کنید.
- پایه B ماژول را به پین دیجیتال 3 آردوینو وصل کنید.
کد آردوینو:
- کتابخانه Encoder.h را به کد خود اضافه کنید.
- پینهای A و B را به عنوان آرگومان به سازنده شیء Encoder منتقل کنید.
- تابع attachInterrupt() را برای اتصال یک تابع وقفه به پینهای A و B استفاده کنید.
- در تابع وقفه، موقعیت انکودر را بخوانید و هر کاری که میخواهید با آن انجام دهید (مانند چاپ در مانیتور سریال یا کنترل سروو) انجام دهید.
کد نمونه:
#include <Encoder.h>
#define A_PIN 2
#define B_PIN 3
Encoder encoder(A_PIN, B_PIN);
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(A_PIN), encoderOnInterrupt, CHANGE);
attachInterrupt(digitalPinToInterrupt(B_PIN), encoderOnInterrupt, CHANGE);
}
void loop() {
// کد حلقه اصلی شما در اینجا میآید
}
void encoderOnInterrupt() {
long position = encoder.read();
Serial.print(“Position: “);
Serial.println(position);
}
کنترل سروو موتور با روتاری انکودر (سیم کشی، کد آردوینو)
از راه اندازی روتاری انکودر با آردوینو بگذریم، کنترل سروو موتور با روتاری انکودر نیز مهم است. برای کنترل سروو موتور با استفاده از روتاری انکودر در آردوینو، مراحل زیر را دنبال کنید:
اتصالات
ماژول روتاری انکودر:
- اتصال پایه VCC به پین 5 ولت آردوینو
- اتصال پایه GND به پین GND آردوینو
- اتصال پایه A به پین دیجیتال 2 آردوینو
- اتصال پایه B به پین دیجیتال 3 آردوینو
سروو موتور:
- سیم برق (معمولاً قرمز) را به پین 5 ولت آردوینو وصل کنید.
- سیم زمین (معمولاً مشکی) را به پین GND آردوینو وصل کنید.
- سیم کنترل (معمولاً نارنجی) را به پین دیجیتال دلخواه آردوینو وصل کنید.
کد آردوینو
#include <Encoder.h>
#include <Servo.h>
#define A_PIN 2
#define B_PIN 3
#define SERVO_PIN 9
Encoder encoder(A_PIN, B_PIN);
Servo servo;
int servoPosition = 0;
void setup() {
Serial.begin(9600);
servo.attach(SERVO_PIN);
}
void loop() {
long position = encoder.read();
servoPosition = map(position, 0, 360, 0, 180);
servo.write(servoPosition);
Serial.print(“Position: “);
Serial.print(position);
Serial.print(” Servo Position: “);
Serial.println(servoPosition);
delay(100);
}
Use code with caution.
توضیح کد:
- کتابخانههای Encoder.h و Servo.h به کد اضافه میشوند.
- پینهای A و B انکودر و پین سروو موتور تعریف میشوند.
- اشیاء Encoder و Servo برای مدیریت انکودر و سروو موتور ایجاد میشوند.
- متغیر servoPosition برای ذخیره موقعیت فعلی سروو موتور استفاده میشود.
- در تابع setup()، پورت سریال برای چاپ اطلاعات راه اندازی میشود و شیء Servo به پین سروو متصل میگردد.
- در حلقه اصلی، موقعیت انکودر خوانده میشود.
- مقدار خوانده شده به مقیاسی که سروو موتور میتواند بفهمد (0 تا 180 درجه) تبدیل میشود.
- موقعیت جدید به سروو موتور ارسال میشود.
- موقعیت انکودر و موقعیت سروو موتور در مانیتور سریال چاپ میشود.
- تاخیر 100 میلی ثانیه ای قبل از خواندن مجدد انکودر اعمال میگردد.
جمع بندی
راهاندازی روتاری انکودر با آردوینو شامل اتصال پایههای انکودر به پینهای دیجیتال آردوینو و نوشتن کد برای خواندن سیگنالهای خروجی انکودر است. ابتدا پایههای سیگنال A و B انکودر را به پینهای دیجیتال و پایه مشترک (GND) را به زمین آردوینو متصل کنید. سپس با استفاده از توابع وقفه (Interrupt) در کدنویسی، پالسهای انکودر را شمارش کنید تا موقعیت و جهت چرخش شفت را تشخیص دهید. این فرآیند برای کاربردهایی مثل اندازهگیری زاویه، کنترل موقعیت و سرعت چرخش در پروژههای روباتیک و اتوماسیون مناسب است.
سوالات متداول
چگونه میتوان از وقفهها برای خواندن سیگنالهای روتاری انکودر استفاده کرد؟
با استفاده از توابع attachInterrupt() در آردوینو میتوان وقفههایی برای پایههای دیجیتال متصل به سیگنالهای A و B تنظیم کرد تا هنگام تغییر وضعیت سیگنالها، روتین خاصی اجرا شود و پالسها شمارش شوند.
چگونه جهت چرخش شفت را با روتاری انکودر تشخیص دهیم؟
جهت چرخش شفت را با بررسی ترتیب وقوع پالسهای سیگنال A و B میتوان تشخیص داد. اگر سیگنال A قبل از سیگنال B فعال شود، شفت در یک جهت و اگر سیگنال B قبل از سیگنال A فعال شود، شفت در جهت مخالف میچرخد.
چگونه میتوان مقدار چرخش انکودر مطلق را پس از قطع و وصل شدن برق حفظ کرد؟
انکودرهای مطلق دارای خروجی دیجیتال منحصر به فرد برای هر موقعیت زاویهای هستند، بنابراین با خواندن مستقیم کد خروجی انکودر مطلق در هر لحظه، میتوان موقعیت دقیق شفت را حتی پس از قطع و وصل شدن برق حفظ کرد.