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

  • ۱۴۱ بازدید

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

Rotary Encoder

این برد بریک اوت انکودر چرخشی دارای پنج پین است.

GND → Ground Supply
+ → +5V Power Supply
SW → Button Switch
DT → Encoder Pin B
CLK → Encoder Pin A

هنگامی که شافت در جهت ساعت چرخانده شود ، پالس خروجی در پایه رمزگذار A با 90 درجه اختلاف از فاز پایه رمزگذار B تولید می شود.

هنگامی که شافت در خلاف جهت ساعت چرخانده می شود ، خروجی تولید شده در پایه های خروجی رمزگذار A و B معکوس می شود.

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

رابط روتاری انکودر آردوینو

پایه های منبع تغذیه Rotary Encoder را به برد آردوینو به صورت + به 5 ولت و Gnd را به Gnd وصل کنید. سپس پین CLK (Encoder out A) را به پین دیجیتال آردوینو D2 و پایه DT (Encoder out B) را به پایه دیجیتال D1 وصل کنید. پس از تکمیل اتصال، طرح زیر را برای دریافت زاویه و موقعیت رمزگذار چرخشی در مانیتور سریال بارگذاری کنید.

کد اسکچ برای روتاری انکودر آردوینو

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#define encoderOutA 2 // CLK pin of Rotary Enocoder
#define encoderOutB 1 // DT pin of Rotary Enocoder
  
 int counter = 0;
 int presentState;
 int previousState; 
 void setup() {
   pinMode (encoderOutA,INPUT);
   pinMode (encoderOutB,INPUT);
    
   Serial.begin (9600);
      previousState = digitalRead(encoderOutA);   // Get current state of the encoderOutA
 }
 void loop() {
   presentState = digitalRead(encoderOutA);
      if (presentState != previousState)
      {    
          if (digitalRead(encoderOutB) != presentState)
          {
       counter ++;
     }
     else {
       counter --;
     }
     Serial.print("Position: ");
     Serial.println(counter);
   }
   previousState = presentState; // Replace previous state of the encoderOutA with the current state
 }

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