ما هو التشفير الدوراني وكيفية استخدامه مع اردوينو 3

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث الحرائق أو غيرها لا سمح الله.

مقدمـــــــة عن المشروع

جهاز التشفير  الدوار الروتاري هو جهاز إدخال يساعد المستخدم على التفاعل مع النظام . يبدو أشبه مقياس الجهد أو المقاومة المتغييرة ولكنه يخرج مجموعة من النبضات مما يجعل تطبيقه فريد من نوعه . عندما يتم تدوير مقبض Encoder ، فإنه يدور على هيئة خطوات صغيرة تساعد على استخدامه في التحكم في محرك السائر / سيرفو ، والتنقل خلال سلسلة من القوائم وزيادة / تقليل قيمة العدد وأكثر من ذلك بكثير .

في هذه المشروع سوف نتعرف على التشفير الدوار وكيف يعمل . سنواجهه أيضًا مع الاردوينو  ونتحكم في قيمة عدد صحيح عن طريق تدوير Encoder وعرض قيمته على شاشة LCD  . في نهاية هذا المشروع   ستكون مرتاحًا لاستخدام أداة التشفير الروتاري لمشاريعك . اذا هيا بنا نبدأ…

متطلبات المشروع

Materials Required

  • Rotary Encoder (KY-040)
  • Arduino UNO
  • 16*2 Alphanumeric LCD
  • Potentiometer 10k
  • Breadboard
  • Connecting wires

طريقة العمل والتوصيل

كيف يعمل التشفير الروتاري ؟
إن Rotary Encoder هو محول كهروميكانيكي ، مما يعني أنه يحول الحركات الميكانيكية إلى نبضات إلكترونية . وهي تتألف من مقبض يتحرك عند التدوير خطوة بخطوة وينتج سلسلة من النبضية بعرض محدد مسبقًا لكل خطوة . هناك العديد من أنواع أجهزة التشفير لكل منها آلية العمل الخاصة بها ، وسنتعرف على الأنواع في وقت لاحق ، ولكن الآن دعونا نركز فقط على KY040 Incremental Encoder نظرًا لأننا نستخدمها في مشروعنا هذا .

يظهر الهيكل الميكانيكي الداخلي لجهاز التشفير أدناه . يتكون بشكل أساسي من قرص دائري (لون رمادي) مع وسادات موصلة (لون نحاسي) موضوعة أعلى هذا القرص الدائري . توضع هذه الوسائد الموصلة على مسافة متساوية كما هو موضح أدناه . تكون دبابيس الإخراج مثبتة في أعلى هذا القرص الدائري ، بحيث تتلامس الوسائد الموصلة مع دبابيس الإخراج عند تدوير المقبض . يوجد هنا اثنين من دبوس الإخراج ، الإخراج A و B الإخراج كما هو موضح في الشكل أدناه .

Output-Waveform-of-Rotary-Encoder

يظهر الشكل الموجي الناتج الصادر عن طرفي الإخراج A و  B في اللونين الأزرق والأخضر على التوالي . عندما تكون الوسادة الموصلة مباشرة أسفل الدبوس ، فإنها ترتفع عالياً مما ينتج عنها في الوقت المحدد وعندما تتحرك الوسادة الموصلة بعيدًا ، ينخفض الدبوس مما ينتج عنه وقت توقف عن الشكل الموجي الموضح أعلاه . الآن ، إذا عدنا عدد النبضات ، فسنكون قادرين على تحديد عدد الخطوات التي تم نقل المشفر إليها .

الآن قد يطرح السؤال ، لماذا نحتاج إلى إشارتين من النبض عندما تكون إحداهما كافية لحساب عدد الخطوات المتخذة أثناء تدوير المقبض . هذا لأننا نحتاج إلى تحديد الاتجاه الذي تم تدوير المقبض فيه . إذا ألقيت نظرة على النبضين ، فيمكنك ملاحظة أن كلاهما يبلغ 90 درجة من الطور . ومن ثم عندما يتم تدوير المقبض في اتجاه عقارب الساعة ، فإن المخرج A سوف يرتفع أولاً ثم عندما يتم تدوير المقبض بعكس اتجاه عقارب الساعة ، فإن المخرجات B سوف ترتفع أولاً .

يتم التوصيل وفقا للمخطط أدناه .

Circuit-Diagram-for-Interfacing-Rotary-Encoder-with-Arduino
تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.

الكــــــود البرمجي

لتحميل الكود البرمجي اضغط هنا
int Encoder_OuputA  = 9;
int Encoder_OuputB  = 8;
int Encoder_Switch = 10;

int Previous_Output;
int Encoder_Count;

 

#include <LiquidCrystal.h>  //Default Arduino LCD Librarey is included 

const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2); //Initialise 16*2 LCD

  lcd.print(" Rotary Encoder "); //Intro Message line 1
  lcd.setCursor(0, 1);
  lcd.print("  With Arduino  "); //Intro Message line 2

  delay(2000);
  lcd.clear();

//pin Mode declaration 
  pinMode (Encoder_OuputA, INPUT);
  pinMode (Encoder_OuputB, INPUT);
  pinMode (Encoder_Switch, INPUT);

  Previous_Output = digitalRead(Encoder_OuputA); //Read the inital value of Output A
}

void loop() {
   //aVal = digitalRead(pinA);
   
   if (digitalRead(Encoder_OuputA) != Previous_Output)
   { 
     if (digitalRead(Encoder_OuputB) != Previous_Output) 
     { 
       Encoder_Count ++;
       lcd.clear();  
       lcd.print(Encoder_Count);
       lcd.setCursor(0, 1);  
       lcd.print("Clockwise");
     } 
     else 
     {
       Encoder_Count--;
       lcd.clear();  
       lcd.print(Encoder_Count);
       lcd.setCursor(0, 1);  
       lcd.print("Anti - Clockwise");
     }
   }

   Previous_Output = digitalRead(Encoder_OuputA);

   if (digitalRead(Encoder_Switch) == 0)
   {
     lcd.clear();  
     lcd.setCursor(0, 1);  
     lcd.print("Switch pressed");
   }
}

3 Comments

  1. سلام عليكم ، أريد مساعدة في برمجة تحويل تشفير من 1200 إلى 360 درجة للاستخدام محرك خطي

  2. لو سمحت كم قيمة المقاومة المستخدمة في المشروع ؟

    1. مرحبا
      يمكنك استخدام مقاومة بحدود 1 كيلو اوم الي 100 كيلو اوم

      Mohammed Abdalkreem M. Haroon

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *