كود البحث

كود أردوينو وفيديو: عصا تحكم ثنائية المحور

كود أردوينو وفيديو: عصا تحكم ثنائية المحور

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

XY-Dual access joystick

خلال البرنامج التعليمي، سننفذ برنامجًا بسيطًا يقرأ موضعي X وY لعصا التحكم ويعرضهما في مراقب السيريال في أردوينو. عند ضغط عصا التحكم، سيتم أيضًا اكتشاف حالة المفتاح. لشرح مُفصّل للكود، تأكد من مشاهدة الفيديو عند العلامات الزمنية المحددة (في الفيديو عند 00:00).

شرح الأجهزة

تشمل المكونات الرئيسية لهذا المشروع وحدة الجويستيك ذات المحورين ولوحة أردوينو. تتكون وحدة الجويستيك من مقاومين متغيرين، واحد لمحور X والآخر لمحور Y، يوفّران قيماً تناظرية بناءً على موضع عصا التحكم. يُستخدم مفتاح الزر الموجود على الجويستيك لاكتشاف متى يُضغط.

عند تحريك عصا التحكم تتغير مقاومات البوتنشيومتر، والتي تُترجم إلى قيم بين 0 و1023. هذا يمكّننا من تحديد موضع عصا التحكم بدقة. زر الضغط متصل بدبوس إدخال رقمي في لوحة أردوينو، مما يتيح لنا قراءة حالته دون الحاجة إلى مقاوم خارجي عن طريق استخدام ميزة المقاومة الداخلية للسحب (pull-up).

تفاصيل ورقة البيانات

الشركة المصنعةعام
رقم القطعةوحدة عصا تحكم ذات محورين
جهد المنطق/الإدخال والإخراج5 فولت
جهد التغذية5 فولت
نطاق جهد الخرج0 - 5 فولت
قرارتناظري 10 بت (0-1023)
نوع المفتاحزر ضغط
حزمةوحدة قياسية

  • تأكد من توصيل مصدر طاقة مناسب (5 فولت) إلى وحدة عصا التحكم.
  • قم بتوصيل مخرجي عصا التحكم X و Y بالدبابيس التناظرية A0 و A1 على التوالي.
  • استخدم الدبوس الرقمي رقم 6 لمفتاح عصا التحكم.
  • استخدم تكوين مقاومة سحب لأعلى لدبوس المفتاح.
  • راقب قيم المخرجات للتأكد من أنها تتراوح بين 0 و1023.

تعليمات الأسلاك

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring

لتوصيل عصا التحكم ذات المحورين بالأردوينو، ابدأ بتوصيل دبوس الأرضي لعصا التحكم إلى سكة الأرض على لوحة التجارب. بعد ذلك، وصل دبوس 5V الخاص بعصا التحكم إلى السكة الموجبة على لوحة التجارب. أما الدبسان المتغيران في عصا التحكم، الموسومان X وY، فيجب توصيلهما بالدبابيس التناظريةA0وA1على الأردوينو، على التوالي.

بالنسبة لمفتاح الزر الضاغط على عصا التحكم، قم بتوصيله إلى الدبوس الرقمي6على الأردوينو. يستفيد هذا الاتصال من ميزة مقاومة السحب الداخلية، لذا لست بحاجة إلى مقاومة خارجية. أخيرًا، إذا أردت مراقبة حالة المفتاح بمصباح LED، قم بتوصيل الساق الأطول للمصباح إلى الدبوس الرقمي13والطرف الأقصر عبر مقاوم 680 أوم إلى الأرض

أمثلة على الكود واستعراض خطوة بخطوة

في كود الأردوينو نعرّف دبوس المفتاح ونحدّد أبعاد الشاشة لتعيين قيم عصا التحكم. دالة الإعداد تهيّئ الاتصال التسلسلي وتضبط وضعية دبوس المفتاح.

