تعلم الوحدات · الدرس 2.12
وحدة عصا التحكم التناظرية (Analog Joystick Module)
العودة إلى الدروسالتعرف على عصا التحكم (Joystick)
تضيف عصا التحكم التناظرية (Analog Joystick) وسيلة تحكم للمشروعات. ستتعلم استخدام وحدتها في هذه التجربة.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3).
- وحدة عصا تحكم (Joystick Module).
- خمسة أسلاك أنثى إلى ذكر (Female to Male DuPont Wires).
الأطراف والزر
للوحدة خمسة أطراف: VCC و Ground و X و Y و Key. قد تختلف الأسماء المطبوعة قليلًا باختلاف الوحدة. تقدم العصا التناظرية قراءة أدق من عصا اتجاهية تعتمد على أزرار أو مفاتيح ميكانيكية. ويمكن ضغط العصا إلى أسفل لتفعيل زر الاختيار؛ وقد يتطلب الضغط عليه بعض القوة.
تقرأ X و Y من منافذ Arduino التناظرية، والزر من منفذ رقمي. يتصل Key بالأرضي عند الضغط، ويكون عائمًا عند التحرير. للحصول على قراءة مستقرة يجب سحبه إلى VCC بمقاومة Pull-up، ويمكن استخدام المقاومة الداخلية في Arduino.
لتفعيل مقاومة السحب الداخلية، استخدم pinMode(SW_pin, INPUT_PULLUP). ويمكن أيضاً تهيئة المنفذ بـ INPUT ثم كتابة HIGH إليه، كما في البرنامج المرفق.

التوصيل


التوصيلات الخمسة هي 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 قراءة في الثانية.
| اللوحة | جهد التشغيل | المداخل التناظرية | أقصى دقة |
|---|---|---|---|
| Uno | 5V | A0–A5 | 10 بت |
| Mini و Nano | 5V | A0–A7 | 10 بت |
| Mega و Mega2560 و MegaADK | 5V | A0–A15 | 10 بت |
| Micro | 5V | A0–A11 | 10 بت |
| Leonardo | 5V | A0–A11 | 10 بت |
| Zero | 3.3V | A0–A5 | 12 بت |
| Due | 3.3V | A0–A11 | 12 بت |
| عائلة MKR | 3.3V | A0–A6 | 12 بت |
في 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);
}