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

شرح الأجهزة
APDS-9960 هو مستشعر متعدد الاستخدامات يجمع بين استشعار ألوان RGB واستشعار الضوء المحيط واستشعار القرب وقدرات اكتشاف الإيماءات. يتصل ب Arduino عبر I2C ، مما يسمح بالتكامل السهل مع الحد الأدنى من الأسلاك. يعمل المستشعر فقط عند 3.3 فولت ، مما يجعل من الضروري ضمان مستويات الجهد المناسبة لتجنب إتلاف الجهاز. في هذا الإصدار ، سنستخدم Arduino لقراءة بيانات الإيماءات. يقوم المستشعر بإخراج معلومات الإيماءات من خلال المقاطعات ، مما يسمح ل Arduino بالاستجابة الفورية لحركات اليد. يفتح دمج APDS-9960 مع Arduino العديد من الاحتمالات للمشاريع التفاعلية ، بما في ذلك الأجهزة التي يتم التحكم فيها بالإيماءات.
تفاصيل ورقة البيانات
| الشركه المصنعه | برودكوم |
|---|---|
| رقم الجزء | APDS-9960 |
| جهد المنطق / IO | 2.7 - 3.6 فولت |
| جهد الإمداد | 3.3 فولت |
| تيار الإخراج (لكل قناة) | 1 مللي أمبير |
| ذروة التيار (لكل قناة) | 10 مللي أمبير |
| توجيه تردد PWM | 100 هرتز |
| عتبات منطق الإدخال | 0.3 × فولتدد(منخفض) ، 0.7 × فولتدد(عالية) |
| انخفاض الجهد / RDS (على)/تشبع | 0.5 فولت كحد أقصى |
| الحدود الحرارية | -40 إلى +85 درجة مئوية |
| حزمة | LGA 6 سنون |
| ملاحظات / المتغيرات | يدعم اتصال I2C |
- تأكد من أن جهد الإمداد لا يتجاوز 3.6 فولت لمنع التلف.
- استخدم مقاومات السحب على خطوط I2C للاتصال الموثوق به.
- احتفظ بالمستشعر بعيدا عن أشعة الشمس المباشرة للحصول على قراءات دقيقة.
- تأكد من تهيئة المستشعر بشكل صحيح في الكود.
- تحقق من توصيلات الأسلاك لتجنب المدخلات العائمة.
تعليمات الأسلاك

لتوصيل APDS-9960 ب Arduino ، ابدأ بتوصيل الطاقة. استخدم سلكا أحمر لتوصيل دبوس VCC الخاص ب APDS-9960 بدبوس 3.3 فولت على Arduino. بعد ذلك ، قم بتوصيل دبوس GND الموجود على المستشعر بدبوس أرضي على Arduino باستخدام سلك أسود. الآن ، بالنسبة لاتصال I2C ، قم بتوصيل دبوس SDA الخاص ب APDS-9960 بدبوس A4 الخاص ب Arduino. وبالمثل ، قم بتوصيل دبوس SCL بدبوس A5 على Arduino. أخيرا ، قم بتوصيل دبوس INT الخاص بالمستشعر بالدبوس 2 على Arduino. سيسمح ذلك ل Arduino بالاستجابة للمقاطعات الناتجة عن المستشعر.
أمثلة على التعليمات البرمجية والإرشادات التفصيلية
يقوم الرمز المقدم بتهيئة مستشعر APDS-9960 وإعداد Arduino لقراءة الإيماءات. فيما يلي مقتطف موجز من وظيفة الإعداد:
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
attachInterrupt(0, interruptRoutine, FALLING);
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
}
}في هذا المقتطف، نقوم بتهيئة الشاشة التسلسلية وتعيين دبوس المقاطعة. تتم تهيئة المستشعر، وطباعة رسالة تأكيد على وحدة التحكم. بعد ذلك ، نتحقق من وجود إيماءات في وظيفة الحلقة:
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}هنا ، تتحقق الحلقة باستمرار من الإيماءات. عند اكتشاف إيماءة ، يتم تعطيل المقاطعة ، ويتم استدعاء وظيفة "handleGesture" لمعالجة الإيماءة. أخيرا ، تعالج وظيفة "handleGesture" الإيماءات المكتشفة:
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
// Additional cases...
}
}
}في هذه الوظيفة ، تتم قراءة الإيماءة ، ويتم اتخاذ الإجراء المقابل بناء على الاتجاه المكتشف. هذا يسمح بالتحكم التفاعلي بناء على حركات اليد. لفهم كامل للكود ، يرجى الرجوع إلى البرنامج الكامل الذي تم تحميله أسفل المقالة.

