Перейти к содержанию

Датчик жестов Ардуино APDS-9960 подключение

Датчик жестов Ардуино APDS-9960 подключение

Датчик распознавания жестов GY-9960 APDS Arduino — это модуль со встроенным сенсором, который обеспечивает обнаружение света и цвета, определение приближения и бесконтактное распознавание жестов. С помощью этого модуля простым жестом руки можно управлять роботами, освещением и другими устройствами. Рассмотрим, как подключить SparkFun APDS 9960 модуль распознавания жестов к плате Ардуино.

Необходимые компоненты:

Дополнительные материалы на эту тему:

  1. Лазерный дальномер VL53L1X, VL53L0X
  2. Датчик ультрафиолетового излучения ML8511
  3. Подключение датчика цвета TCS230 к Ардуино

Датчик жестов GY-9960 APDS SparkFun имеет встроенный датчик окружающего освещения, ультрафиолетовый и инфракрасный фильтр, четыре отдельных фотодиода (приемники, которые обнаруживают ИК-излучение, отраженное от объекта) и ИК-светодиод (передатчик). Когда мы делаем жест рукой, датчик получает отраженное ИК-излучение, а микроконтроллер Arduino вычисляет направление движения руки.

APDS-9960 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 к Ардуино

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 к Ардуино с дисплеем

Подключение датчика 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 считывает значения красного, зеленого и синего света.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