آردوینو آردوینو Arduino Uno پروژه های آردوینو پکیج سنسور آردوینو

روتاری انکودر Rotary Encoder از پکیج سنسور آردوینو

نوشته شده توسط علیرضا قربانی

در ادامه‌ی سری آموزش‌های پکیج سنسور آردوینو  ، امروز قصد داریم طریقه‌ی راه اندازی روتاری انکودر ( انکودر دوار  – Rotary Encoder ) و مکانیز عمل آن را به شما آموزش دهیم . در ادامه‌ی آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

 

روتاری انکودر چیست ؟ (Rotary Encoder)

روتاری انکودر (یا انکودر دوار) یک سنسور رمز گذار چرخشی دوار است که وظیفه‌‌‌ی آن مشخص کردن  مقدار چرخش شفت و جهت چرخش آن می‌باشد.در اتوماسیون صنعتی از انکودرهای دوار به عنوان سنسور زاویه، موقعیت، سرعت و شتاب استفاده می­ شود. با استفاده از ابزارهایی چون چرخ دنده ها و تسمه نقاله،  توسط این انکودرها حرکات خطی را نیز می­ توان کنترل کرد. انکودرهای دوار عموماً چرخش مکانیکی را به سیگنالی الکتریکی تبدیل می ­کنند که می­ توان آن را توسط شمارنده­ ها، تاکومترها و کنترل کننده­ های دیجیتالی پردازش نمود.

روتاری انکودر Rotary encoder انکودر دوار

انکودر دوار – Rotary Encoder

 

سخت افزار مورد نیاز

آردوینو UNO

روتاری  انکودر از پکیج سنسور آردوینو

 

ساختار انکودر‌های دوار

 

یکی از اجزای اصلی انکودرهای دوار، دیسکی شیشه ای یا پلاستیکی است که به صورت یک در میان با نوارهای شفاف و نوارهای تیره پوشانده شده است. یک منبع نوری در یک سمت و یک حسگر نوری نیز در سمت دیگر دیسک قرار می­ گیرند.همزمان با چرخش شفت و به تبع آن چرخش دیسک، تابش نور به حسگر قطع و وصل می ­گردد. هرگاه نور به حسگر برخورد می­ کند، انکودر یک پالس الکتریکی ایجاد می­ کند. هنگامی که نور توسط بخش تیره دیسک بازتاب شده و به حسگر نمی­ رسد، سیگنال نیز قطع می­ گردد. بنابراین با چرخش مداوم دیسک، یک موج مربعی ایجاد می­ شود. ( برگرفته از motordrive.ir )

ساختار-کلی-انکودرهای-دوار

ساختار کلی انکودرهای دوار

 

انکودری که در اختیار شماست دارای ۳۰ عدد توار مشکی و شفاف می‌باشد که با هر چرخش شفت یک سیگنال تولید می‌کنند.

 

Rotary-Encoder-Pins

پین‌های انکودر دوار (روتاری انکودر)

در یک طرف از انکودری که در اختیار شماست ، سه پین به نام‌های A ، B  و  C قرار دارد.(همانطور که در تصویر مشاهده می‌کنید)

 

درون انکودر دو عدد سوییچ قرار دارد. یکی از سوییچ‌ها پین A را به C متصل می‌کند و سوییچ دیگر پین B ٰرا به C متصل می‌کند.

 

در هر وضعیتی که شافت انکودر قرار دارد ، هر دوسوییچ یا در وضعیت باز قرار دارند یا در وضعیت بسته. با هر تحریک کوچک شافت انکودر(چرخاندن شافت) باعث می‌شود که وضعیت باز و بسته بودن سوییچ‌ها بر اساس موارد زیر تغییر کند:

  • اگر هر دو سوییچ در وضعیت بسته قرار داشته باشند: چرخاندن انکودر در جهت ساعت گرد یا پادساعت گرد باعث باز شدن سوییچ‌ها می‌شود.
  • اگر هر دو سوییچ در وضعیت باز قرار داشته باشند : چرخاندن انکودر در جهت ساعت گرد یا پادساعت گرد باعث بسته شدن سوییچ‌ها می‌شود.

 

 

 

 

تصویر زیر ساختاری از نحوه‌ی قرارگیری سوییچ‌ها را نمایش می‌دهد.

قرار گیری سوییج‌ها در انکودر دوار

قرار گیری سوییج‌ها در انکودر دوار (روتاری انکودر  rotary encoder )

 

 

همانطور که در تصوبر بالا مشاهده می‌کنید ، زاویه‌ی پین A و B  به دو صورت زیر می‌باشد:

  • هنگامی که شافت انکودر به صورت ساعت‌گرد بچرخد : در این حالت ابتدا سوییچ A به C متصل می‌شود.
  • هنگامی که شافت انکودر به صورت پادساعت‌گرد بچرخد : در این حالت ابتدا سوییچ B به C متصل می‌شود.

اگر بخواهیم شکل موج باز و بسته شدن کلید‌ها را رسم کنیم تقریبا چیزی شبیه تصویر زیر بدست می‌آید.

 

فازهای انکودر