void setup() {
  Serial.begin(9600); // initialize serial communication
  pinMode(sw, INPUT_PULLUP); // setting pin sw as input
  pinMode(13, OUTPUT); // LED pin
}

في دالة loop، نقرأ القيم التناظرية لموقعي X وY ونحولها إلى أبعاد الشاشة المحددة. كما نقرأ حالة المفتاح ونطبعها على المراقب التسلسلي.

void loop() {
  int x = analogRead(A0); // read analog value for X
  int y = analogRead(A1); // read analog value for Y
  int sStat = digitalRead(sw); // read switch state
  // Print values to Serial Monitor
  Serial.print("X: ");
  Serial.print(xPos);
  Serial.print(" Y: ");
  Serial.println(yPos);
}

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

if(sStat == LOW) {
    Serial.println("Switch pressed");
    digitalWrite(13, HIGH); // Turn LED ON
  } else {
    digitalWrite(13, LOW); // Turn LED OFF
  }

لمعرفة كيف تتغير قيم عصا التحكم في الوقت الحقيقي، ارفع الكود إلى لوحة Arduino وافتح نافذة المراقبة التسلسلية. سيتم تحديث القيم كل نصف ثانية، مع عرض موضعي X و Y الحاليين بالإضافة إلى حالة المفتاح (في الفيديو عند 01:30).

عرض توضيحي / ما الذي تتوقعه

عند تحريك عصا التحكم يجب أن تتغير قيم X و Y وفقًا لذلك، وتتراوح من 0 إلى 1023. إذا ضغطت زر عصا التحكم فسيضيء المصباح الضوئي المتصل بالدبوس 13، مما يشير إلى أن المفتاح نشط. إذا كانت عصا التحكم في المنتصف، يجب أن ترى قيمًا تقارب 512 لكلا المحورين، اعتمادًا على معايرة عصا التحكم.

الطوابع الزمنية للفيديو

  • 00:00- مقدمة عن عصا التحكم ثنائية المحور
  • 01:30- شرح الشيفرة والوظائف
  • 02:45- تعليمات الأسلاك
  • 03:15- المخرجات المتوقعة والاختبار

الصور

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring
58-This is the Arduino code for a dual-axis joystick.
اللغة: C++
/*
 * This is Arduino code to use a dual-axis XY joystick to read the value of the joystick position as X and Y, and
 * also read the switch.
 * Other Arduino library and videos: https://robojax.com
 
 * Watch the video for this code to learn it fully.
  * Watch the video here: https://youtu.be/6N8Iq353GM8
 * This code is offered "as is" without any warranty.
 * If you are sharing this code, you must keep this copyright note.
 */
 /*

 * Written for Robojax video on January 10, 2018
 * by Ahmad Nejrabi, in Ajax, Ontario, Canada
 * Copyright Robojax Inc.
 */
 
/*
 * This is a dual-axis joystick sketch for Arduino.
 * The position of the joystick is read and displayed on the serial monitor.
 */
#define sw 6
#define screenWidth 600
#define screenHeight 300
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  pinMode(sw,INPUT_PULLUP);// setting pin sw as input
  pinMode(13,OUTPUT);
}
 
void loop() {
  // Robojax Dual Axis joystick project
  int x = analogRead(A0);// read analog value
  int y = analogRead(A1);
  int xPos = map(x, 0, 1023,0,screenWidth);
  int yPos = map(y, 0, 1023,0,screenHeight); 
  int sStat = digitalRead(sw);//
  // Robojax project

  Serial.print("X: ");
  Serial.print(xPos);

  Serial.print(" Y: ");
  Serial.println(yPos);// Robojax prints y value
  if(sStat ==LOW){
    Serial.println("Switch pressed");
    digitalWrite(13,HIGH);// Turn LED ON
  }else{
    digitalWrite(13,LOW);// Turn LED OFF
  }
  delay(500);
}

الأشياء التي قد تحتاجها

الموارد والمراجع

لا توجد موارد حتى الآن.

ملفات📁

لا توجد ملفات متاحة.