تعلم الوحدات · الدرس 2.12

وحدة عصا التحكم التناظرية (Analog Joystick Module)

العودة إلى الدروس

التعرف على عصا التحكم (Joystick)

تضيف عصا التحكم التناظرية (Analog Joystick) وسيلة تحكم للمشروعات. ستتعلم استخدام وحدتها في هذه التجربة.

المكونات المطلوبة

الأطراف والزر

للوحدة خمسة أطراف: VCC و Ground و X و Y و Key. قد تختلف الأسماء المطبوعة قليلًا باختلاف الوحدة. تقدم العصا التناظرية قراءة أدق من عصا اتجاهية تعتمد على أزرار أو مفاتيح ميكانيكية. ويمكن ضغط العصا إلى أسفل لتفعيل زر الاختيار؛ وقد يتطلب الضغط عليه بعض القوة.

تقرأ X و Y من منافذ Arduino التناظرية، والزر من منفذ رقمي. يتصل Key بالأرضي عند الضغط، ويكون عائمًا عند التحرير. للحصول على قراءة مستقرة يجب سحبه إلى VCC بمقاومة Pull-up، ويمكن استخدام المقاومة الداخلية في Arduino.

لتفعيل مقاومة السحب الداخلية، استخدم pinMode(SW_pin, INPUT_PULLUP). ويمكن أيضاً تهيئة المنفذ بـ INPUT ثم كتابة HIGH إليه، كما في البرنامج المرفق.

وحدة عصا التحكم (Joystick Module)
وحدة عصا التحكم (Joystick Module)

التوصيل

مخطط توصيل عصا التحكم (Joystick)
مخطط توصيل عصا التحكم (Joystick)
توصيل العصا بلوحة أردوينو (UNO R3 Board)
توصيل العصا بلوحة أردوينو (UNO R3 Board)

التوصيلات الخمسة هي Key و Y و X والتغذية والأرضي. X و Y تناظريان و Key رقمي. إذا لم تحتج الزر، يمكنك الاكتفاء بأربعة أطراف.

البرنامج والقراءات

افتح ملف البرنامج Analog_Joystick.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.

إذا تعذر نقل البرنامج إلى اللوحة، فراجع قسم «رفع البرنامج ومعالجة خطأ الاتصال» في الدرس 1.5 «وميض LED وإضافة المكتبات» للتحقق من اتصال USB واختيار نوع اللوحة والمنفذ التسلسلي في بيئة Arduino IDE.

عصا التحكم (Joystick) تعتمد أساسًا على مقاومات متغيرة (Potentiometers)، فتنتج قيمًا تناظرية. في المنتصف تكون القراءة نحو 512. يتراوح ناتج التحويل ذي 10 بت من 0 إلى 1023.

افتح Serial Monitor لمشاهدة القيم؛ وراجع الدرس 2.4 «المراقب التسلسلي» لمعرفة طريقة فتحه وضبط سرعة الاتصال وقراءة البيانات.

عرض قيم العصا في المراقب التسلسلي
عرض قيم العصا في المراقب التسلسلي

الدالة analogRead

مقتطف من الشرح
Serial.print("X-axis: ");

Serial.print(analogRead(X_pin));

تقرأ analogRead(pin) المنفذ التناظري المحدد. يشرح الدرس محولًا متعدد القنوات بدقة 10 بت يحول الجهد بين 0 وجهد التشغيل، 5V أو 3.3V، إلى أعداد 0–1023. على UNO تكون الخطوة 5V/1024، أي نحو 0.0049V أو 4.9mV.

يمكن تغيير مرجع الدخل بـ analogReference()، وتغيير دقة التمثيل على Zero و Due و MKR بـ analogReadResolution(). تستغرق القراءة نحو 100µs، أي قرابة 10,000 قراءة في الثانية.

اللوحةجهد التشغيلالمداخل التناظريةأقصى دقة
Uno5VA0–A510 بت
Mini و Nano5VA0–A710 بت
Mega و Mega2560 و MegaADK5VA0–A1510 بت
Micro5VA0–A1110 بت
Leonardo5VA0–A1110 بت
Zero3.3VA0–A512 بت
Due3.3VA0–A1112 بت
عائلة MKR3.3VA0–A612 بت

في Micro و Leonardo تحمل A0–A5 أسماءها على اللوحة، وتوجد A6–A11 على المنافذ 4 و 6 و 8 و 9 و 10 و 12 بالترتيب. الدقة الافتراضية للوحات ذات 12 بت هي 10 بت للتوافق؛ تستخدم analogReadResolution() لتغييرها.

pin اسم المدخل: غالبًا A0–A5، وعلى MKR حتى A6، و Mini و Nano حتى A7. تضم Mega المداخل من A0 إلى A15. تعيد الدالة int مقيدًا بدقة المحول: 0–1023 عند 10 بت، أو 0–4095 عند 12 بت.

الكود

Analog_Joystick/Analog_Joystick.ino

//www.elegoo.com
//2016.12.09

// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(9600);
}

void loop() {
  Serial.print("Switch:  ");
  Serial.print(digitalRead(SW_pin));
  Serial.print("\n");
  Serial.print("X-axis: ");
  Serial.print(analogRead(X_pin));
  Serial.print("\n");
  Serial.print("Y-axis: ");
  Serial.println(analogRead(Y_pin));
  Serial.print("\n\n");
  delay(1000);
}

ملفات الدرس والمكتبات

ملفات الدرس

100%

عرض الصورة

استخدم + و− للتكبير والتصغير، أو اضغط Esc للإغلاق.