فازهای انکودر

 

 

برای تعیین جهت چرخش ابتدا باید مشخص کنیم که ابتدا وضعیت سوییچ A تغییر می‌کند یا B .

  • اگر ابتدا سوییچ A تغییر وصعیت دهد ، بدین معناست که انکودر در جهت ساعت گرد در حال چرخش است .
  • و در مقابل اگر ابتدا سوییچ B تغییر وضعیت دهد ،‌بدین معناست که انکورد در جهت پاد ساعت گرد در حال چرخش است.

 

 

پین‌های ماژول انکودر دوار (Rotary encoder)

 

پین‌ های انکودر دوار

پین‌ های انکودر دوار

 

این ماژول به گونه‌ای طراحی شده است که هنگامی که سوییچ‌‌ها در وضعیت بسته قرار دارند  ،‌خروجی به صورت LOW خواهد بود و هنگامی که سوییج ها در وضعیت باز قرار دارند ،  خروجی به صورت HIGH می‌باشد.

 

حالت LOW به وسیله‌ی پین GND یا همان پین C  هنگامی که سوییچ‌ها در حالت بسته قرار دارند تولید می‌شود و به پین CLK و DT اعمال می‌شود.

حالت HIGH به وسیله‌ی پین ۵V یا همان تعذیه هنگامی که سوییچ‌ها در حالت باز قرار دارند تولید می‌شوند و به پین CLK و DT   اعمال می‌شود.

 

بر روی انکودر یک عدد کلید فشاری نیز قرار دارد که در صورت فشردن آن پین SW از وضعیت HIGH به LOW تغییر می‌کند( دقت شود در این بخش برنامه نویسی حتما باید پین آردوینو متصل شده به SW ٰرا در وضعیت PULL UP قرار داد)

 

 

شماتیک ماژول انکودر دوار

شماتیک این ماژول در شکل زیر نمایش داده شده است. مقاومت R2 و R3 به صورت پول آپ به پین‌‌های DT و CLK متصل شده است.

Keyes-KY-040-Rotary-Encoder-Module-Schematic

شماتیک ماژول انکودر دوار

 

 

مدرای برای درک فهم بهتر طریقه‌ی عمل کرد ماژول انکودر دوار

پیاده سازی هر پروژه مستلزم درک آن پروژه و مکانیزم عمل کرد ماژول‌های استفاده شده در آن پروژه می‌باشد.تاکنون هرچیزی که برای راه‌اندازی ماژول انکودر دوار نیاز بود به شما آموزش دادیم ولی اگر تاکنون درک درستی از عمل‌کرد انکودر پیدا نکرده‌اید پیشهاد میکنم مدار زیر را  پیاده سازی کنید و نتیجه را مشاهده کنید.

انکودر دوار - rotary encoder

انکودر دوار (روتاری انکودر ) – rotary encoder

 

به صورت خیلی خیلی آهسته شافت انکودر را در جهت ساعت گرد و پاد ساعت گرد بچرخانید و توجه کنید که کدام LED وضعیتش زود تر تغییر می‌کند.

اتصال روتاری انکودر ( انکودر دوار ) به آردوینو – rotary encoder

اتصال اکودر دورانی به آردوینو - rotary encoder

 

 

برنامه نویسی

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

int pinA = 3;  // Connected to CLK 
int pinB = 4;  // Connected to DT 
int pinsW = 5;
int encoderPosCount = 0;
int pinALast;
int aVal;
boolean bCW;

void setup() {
  pinMode(pinA, INPUT);
  pinMode(pinB, INPUT);
  pinMode(pinsW, INPUT_PULLUP);
  /* Read Pin A
  Whatever state it's in will reflect the last position
  */
  pinALast = digitalRead(pinA);
  Serial.begin(9600);
}

void loop() {
  aVal = digitalRead(pinA);
  if (aVal != pinALast) { // به این معنی است که شافت در حال چرخش است
              // اگر شافت بچرخد ، ما باید جهت چرخش را مشخیص کنیم
              /* که ایم کار را به وسیله ی خواندن پین 
              B
              انجام می دهیم
              */
    if (digitalRead(pinB) != aVal) {  /*
                      اگر پین
                      A 
                      ابتدا تغییر وضعیت دهد
                      و به این معنی است که چرخش در جهت ساعت گرد می باشد
                      */ 
                    
      encoderPosCount++;
      bCW = true;
    }
    else {/*
        ولی اگر ابتدا
      B
      تغییر وضعیت دهد به این معنی است که چرخش پاد ساعت گرد می باشد

        */
      bCW = false;
      encoderPosCount--;
    }
    Serial.print("Rotated: ");
    if (bCW) {
      Serial.println("clockwise");
    }
    else {
      Serial.println("counterclockwise");
    }
    Serial.print("Encoder Position: ");
    Serial.println(encoderPosCount);

  }
  pinALast = aVal;
  
  if (digitalRead(pinsW)==LOW) // خواندن وضعیت کلید روی انکودر
  {
    Serial.println("sw pressed");
    delay(100);
  }

}

 

 

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۶ دیدگاه