APDS9960، مستشعر الإيماءات وRGB والقرب لأردوينو
في هذا الدرس سنستكشف كيفية استخدام وحدة المستشعر APDS9960، التي تجمع بين كشف الإيماءات واستشعار الألوان RGB وقدرات استشعار القرب. هذا المستشعر متعدد الاستخدامات يمكنه اكتشاف الحركات في اتجاهات مختلفة ويمكن دمجه في مشاريع للتحكم بالمحركات أو الأضواء أو أجهزة أخرى بناءً على إيماءات اليد. بنهاية هذا الدرس ستفهم كيفية توصيل أسلاك المستشعر وتنفيذ كشف الإيماءات الأساسي في مشاريع أردوينو الخاصة بك.

وحدة APDS9960 صغيرة الحجم وتتطلب توصيلات قليلة، مما يجعلها خيارًا ممتازًا للمشاريع التفاعلية. سنستخدم Arduino IDE لبرمجة المستشعر وعرض الإيماءات المكتشفة على المراقب التسلسلي. للحصول على دليل بصري، راجع الفيديو عند (00:00).
شرح الأجهزة
المكون الرئيسي في هذا المشروع هو وحدة المستشعر APDS9960. تستطيع هذه الوحدة اكتشاف الإيماءات مثل السحب لليسار، السحب لليمين، السحب للأعلى، والسحب للأسفل. كما تقيس قيم ألوان RGB والقرب من الأجسام القريبة. يتواصل المستشعر مع لوحة Arduino عبر واجهة I2C، مما يبسط عملية الأسلاك والبرمجة.
يحتوي APDS9960 على عدة مستشعرات داخلية: مستشعر إيماءات، ومستشعر ألوان RGB، ومستشعر ضوء محيط. يستخدم مستشعر الإيماءات LED بالأشعة تحت الحمراء وكاشفًا ضوئيًا لاكتشاف حركات اليد، بينما يقيس مستشعر RGB شدة الضوء الأحمر والأخضر والأزرق لتحديد الألوان. يحدد مستشعر القرب مدى قرب جسم ما من المستشعر، وهو أمر مفيد في تطبيقات مختلفة.
تفاصيل ورقة البيانات
| المصنّع | أفاجو تكنولوجيز |
|---|---|
| رقم القطعة | APDS-9960 |
| جهد المنطق/الإدخال/الإخراج | 1.8 V إلى 3.6 V |
| جهد التغذية | 3.3 فولت |
| تيار الخرج (لكل قناة) | 20 mA كحد أقصى |
| تيار الذروة (لكل قناة) | 100 ميلي أمبير |
| إرشادات تردد PWM | غير قابل للتطبيق |
| عتبات الإدخال المنطقية | 0.3 V (منخفض)، 0.7 V (مرتفع) |
| هبوط الجهد / Rمقاومة المصرف-المصدر عند التشغيل/ التشبع | 0.5 V كحد أقصى |
| الحدود الحرارية | -40 إلى 85 °C |
| حزمة | LGA ذو 6 دبابيس |
| ملاحظات / متغيرات | لا شيء |
- زوّد جهاز APDS9960 دائمًا بجهد 3.3V؛ الجهد الأعلى قد يتلف المستشعر.
- تأكد من وجود مقاومات سحب مناسبة على خطوط I2C عند توصيل عدة أجهزة.
- أبقِ المستشعر بعيدًا عن أشعة الشمس المباشرة لتجنب التداخل.
- استخدم مكثف فصل بالقرب من دبابيس الطاقة لتحقيق الاستقرار.
- كن على دراية بنطاق الاستشعار للكشف عن القرب (عادةً حوالي 20 سم).
تعليمات الأسلاك

