پتانسیومترها و رمزگذارهای چرخشی در نگاه اول تقریباً یکسان به نظر می رسند، اما به روش های مختلفی کار می کنند. با نحوه استفاده از هر دو با آردوینو آشنا شوید.
در میان اجزای کنترل الکترونیکی کاربر، دستگیرههای چرخشی به عنوان یکی از رضایتبخشترین قطعات استفاده میشوند. آنها می توانند صفحه نمایش لمسی و سایر دستگاه های ورودی را تکمیل کنند و همچنین با دکمه ها و سوئیچ ها به خوبی کار کنند. اما چگونه می توانید یک دستگیره به پروژه های آردوینو DIY خود اضافه کنید؟
شما دو گزینه اصلی دارید: یک پتانسیومتر یا یک رمزگذار چرخشی. ممکن است این قطعات شبیه به هم به نظر برسند، اما روشهای استفاده از آنها با دستگاهی مانند برد میکروکنترلر آردوینو بسیار متفاوت است. بیایید ببینیم آنها چگونه با یکدیگر مقایسه می کنند.
پتانسیومترها در مقابل رمزگذارهای چرخشی
بیشتر پتانسیومترها و انکودرهای چرخشی که علاقه مندان به کارهای DIY با آنها روبرو می شوند، به شکلی مشابه هستند. آنها دارای یک پایه مکعبی یا استوانه ای با پایه های اتصال متصل هستند و یک محور گرد که می پیچد و دارای برش هایی برای یک کلاهک برای نشستن است.
برخی از پتانسیومترها متفاوت به نظر می رسند، مانند آنهایی که به شکل اسلایدهای بلند هستند، مانند آنهایی که در عرشه های میکس موسیقی یافت می شوند. با این حال، وقتی صحبت از نوع چرخشی به میان میآید، در نگاه اول تقریباً شبیه رمزگذارهای چرخشی به نظر میرسند، بنابراین فکر میکنید که آنها یکسان هستند، شما را ببخشید.
پتانسیومتر چیست؟
یک پتانسیومتر در اصل یک مقاومت متغیر است. با چرخاندن شفت، مقاومت داخل پتانسیومتر تغییر میکند و به کاربر اجازه میدهد تا ویژگیهای مدار را بدون نیاز به بازسازی آن تغییر دهد. پتانسیومترها می توانند هم آنالوگ و هم دیجیتال باشند، اما پتانسیومترهای دیجیتال شبیه به آنالوگ هستند و این باعث می شود که استفاده از آنها بسیار شبیه باشد.
پتانسیومترها همیشه یک نقطه شروع و پایان مشخص دارند که در آن شفت دیگر نمی تواند چرخانده شود. برخی از پتانسیومترها هنگام چرخاندن احساس ناهمواری دارند، اما بسیاری از آنها نیز صاف هستند، مانند مواردی که در استریوهای قدیمی یافت می شوند.
با وجود آنالوگ بودن، پتانسیومترها به خوبی با میکروکنترلرها کار می کنند. شما به راحتی می توانید یک پتانسیومتر را با Raspberry Pi Pico یا Arduino تنظیم کنید.
رمزگذار روتاری چیست؟
انکودرهای چرخشی موقعیت شفت خود را با استفاده از یک سنسور تعیین می کنند تا سیگنال آنالوگ یا دیجیتال را به دستگاهی که به آن متصل هستند ارائه دهد. این به دستگاه می گوید که انکودر در کدام موقعیت قرار دارد. در کنار شفت چرخان، رمزگذارهای چرخشی معمولاً یک دکمه داخلی نیز دارند که با فشار دادن شفت به سمت پایین فعال می شود.
برخلاف پتانسیومترها، رمزگذارهای چرخشی می توانند بدون توقف بچرخند و تقریباً همیشه برای هر یک از موقعیت های شفت برجستگی های لمسی دارند. بسیاری از خودروهای مدرن از رمزگذارهای چرخشی برای کنترل سیستم های سرگرمی خود استفاده می کنند.
نحوه استفاده از پتانسیومتر با آردوینو
به لطف طراحی ساده آنها، استفاده از پتانسیومتر با آردوینو ساده است. پتانسیومتر شما سه کانکتور دارد: زمین، خروجی و vref. پایه های زمین و vref به ترتیب به کانکتورهای GND و 5 ولت آردوینو متصل می شوند، در حالی که پایه خروجی پتانسیومتر به یکی از ورودی های آنالوگ برد شما متصل می شود.
کد پتانسیومتر آردوینو
کد پتانسیومتر آردوینو شما با قالب پایه setup() و loop() شروع می شود که هنگام ایجاد یک فایل جدید در Arduino IDE خواهید دید. ابتدا، یک متغیر const int را در ابتدای کد اضافه کنید تا اتصال پین آنالوگ دیگ را ثبت کنید – در این مورد، A0.
const int potentiometer = A0;
به دنبال این، تابع setup() ساده است: فقط باید پین پتانسیومتر خود را به عنوان ورودی اعلام کنید. همچنین اگر میخواهید دادهها را برای تشخیص به رایانه شخصی خود ارسال کنید، میتوانید اتصال سریال را شروع کنید.
void setup() {
pinMode(potentiometer, INPUT);
Serial.begin(9600);
}
در مرحله بعد، زمان تنظیم تابع ()loop است. با ایجاد یک متغیر int با استفاده از تابع analogRead() برای ذخیره موقعیت پتانسیومتر خود شروع کنید. به دنبال این، می توانید از تابع map () برای کاهش اندازه مقدار مورد نظر استفاده کنید – در این مثال برای مطابقت با مشخصات PWM، به عنوان مثال برای کنترل روشنایی یک LED. برای اطمینان از ثبات، یک تاخیر کوتاه اضافه کنید.
void loop() {
int potentiometerValue = analogRead(potentiometer);
map(potentiometerValue, 0, 1023, 0, 255);
Serial.println(potentiometerValue);
delay(10);
}
اکنون که موقعیت پتانسیومتر خود را دارید، می توانید از آن با سایر قسمت های کد استفاده کنید. به عنوان مثال، یک دستور if برای راه اندازی کد زمانی که پتانسیومتر در یک موقعیت خاص قرار دارد، به خوبی کار می کند.
const int potentiometer = A0;
void setup() {
pinMode(potentiometer, INPUT);
Serial.begin(9600);
}
void loop() {
int potentiometerValue = analogRead(potentiometer);
map(potentiometerValue, 0, 1023, 0, 255);
Serial.println(potentiometerValue);
delay(10);
}
نحوه استفاده از رمزگذار چرخشی با آردوینو
انکودرهای چرخشی نسبت به پتانسیومترها به کد پیچیده تری نیاز دارند، اما هنوز کار کردن با آنها نسبتاً آسان است. رمزگذار چرخشی شما دارای پنج پایه است: زمین، VCC، یک پایه دکمه (SW)، خروجی A (CLK)، و خروجی B (DT). پایه های زمین و VCC به ترتیب به زمین و کانکتورهای 5 ولت آردوینو متصل می شوند، در حالی که پایه های SW، CLK و BT به کانکتورهای دیجیتال جداگانه در آردوینو متصل می شوند.
کد رمزگذار روتاری آردوینو
برای سادهتر کردن کد و کار با آن، از کتابخانه SimpleRotary Arduino که توسط MPrograms در GitHub ایجاد شده است استفاده میکنیم. قبل از شروع کار بر روی کد، مطمئن شوید که این کتابخانه را نصب کرده اید.
مانند کد پتانسیومتر خود، میتوانید اسکریپت رمزگذار چرخشی خود را با الگوی تابع () setup و loop() Arduino شروع کنید. با اعلام کتابخانه SimpleRotary و اختصاص پین های رمزگذار خود به این ترتیب شروع کنید. CLK، DT، و SW.
#include
SimpleRotary rotary(1,2,3);
نیازی نیست چیزی به تابع setup() خود اضافه کنید مگر اینکه بخواهید از مانیتور سریال برای تشخیص رمزگذار چرخشی خود استفاده کنید.
void setup() {
Serial.begin(9600);
}
تابع ()loop داستان متفاوتی است. تعیین چرخش شفت رمزگذار با فراخوانی تابع rotary.rotate() شروع می شود که به یک متغیر int اختصاص داده می شود. اگر نتیجه 1 باشد، رمزگذار در جهت عقربه های ساعت می چرخد. اگر نتیجه 2 باشد، رمزگذار در خلاف جهت عقربه های ساعت می چرخد. اگر رمزگذار از آخرین بررسی چرخیده نشده باشد، نتیجه همیشه 0 خواهد بود.
بسته به جهت چرخش رمزگذار می توانید از دستورات if برای راه اندازی کدهای دیگر استفاده کنید.
void loop(){
int encoderRotation;
encoderRotation = rotary.rotate();
if (encoderRotation == 1) {
Serial.println("clockwise");
}
if (encoderRotation == 2) {
Serial.println("counter-clockwise");
}
}
همچنین باید مقداری کد برای دکمه رمزگذار خود به تابع ()loop اضافه کنید. این فرآیند بسیار شبیه است، با این تفاوت که شما از تابع rotary.push() به جای rotary.rotate().
void loop(){
int encoderButton;
encoderButton = rotary.push();
if (encoderButton == 1) {
Serial.println("button pressed");
}
}
این اسکریپت بسیار ساده است و شما می توانید کارهای زیادی انجام دهید تا آن را متعلق به خود کنید. ارزش بررسی مستندات پروژه SimpleRotary را دارد تا مطمئن شوید که از تمام ویژگی های کلیدی آن استفاده می کنید. پس از جمع آوری، کد رمزگذار شما باید شبیه به این باشد.
#include
SimpleRotary rotary(1,2,3);
void setup() {
Serial.begin(9600);
}
void loop(){
int encoderRotation;
encoderRotation = rotary.rotate();
if (encoderRotation == 1) {
Serial.println("clockwise");
}
if (encoderRotation == 2) {
Serial.println("counter-clockwise");
}
int encoderButton;
encoderButton = rotary.push();
if (encoderButton == 1) {
Serial.println("button pressed");
}
}
نحوه انتخاب بین پتانسیومترها و رمزگذارهای چرخشی برای پروژه ها
همانطور که می بینید، رمزگذارهای چرخشی و پتانسیومترها کاملاً متفاوت عمل می کنند. هر دوی این مؤلفهها راههای جدیدی برای کنترل پروژههای الکترونیکی به شما میدهند، اما کدام یک را باید انتخاب کنید؟
پتانسیومترها مقرون به صرفه و آسان برای استفاده هستند، اما فقط محدوده ورودی محدودی را امکان پذیر می کنند. وقتی میخواهید روشنایی یک LED را کنترل کنید یا برق اجزای خاص و سایر کارهای مشابه را کم و زیاد کنید، آنها را عالی میکند.
انکودرهای چرخشی دامنه بسیار بیشتری نسبت به پتانسیومترها ارائه می دهند. گنجاندن یک دکمه فشاری به این معنی است که آنها برای سیستم های کنترل منو عالی هستند، همانطور که در بسیاری از اتومبیل های مدرن دیده می شود. این نوع قطعه در فضای ساختمان کیبورد مکانیکی بسیار محبوب شده است. حتی می توانید یک ماکروپد کوچک با رمزگذار داخلی بسازید.
نگاه مشابه، اجزای مختلف
با داشتن تمام این اطلاعات در زیر کمربند خود، باید برای شروع یک پروژه الکترونیکی با پتانسیومتر یا رمزگذار چرخشی آماده باشید. این اجزا می توانند کنترل زیادی بر مدارهایی که می سازید به شما بدهند، اما باید مطمئن شوید که گزینه درستی را برای پروژه خود انتخاب کرده اید.