فهرست مطالب:

یک راه حل کامل روتاری آردوینو: 5 مرحله
یک راه حل کامل روتاری آردوینو: 5 مرحله

تصویری: یک راه حل کامل روتاری آردوینو: 5 مرحله

تصویری: یک راه حل کامل روتاری آردوینو: 5 مرحله
تصویری: آشنایی با ربات کدنویسی باتلی - جعبه گشایی 2024, جولای
Anonim
یک راه حل کامل روتاری آردوینو
یک راه حل کامل روتاری آردوینو

رمزگذارهای روتاری دستگیره های قابل چرخش برای پروژه های الکترونیکی هستند که اغلب با میکروکنترلرهای خانواده آردوینو استفاده می شوند. از آنها می توان برای تنظیم دقیق پارامترها ، حرکت در منوها ، جابجایی اشیاء روی صفحه ، تنظیم مقادیر از هر نوع استفاده کرد. آنها جایگزین های متداول پتانسیومترها هستند ، زیرا می توان آنها را با دقت و بی نهایت چرخاند ، در یک زمان یک مقدار گسسته را افزایش یا کاهش می دهند و اغلب با یک کلید قابل فشار برای انتخاب توابع نوع ترکیب می شوند. آنها در همه اشکال و اندازه ها وجود دارند ، اما ارتباط با پایین ترین محدوده قیمت دشوار است ، همانطور که در زیر توضیح داده شده است.

مقالات بیشماری در مورد جزئیات کار و نحوه استفاده از رمزگذارهای روتاری ، و کدهای نمونه متعدد و کتابخانه ها در مورد نحوه استفاده از آنها وجود دارد. تنها مشکل این است که هیچ یک از آنها 100٪ دقیق با کمترین محدوده قیمت ماژول های دوار چینی کار نمی کنند.

مرحله 1: رمزگذارهای روتاری در داخل

رمزگذار روتاری در داخل
رمزگذار روتاری در داخل
رمزگذار روتاری در داخل
رمزگذار روتاری در داخل
رمزگذار روتاری در داخل
رمزگذار روتاری در داخل

قسمت چرخشی رمزگذار دارای سه پایه (و دو قسمت دیگر برای قسمت سوئیچ اختیاری) است. یکی زمینه مشترک (GND سیاه) ، دو مورد دیگر برای تعیین جهت هنگام چرخاندن دستگیره است (آنها اغلب CLK آبی و DT قرمز نامیده می شوند). هر دوی اینها به یک پین ورودی PULLUP از میکروکنترلر متصل شده و سطح HIGH را به عنوان پیش فرض خوانده می کند. وقتی دکمه به جلو (یا در جهت عقربه های ساعت) بچرخد ، ابتدا CLK آبی به سطح LOW می افتد ، سپس DT قرمز دنبال می شود. با چرخش بیشتر ، CLK آبی به HIGH باز می گردد ، سپس وقتی پچ GND معمولی هر دو پین اتصال را ترک می کند ، DT قرمز نیز به HIGH برمی گردد. بنابراین یک تیک کامل FWD (یا در جهت عقربه های ساعت) تکمیل کنید. در جهت دیگر BWD (یا خلاف جهت عقربه های ساعت) حرکت می کند ، اما در حال حاضر ابتدا رنگ قرمز پایین می آید و آبی که آخرین بار به ترتیب در تصاویر دو سطح نشان داده شده ، آخرین بار به عقب برمی گردد.

مرحله 2: بدبختی که برای بسیاری درد واقعی ایجاد می کند

بدبختی که برای بسیاری درد واقعی ایجاد می کند
بدبختی که برای بسیاری درد واقعی ایجاد می کند
بدبختی که برای بسیاری درد واقعی ایجاد می کند
بدبختی که برای بسیاری درد واقعی ایجاد می کند
بدبختی که برای بسیاری درد واقعی ایجاد می کند
بدبختی که برای بسیاری درد واقعی ایجاد می کند

مشکل رایج علاقه مندان به آردوینو این است که ماژول های رمزگذار ارزان روتاری تغییرات اضافی را در سطوح خروجی باز می گردانند و باعث می شود شمارش جهت اضافی و اشتباه انجام شود. این از شمارش بی عیب و نقص جلوگیری می کند و ادغام این ماژول ها در پروژه های دوار دقیق را غیرممکن می سازد. این جهش های اضافی در اثر حرکات مکانیکی وصله ها بر روی پین های اتصال ایجاد می شود و حتی استفاده از خازن های اضافی نمی تواند آنها را به طور کامل از بین ببرد. برگشت ها می توانند در هر دوره ای از چرخه های تیک کامل ظاهر شوند و با سناریوهای واقعی در تصاویر نشان داده می شوند.