لتوصيل وحدة المستشعر APDS9960 بلوحة أردوينو الخاصة بك، اتبع الخطوات التالية:
- قم بتوصيل الـ
VCCوصل دبوس APDS9960 إلى دبوس 3.3V على لوحة الأردوينو. - وصل الـ
GNDوصل الدبوس بأحد دبابيس GND في لوحة الأردوينو. - قم بتوصيل الـ
SDAدبوس إلى الأردوينوA4دبوس (خط بيانات I2C). - قم بتوصيل الـ
SCLدبوس إلى الأردوينوA5دبوس (خط الساعة لـ I2C). - وصل الـ
INTدبوس إلى دبوس رقمي2على الأردوينو لمعالجة المقاطعات.
لاحظ أنه إذا كنت تستخدم نموذجًا مختلفًا من Arduino، فقد تختلف دبابيس SDA وSCL (على سبيل المثال، على Arduino Mega، استخدمSDAعلى الدبوس رقم 20 وSCLعلى الدبوس 21). تأكد من التحقق من تعيينات الدبابيس المحددة للوحة الخاصة بك. للتكوينات المختلفة، راجع الفيديو عند (02:30).
أمثلة على الكود وشرح خطوة بخطوة
في دالة الإعداد (setup)، نقوم بتهيئة الاتصال التسلسلي ومستشعر APDS9960. تم إعداد دبوس المقاطعة للاستماع إلى أحداث الإيماءات. فيما يلي مقتطف من كود الإعداد:
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
Serial.println(F("APDS-9960 initialization..."));
if (apds.init()) {
Serial.println(F("Initialization complete"));
} else {
Serial.println(F("Initialization failed"));
}
}يقوم هذا الكود بإعداد التكوينات اللازمة لضمان أن المستشعر جاهز للاستخدام ويوفر ملاحظات في المراقب التسلسلي.
بعد ذلك، نحدد كيفية التعامل مع الإيماءات التي يكتشفها المستشعر. الـhandleGestureتستخدم الدالة عبارة switch لتحديد اتجاه الإيماءة. فيما يلي مقتطف مُركّز:
void handleGesture() {
if (apds.isGestureAvailable()) {
switch (apds.readGesture()) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
// Additional cases for left, right, near, and far
}
}
}تتحقق هذه الدالة مما إذا كانت هناك إيماءة متاحة وتقرأ اتجاهها، ثم تطبع النتيجة على المراقب التسلسلي لتقديم تغذية راجعة. تأكد من الرجوع إلى الشيفرة الكاملة المرفوعة أسفل المقال للحصول على تفاصيل التنفيذ الكاملة.
عرض توضيحي / ما الذي تتوقعه
عند تشغيل البرنامج، يجب أن ترى الإيماءات المكتشفة مطبوعة على شاشة المراقبة التسلسلية أثناء تحريك يدك في اتجاهات مختلفة. على سبيل المثال، السحب لأعلى يجب أن يعرض UP، بينما السحب لأسفل يعرض DOWN. تأكد من إبقاء يدك ثابتة لمدة ثانية عند أداء إيماءات القرب والبعد (في الفيديو عند 10:00).
كن حذرًا من نظام استشعار القرب؛ إذا حركت يدك بسرعة كبيرة أو بعيدًا جدًا عن المستشعر فقد لا يسجل الإيماءة بدقة. هذه مشكلة شائعة قد تؤثر على الأداء.
الطوابع الزمنية للفيديو
- 00:00- مقدمة عن مستشعر APDS9960
- 02:30- تعليمات التوصيل الكهربائي
- 05:15- شرح الكود
- 10:00- عرض توضيحي للتعرّف على الإيماءات
++
/*
This is code for an APDS9960 Gesture, RGB, Proximity sensor module (6 pin).
* Watch the video on how to use APDS9960: https://youtu.be/jjXx0V13rNs
*/
/*
* This code has been modified from the Arduino library.
* Explained by Ahmad S. on March 25, 2018 at 21:19
* in Ajax, Ontario, Canada
* for Robojax.com
*
*/
/****************************************************************
GestureTest.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Tests the gesture sensing abilities of the APDS-9960. Configures
APDS-9960 over I2C and waits for gesture events. Calculates the
direction of the swipe (up, down, left, right) and displays it
on a serial console.
To perform a NEAR gesture, hold your hand
far above the sensor and move it close to the sensor (within 2
inches). Hold your hand there for at least 1 second and move it
away.
To perform a FAR gesture, hold your hand within 2 inches of the
sensor for at least 1 second and then move it above (out of
range) of the sensor.
Hardware Connections:
IMPORTANT: The APDS-9960 can only accept 3.3V!
Arduino Pin APDS-9960 Board Function
3.3V VCC Power
GND GND Ground
A4 SDA I2C Data
A5 SCL I2C Clock
2 INT Interrupt
Resources:
Include Wire.h and SparkFun_APDS-9960.h
Development environment specifics:
Written in Arduino 1.0.5
Tested with SparkFun Arduino Pro Mini 3.3V
This code is beerware; if you see me (or any other SparkFun
employee) at the local, and you've found our code helpful, please
buy us a round!
Distributed as-is; no warranty is given.
****************************************************************/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Pins
#define APDS9960_INT 2 // Needs to be an interrupt pin
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
// Set interrupt pin as input
// Robojax Video Tutorial
pinMode(APDS9960_INT, INPUT);
// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialize interrupt service routine
attachInterrupt(0, interruptRoutine, FALLING);
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Robojax Video Tutorial
// Start running the APDS-9960 gesture sensor engine
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);
// Robojax Video Tutorial
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
// Robojax Video Tutorial
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
// Robojax Video Tutorial
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 Video Tutorial
}
}
}
الأشياء التي قد تحتاجها
-
أمازون
-
علي إكسبريسشراء مستشعر AM2302 أو DHT11 أو DHT22 من علي إكسبرسs.click.aliexpress.com
الموارد والمراجع
-
خارجيمكتبة Adafruit APDS9960 (من GitHub)github.com
ملفات📁
Fritzing File
-
استشعار RGB وحركة APDS 9960
apds_9960_rgb_and_gesture_sensor.fzpz0.01 MB
ملفات أخرى
-
مكتبة إيماءات APDS9960 من Robojaxتستخدم هذه المكتبة لاستشعار الحركة APDS9960 لاكتشاف حركة يدك واكتشاف اللون الحالي.
robojax-gesture-APDS9960-Library.zip