مقدمـــــــة عن المشروع
جهاز التشفير الدوار الروتاري هو جهاز إدخال يساعد المستخدم على التفاعل مع النظام . يبدو أشبه مقياس الجهد أو المقاومة المتغييرة ولكنه يخرج مجموعة من النبضات مما يجعل تطبيقه فريد من نوعه . عندما يتم تدوير مقبض Encoder ، فإنه يدور على هيئة خطوات صغيرة تساعد على استخدامه في التحكم في محرك السائر / سيرفو ، والتنقل خلال سلسلة من القوائم وزيادة / تقليل قيمة العدد وأكثر من ذلك بكثير .
في هذه المشروع سوف نتعرف على التشفير الدوار وكيف يعمل . سنواجهه أيضًا مع الاردوينو ونتحكم في قيمة عدد صحيح عن طريق تدوير Encoder وعرض قيمته على شاشة LCD . في نهاية هذا المشروع ستكون مرتاحًا لاستخدام أداة التشفير الروتاري لمشاريعك . اذا هيا بنا نبدأ…
متطلبات المشروع
Materials Required
- Rotary Encoder (KY-040)
- Arduino UNO
- 16*2 Alphanumeric LCD
- Potentiometer 10k
- Breadboard
- Connecting wires
-
أسلاك وتوصيلات, جميع المنتجات
أسلاك توصيل ذكر لذكر 40 قطعة 20 سم Male to Male jumper wires
لمحة سريعة:
- 40P لون خط DuPont
- الطول: 200 ملم
- الوزن: 30 جم
- متوافق مع رؤوس تباعد 2.54 مم
- 40 قطعة من سلك الانتقال الملون من الذكور إلى الذكور
- جودة عالية وفي حالة عمل جيدة
- متين وقابل لإعادة الاستخدام
- سهل التركيب والاستخدام
SKU: AA045 -
-
-
-
-
بوردات ولوحات نحاسية, جميع المنتجات
لوح التجارب 830 نقطة لون ابيض Solderless Breadboard
لمحة سريعة
- لوحة التجارب mb102
- 830 نقطة بدون لحام
- مثالي لتجربة تصميم الدوائر في المختبرات
- متوافق مع المقاومة والثنائيات والترانزستورات ومصابيح LED والمكثفات وأنواع أخرى من المكونات الإلكترونية
- إحداثيات ملونة لسهولة وضع المكونات.
- تقبل مجموعة متنوعة من أحجام الأسلاك 20-29 AWG
SKU: AA071
طريقة العمل والتوصيل
كيف يعمل التشفير الروتاري ؟
إن Rotary Encoder هو محول كهروميكانيكي ، مما يعني أنه يحول الحركات الميكانيكية إلى نبضات إلكترونية . وهي تتألف من مقبض يتحرك عند التدوير خطوة بخطوة وينتج سلسلة من النبضية بعرض محدد مسبقًا لكل خطوة . هناك العديد من أنواع أجهزة التشفير لكل منها آلية العمل الخاصة بها ، وسنتعرف على الأنواع في وقت لاحق ، ولكن الآن دعونا نركز فقط على KY040 Incremental Encoder نظرًا لأننا نستخدمها في مشروعنا هذا .
يظهر الهيكل الميكانيكي الداخلي لجهاز التشفير أدناه . يتكون بشكل أساسي من قرص دائري (لون رمادي) مع وسادات موصلة (لون نحاسي) موضوعة أعلى هذا القرص الدائري . توضع هذه الوسائد الموصلة على مسافة متساوية كما هو موضح أدناه . تكون دبابيس الإخراج مثبتة في أعلى هذا القرص الدائري ، بحيث تتلامس الوسائد الموصلة مع دبابيس الإخراج عند تدوير المقبض . يوجد هنا اثنين من دبوس الإخراج ، الإخراج A و B الإخراج كما هو موضح في الشكل أدناه .
يظهر الشكل الموجي الناتج الصادر عن طرفي الإخراج A و B في اللونين الأزرق والأخضر على التوالي . عندما تكون الوسادة الموصلة مباشرة أسفل الدبوس ، فإنها ترتفع عالياً مما ينتج عنها في الوقت المحدد وعندما تتحرك الوسادة الموصلة بعيدًا ، ينخفض الدبوس مما ينتج عنه وقت توقف عن الشكل الموجي الموضح أعلاه . الآن ، إذا عدنا عدد النبضات ، فسنكون قادرين على تحديد عدد الخطوات التي تم نقل المشفر إليها .
الآن قد يطرح السؤال ، لماذا نحتاج إلى إشارتين من النبض عندما تكون إحداهما كافية لحساب عدد الخطوات المتخذة أثناء تدوير المقبض . هذا لأننا نحتاج إلى تحديد الاتجاه الذي تم تدوير المقبض فيه . إذا ألقيت نظرة على النبضين ، فيمكنك ملاحظة أن كلاهما يبلغ 90 درجة من الطور . ومن ثم عندما يتم تدوير المقبض في اتجاه عقارب الساعة ، فإن المخرج A سوف يرتفع أولاً ثم عندما يتم تدوير المقبض بعكس اتجاه عقارب الساعة ، فإن المخرجات B سوف ترتفع أولاً .
يتم التوصيل وفقا للمخطط أدناه .
الكــــــود البرمجي
لتحميل الكود البرمجي اضغط هنا
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"); } }
سلام عليكم ، أريد مساعدة في برمجة تحويل تشفير من 1200 إلى 360 درجة للاستخدام محرك خطي
لو سمحت كم قيمة المقاومة المستخدمة في المشروع ؟
مرحبا
يمكنك استخدام مقاومة بحدود 1 كيلو اوم الي 100 كيلو اوم