هذا الدليل جزء من: محركات سيرفو
جميع الفيديوهات المتعلقة بمحركات السيرفو مدرجة هنا. روابط الفيديوهات الأخرى موجودة أسفل هذه المقالة.
التحكم في موضع السيرفو بإيماءات اليد لاردوينو
في هذا الدرس، سنتعلم كيفية التحكم في محرك سيرفو باستخدام إيماءات اليد. من خلال تحريك يدك إلى اليسار أو اليمين، يمكنك جعل محرك السيرفو يستجيب وفقًا لذلك. يستخدم هذا المشروع مستشعر الإيماءات APDS-9960 لاكتشاف حركات اليد وترجمتها إلى مواضع السيرفو. للحصول على شرح بصري مفصل، تأكد من مشاهدة الفيديو في (في الفيديو عند 00:30).

المكونات الأساسية التي سنستخدمها تشمل محرك سيرفو ومستشعر الإيماءات APDS-9960. سيدور محرك السيرفو إلى زوايا محددة بناءً على الإيماءات المكتشفة، بينما سيفسر مستشعر APDS-9960 حركات اليد. يتيح هذا الإعداد طريقة بديهية للتحكم في السيرفو دون لمس فعلي.
شرح الأجهزة
محرك السيرفو هو جهاز صغير يمكنه الدوران إلى زوايا محددة، مما يجعله مثاليًا للتطبيقات التي تتطلب تحديد موقع دقيق. عادةً ما يحتوي على ثلاثة أسلاك: الطاقة (أحمر)، الأرض (أسود)، والإشارة (برتقالي). يستقبل سلك الإشارة الأوامر لتحريك السيرفو إلى زاوية محددة.
APDS-9960 هو مستشعر متعدد الاستخدامات يمكنه اكتشاف الإيماءات، والضوء المحيط، واللون. يتواصل مع الأردوينو عبر I2C ويتطلب بعض الدبابيس للطاقة ونقل البيانات. يمكن للمستشعر اكتشاف الحركات مثل الأعلى، والأسفل، واليسار، واليمين، والتي سنستخدمها للتحكم في السيرفو.
تفاصيل ورقة البيانات
| المصنع | بروادكوم |
|---|---|
| رقم الجزء | APDS-9960 |
| جهد المنطق/المدخلات والمخرجات | ٢.٤ - ٣.٦ ف |
| جهد الإمداد | ٢.٤ - ٣.٦ ف |
| تيار الخرج (لكل قناة) | 20 مللي أمبير كحد أقصى |
| إرشادات تردد PWM | غير قابل للتطبيق |
| عتبات منطق الإدخال | 0.3 فولت (منخفض)، 0.7 فولت (مرتفع) |
| انخفاض الجهد / Rدي إس (أون)/ تشبع | غير قابل للتطبيق |
| الحدود الحرارية | -40 إلى 85 درجة مئوية |
| حزمة | ٦.٠ × ٣.٠ مم |
| ملاحظات / متغيرات | استشعار الإيماءات، استشعار ضوء RGB |
- تأكد من أن السيرفو مزود بجهد كافٍ (عادةً 5 فولت).
- قم بتوصيل APDS-9960 بـ Arduino باستخدام اتصال I2C.
- انتبه إلى دبوس المقاطعة لجهاز استشعار الإيماءات.
- استخدم مقاومات السحب لأعلى إذا لزم الأمر للكشف عن الإشارة بشكل مستقر.
- تأكد من معايرة المستشعر في ظروف إضاءة مختلفة للحصول على دقة أفضل.

لتوصيل المكونات، ابدأ بمحرك السيرفو. قم بتوصيل السلك الأحمر إلى دبوس 5V في الأردوينو، والسلك الأسود إلى الأرض (GND)، وسلك الإشارة البرتقالي إلى الدبوس9سيسمح ذلك للاردوينو بالتحكم في موضع السيرفو.
بعد ذلك، قم بتوصيل مستشعر الإيماءات APDS-9960. اتصل بـV_Nقم بتوصيلها إلى 3.3 فولت في الأردوينو، و الـGNDدبوس إلى الأرض. الINTيجب توصيل الدبوس بالدبوس2على الأردوينو، بينما الـSDAوSCLتذهب الدبابيس إلى الدبابيسA4وA5، على التوالي. تتيح هذه التهيئة للمستشعر التواصل بفعالية مع الأردوينو.
أمثلة الشيفرة وشرح الخطوات
في دالة الإعداد، نقوم بتهيئة السيرفو ومستشعر الإيماءات. السطرmyservo.attach(9);يربط السيرفو بالدبوس 9، الذي قمنا بتوصيله سابقًا. هذا يسمح للسيرفو بتلقي الأوامر من الأردوينو.

void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Set interrupt pin as input
pinMode(APDS9960_INT, INPUT);
// Initialize Serial port
Serial.begin(9600);
}بعد ذلك، نحدد كيف يتعامل النظام مع الإيماءات في دالة الحلقة. الطريقةhandleGesture();يتحقق من الإيماءات المتاحة وينفذ الإجراءات المقابلة. على سبيل المثال، إذا كانت الإيماءة المكتشفة هي اليسار، فسوف يتحرك السيرفو إلى 180 درجة.
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_LEFT:
myservo.write(180); // added by RoboJax
break;
case DIR_RIGHT:
myservo.write(0); // added by RoboJax
break;
}
}
}أخيرًا، يقوم الحلقة بالتحقق باستمرار من الإيماءات وتحديث موضع السيرفو بناءً على الإيماءة المكتشفة. تأكد من اختبار الإعداد في ظروف إضاءة مختلفة للحصول على تعرف دقيق على الإيماءات.
عرض / ما يمكن توقعه
بمجرد توصيل كل شيء وتحميل الكود، يجب أن تكون قادرًا على التحكم في السيرفو عن طريق تحريك يدك إلى اليسار أو اليمين. سيدور السيرفو إلى 180 درجة عند إيماءة اليسار ويعود إلى 0 درجة عند إيماءة اليمين. إذا لم يتم اكتشاف الإيماءات، تحقق من موضع المستشعر وظروف الإضاءة المحيطة (في الفيديو عند 05:30).
فصول
- مقدمة - 00:00
- نظرة عامة على الأجهزة - 01:30
- تعليمات التوصيل - 03:00
- شرح الكود - 04:30
- عرض - 06:00
هذا الدليل هو جزء من: محركات سيرفو
- التحكم في محرك سيرفو بأزرار ضغط باستخدام أردوينو
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- التحكم في محرك سيرفو باستخدام مقاوم متغير (بوتنشيوميتر) مع أردوينو
- التحكم في محرك سيرفو بواسطة بوتنشيوميتر وشاشة LCD1602 باستخدام أردوينو
- تحكم في محركات سيرفو باستخدام جهاز تحكم عن بُعد بالأشعة تحت الحمراء مع أردوينو
- تحكم في محرك سيرفو باستخدام مقاومة متغيرة
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- كود أردوينو وفيديو لمتحكم السيرفو PCA9685 ذو 16 قناة و12 بت V1
- Build an Arduino Servo Toggle Switch with a Push Button
++
/*
* تم التعديل لروبوجاكس بواسطة A.B.S. في 09 مايو 2017 في أجاكس، أونتاريو، كندا. www.RoboJax.com
*
* المصدر الأصلي:
* حساس RGB ولإيماءات APDS-9960
* شاون هيميل @ SparkFun Electronics
* 30 مايو 2014
* https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
*
* تم التوزيع كما هو؛ لا توجد ضمانات.
*/
#include <Wire.h>
// أضيف بواسطة RoboJax
#include <Servo.h>
#include <SparkFun_APDS9960.h>
Servo myservo; // إنشاء كائن سيرفو للسيطرة على سيرفو // أضيف بواسطة RoboJax
// دبابيس
#define APDS9960_INT 2 // يجب أن تكون دبوس انقطاع
// ثوابت
// المتغيرات العالمية
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
myservo.attach(9); // يعلق السيرفو على الدبوس 9 إلى كائن السيرفو
// قم بتعيين دبابيس المقاطعة كمدخل
pinMode(APDS9960_INT, INPUT);
// تهيئة المنفذ التسلسلي
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// تهيئة روتين خدمة المقاطعة
attachInterrupt(0, interruptRoutine, FALLING);
// تهيئة APDS-9960 (تهيئة I2C والقيم الأولية)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// ابدأ تشغيل محرك مستشعر الإيماءات APDS-9960
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
myservo.write(180); // أضيف بواسطة RoboJax
break;
case DIR_RIGHT:
Serial.println("RIGHT");
myservo.write(0); // أضيف بواسطة RoboJax
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
لا توجد ملفات متاحة.