مظاهرة / ماذا تتوقع
عند اكتمال الإعداد ، يمكنك أن تتوقع أن يقرأ Arduino الإيماءات ويعرض الاتجاه المكتشف على الشاشة التسلسلية. تتضمن الاختبارات البسيطة تحريك يدك لأعلى أو لأسفل أو لليسار أو اليمين أمام المستشعر. إذا كان كل شيء سلكيا بشكل صحيح ، فيجب أن ترى الإخراج المقابل على الشاشة التسلسلية ، مما يؤكد التعرف على الإيماءات. كن حذرا من المدخلات العائمة ، لأنها يمكن أن تؤدي إلى قراءات غير متسقة (في الفيديو الساعة 05:20).
الطوابع الزمنية للفيديو
- 00:00-مقدمة
- 01:15- نظرة عامة على الأجهزة
- 03:00- تعليمات الأسلاك
- 04:30- إرشادات التعليمات البرمجية
- 06:15-مظاهره
/*
* كود لمستشعر إيماءات APDS-9960 لـ Arduino
* هذا الكود يهدف إلى اكتشاف إيماءات يدك، سواء من خلال تحريكها لأعلى أو لأسفل أو لليسار أو لليمين؛ يمكن اكتشاف إيماءات أخرى واستخدامها للتحكم في شيء آخر.
*
* شاهد الفيديو الخاص بمستشعر إيماءات APDS-9960 https://youtu.be/qzSgZV_fbxI
* احصل على هذا الكود من https://robojax.com
*
* الكود المستخدم في الفيديو من قبل أحمد شمشيري لموقع Robojax.com في 31 ديسمبر 2016، في الساعة 6:53 صباحًا في أجاكس، أونتاريو، كندا
* تم منح الإذن لمشاركة هذا الكود، شريطة الاحتفاظ بهذه الملاحظة مع الكود.
* تنبيه: هذا الكود "كما هو" ولغرض التعليم فقط.
*
* GestureTest.ino
* مستشعر APDS-9960 RGB وإيماءات
* شون هيمل @ SparkFun Electronics
* 30 مايو 2014
* https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
*
* يختبر قدرات استشعار الإيماءات لمستشعر APDS-9960. يقوم بتكوين APDS-9960 عبر I2C وينتظر أحداث الإيماءات. يحسب اتجاه السحب (لأعلى، لأسفل، لليسار، لليمين) ويعرضه على وحدة التحكم التسلسلية.
*
* لأداء إيماءة قريبة، امسك يدك بعيدًا عن المستشعر ثم حركها بالقرب من المستشعر (في حدود 2 بوصة). احتفظ بيدك هناك لمدة ثانية واحدة على الأقل ثم حركها بعيدًا.
*
* لأداء إيماءة بعيدة، امسك يدك في حدود 2 بوصة من المستشعر لمدة ثانية واحدة على الأقل ثم حركها بعيدًا (خارج النطاق) من المستشعر.
*
* اتصالات الأجهزة:
*
* مهم: يمكن لمستشعر APDS-9960 قبول 3.3 فولت فقط!
*
* دبوس Arduino وظيفة لوحة APDS-9960
*
* 3.3V VCC طاقة
* GND GND أرضي
* A4 SDA بيانات I2C
* A5 SCL ساعة I2C
* 2 INT انقطاع
*
* الموارد:
* تضمين Wire.h و SparkFun_APDS-9960.h
*
* مواصفات بيئة التطوير:
* كتب في Arduino 1.0.5
* تم اختبارها مع SparkFun Arduino Pro Mini 3.3V
*
* هذا الكود مكافأة؛ إذا رأيتني (أو أي موظف آخر من SparkFun) في المكان المحلي، ووجدت أن كودنا مفيد، يرجى أن تشتري لنا جولة!
*
* تم توزيعه كما هو؛ لا ضمان مقدم.
*/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
Servo myservo; // إنشاء كائن سيرفو للتحكم في سيرفو
// دبابيس
#define APDS9960_INT 2 // يجب أن تكون هناك دبابيس مقاطعة
// ثوابت
// المتغيرات العالمية
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
// قم بتعيين دبوس المقاطعة كمدخل
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");
break;
case DIR_RIGHT:
Serial.println("RIGHT");
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
/*
* تعديل لـ RoboJax بواسطة A.B.S. في 9 مايو 2017 في أجاكس، أونتاريو، كندا. www.RoboJax.com
*
* المصدر الأصلي:
* APDS-9960 حساس RGB وإيماءات
* شون هايميل @ 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");
}
}
}
الموارد والمراجع
لا توجد موارد حتى الآن.