Датчик распознавания жестов GY-9960 APDS Arduino — это модуль со встроенным сенсором, который обеспечивает обнаружение света и цвета, определение приближения и бесконтактное распознавание жестов. С помощью этого модуля простым жестом руки можно управлять роботами, освещением и другими устройствами. Рассмотрим, как подключить SparkFun APDS 9960 модуль распознавания жестов к плате Ардуино.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- сенсор SparkFun APDS-9960
- дисплей lcd 1602 i2c
- коннекторы
- библиотека SparkFun_APDS9960.h и LiquidCrystal_I2C.h
Дополнительные материалы на эту тему:
Датчик жестов GY-9960 APDS SparkFun имеет встроенный датчик окружающего освещения, ультрафиолетовый и инфракрасный фильтр, четыре отдельных фотодиода (приемники, которые обнаруживают ИК-излучение, отраженное от объекта) и ИК-светодиод (передатчик). Когда мы делаем жест рукой, датчик получает отраженное ИК-излучение, а микроконтроллер Arduino вычисляет направление движения руки.
APDS-9960 Arduino характеристики, распиновка

Характеристики APDS-9960 (datasheet)
- Напряжение питания: 3,3 В
- Адрес I2C: 0x39
- Обнаружение приближения
- Обнаружение жестов
- Окружающее освещение и определение цвета RGB
- Рабочий диапазон: от 10 до 20 см
На передней панели модуля находятся 2 перемычки PS и I2C PU:
PS — эта перемычка подключает питание к модулю и ИК-светодиоду. Когда перемычка замкнута, питание должно подаваться только на вывод VCC на модуле. Когда перемычка разомкнута, для включения ИК-светодиода необходимо подать отдельное питание на вывод VL датчика SparkFun от Ардуино. По умолчанию эта перемычка замкнута.
I2C PU — эта перемычка используется для подключения подтягивающих резисторов к линиям SDA и SCL. Если резисторы не требуются, разомкните перемычку.
Как подключить датчик жестов APDS-9960 Ардуино

| APDS-9960 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VDD | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Датчик способен определять общий уровень освещенности в люксах или уровень освещенности в трех каналах спектра — красном, зеленом, синем (RGB). Определяет приближение и удаление объекта от сенсора, простые жесты рукой (движение влево, вправо, вверх, вниз). Для работы с модулем необходимо установить библиотеку APDS9960.h, а после сборки схемы загрузите следующую программу в плату Arduino.
Скетч для распознавания жестов с помощью APDS-9960
#include "Wire.h"
#include "SparkFun_APDS9960.h"
#define APDS9960_INT 2
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag;
void setup() {
Serial.begin(9600);
attachInterrupt(0, interruptRoutine, FALLING);
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
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");
}
}
}
Подключение датчика APDS-9960 к Ардуино с дисплеем

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VDD | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Скетч для датчика APDS-9960 с дисплеем LCD 1602
#include "Wire.h"
#include "SparkFun_APDS9960.h"
#define APDS9960_INT 2
SparkFun_APDS9960 apds = SparkFun_APDS9960();
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,16,2);
int isr_flag;
void setup() {
LCD.init();
LCD.backlight();
Serial.begin(9600);
attachInterrupt(0, interruptRoutine, FALLING);
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
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() {
LCD.setCursor(0, 0);
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP"); LCD.clear(); LCD.print("UP");
break;
case DIR_DOWN:
Serial.println("DOWN"); LCD.clear(); LCD.print("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT"); LCD.clear(); LCD.print("LEFT");
break;
case DIR_RIGHT:
Serial.println("RIGHT"); LCD.clear(); LCD.print("RIGHT");
break;
case DIR_NEAR:
Serial.println("NEAR"); LCD.clear(); LCD.print("NEAR");
break;
case DIR_FAR:
Serial.println("FAR"); LCD.clear(); LCD.print("FAR");
break;
default:
Serial.println("NONE"); LCD.clear(); LCD.print("NONE");
}
}
}
Заключение. Датчик GY 9960 LLC легко определяет приближение и удаление объекта, простые жесты, свет и цвета (яркость цветовых значений RGB). В библиотеке SparkFun_APDS9960.h есть другие примеры, демонстрирующие возможности датчика. Например, скетч AmbientLightInterrupt позволяет измерять окружающее освещение, а пример ColorSensor считывает значения красного, зеленого и синего света.