مرحله 3: راه حل ماشین حالت محدود (FSM)

راه حل ماشین حالت محدود (FSM)
راه حل ماشین حالت محدود (FSM)

تصویر فضای کامل تغییرات احتمالی سطح را برای دو پین (CLK آبی و قرمز DT) نشان می دهد ، هر دو برای برگشت صحیح و غلط. بر اساس این دستگاه حالت یک راه حل کامل را می توان برنامه ریزی کرد که همیشه 100 accurate دقیق کار می کند. از آنجا که هیچ تأخیر فیلترینگ در این محلول لازم نیست ، همچنین سریعترین ممکن است. یکی دیگر از مزایای جداسازی فضای حالت پین ها از حالت کار این است که می توانید هر دو حالت نظرسنجی یا وقفه را به دلخواه خود اعمال کنید. نظرسنجی یا وقفه می تواند تغییرات سطح را در پین ها تشخیص دهد و یک روال جداگانه وضعیت جدید را بر اساس وضعیت فعلی و رویدادهای واقعی تغییرات سطح محاسبه می کند.

مرحله 4: کد آردوینو

کد آردوینو
کد آردوینو

کد زیر تیک های FWD و BWD را در مانیتور سریال شمارش می کند و عملکرد سوئیچ اختیاری را نیز ادغام می کند.

// پیتر سورگای 2019-04-10

// پین های روتاری نقشه برداری شده برای پورت های آردوینو

#define SW 21 #define CLK 22 #define DT 23

// مقدار فعلی و قبلی شمارنده تنظیم شده توسط چرخشی

int curVal = 0؛ int prevVal = 0؛

// هفت حالت FSM (ماشین حالت محدود)

#تعریف IDLE_11 0 #تعریف SCLK_01 1 #تعریف SCLK_00 2 #تعریف SCLK_10 3 #تعریف SDT_10 4 #تعریف SDT_00 5 #تعریف SDT_01 6 حالت int = IDLE_11 ؛

void setup () {

Serial.begin (250000) ؛ Serial.println ("شروع …") ؛ // سطح HIGH به طور پیش فرض برای همه پین pinMode (SW ، INPUT_PULLUP) خواهد بود. pinMode (CLK ، INPUT_PULLUP) ؛ pinMode (DT ، INPUT_PULLUP) ؛ // هر دو CLK و DT باعث ایجاد وقفه برای همه تغییرات سطح attachInterrupt (digitalPinToInterrupt (CLK) ، rotaryCLK ، CHANGE) می شوند. attachInterrupt (digitalPinToInterrupt (DT) ، rotaryDT ، CHANGE) ؛ }

حلقه خالی () {

// مدیریت سوئیچ اختیاری که در برخی از رمزگذارهای چرخشی یکپارچه شده است (digitalRead (SW) == LOW) {Serial.println ("Pressed") ؛ در حالی که (! digitalRead (SW)) ؛ } // هرگونه تغییر در مقدار شمارنده در Serial Monitor if (curVal! = prevVal) {Serial.println (curVal) نمایش داده می شود؛ prevVal = curVal؛ }}

// انتقال حالت دولت برای تغییرات سطح CLK

void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01؛ else if (state == SCLK_10) state = SCLK_00؛ else if (state == SDT_10) state = SDT_00؛ } else {if (state == SCLK_01) state = IDLE_11؛ else if (state == SCLK_00) state = SCLK_10؛ else if (state == SDT_00) state = SDT_10؛ else if (state == SDT_01) {state = IDLE_11؛ curVal-- ؛ }}}

// انتقال حالت دولت برای تغییرات سطح DT

void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10؛ else if (state == SDT_01) state = SDT_00؛ else if (state == SCLK_01) state = SCLK_00؛ } else {if (state == SDT_10) state = IDLE_11؛ else if (state == SDT_00) state = SDT_01؛ else if (state == SCLK_00) state = SCLK_01؛ else if (state == SCLK_10) {state = IDLE_11؛ curVal ++ ؛ }}}

مرحله 5: ادغام بی عیب و نقص

در ویدئوی پیوست می توانید بررسی کنید که راه حل FSM دقیق و سریع حتی در صورت رمزگذارهای دورانی با برد کم با جلوه های گزاف گویی پراکنده مختلف کار می کند.

توصیه شده: