Подключение датчика жестов APDS-9960 к Arduino

В этой статье подробно расскажу о APDS-9960, который представляет собой датчик света (RGB) и датчик жестов. В конце статьи приведу пример схему подключения датчика к Arduino UNO с небольшим кодом.

Технические параметры

► Напряжение питания: 3.3В;
► Дистанция обнаружения: 10-20 см;
► Интерфейс: I2C, адрес 0x39;
► Габариты: 20 х 15 х 3 мм;
► Вес: 2 грамм.

Общие сведенья о датчике APDS-9960

Датчик жестов APDS-9960 — это многофункциональный ИК-датчик, который способен обнаруживать жесты, RGB цвет и освещенность. Связь с микроконтроллерами осуществляется по протоколу I2C. Рабочие напряжение датчика составляет 3,3 В, а вот логическая часть может работать с 5 В.

Конструктивно датчик состоит из одного ИК светодиода (излучателя) и четырех фотодиодов (приемников), которые в свою очередь обнаруживают ИК-излучение. Поэтому когда выполняем какой либо жест, датчик получает отраженное ИК излучение фотодиодами и производится расчет направления и скорости. Диапазон обнаружения от 10 до 20 см.

Подробную информацию можно получить с документации на датчик, скачать можно нажав на эту кнопку или в конце статьи.

Назначение контактов:
► VL — дополнительное питание ИК-светодиода. Должно быть 3,0 – 4,5 В;
► VCC и GND — питание модуля, 3.3 В;
► SCL — шина I2C;
► SDA— шина I2C;
► INT — вывод внешнего прерывания.

На передней части датчика имеются две припаянные перемычки.

PS — перемычка соединяет источник питания датчика и ИК-светодиода. Когда перемычка установлена, необходимо подключать только контакт VCC. Если, перемычки нету, необходимо подавать питание на контакт VCC (2,4 — 3,6 В) и на контактов VL (3,0 — 4,5 В) отдельно. По молчанию перемычка установлена.

I2C PU — это трех контактная перемычка, используемая для подключения и отключения подтягивающих резисторов шны I2C. По умолчанию эта перемычка установлена.

Подключение датчика APDS-9960 к Arduino

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Датчик освещенности и приближения APDS-9960 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Описание:
В примере покажу как подключить датчик жестов APDS-9960 к Arduino UNO. В скетче будем определять движения руки, полученные данные отправим в последовательный порт.

Подключение:
Схема не сложная, необходимо всего четыре провода, сначала подключаем шину I2C, вывод SCL и SDA, подключам к выводам A4 и A5 (Arduino UNO), далее подключаем питание питание GND к GND и VCC к 3.3V, схема собрана, теперь надо подготовить программную часть.

Установка библиотек:
Для работы с модулем APDS-9960 необходимо установить библиотеку от «Sparkfun«, которая позволит нам упростить работу с датчиком. Для этого, переходим в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «SparkFun_APDS9960», находим и устанавливаем библиотеку.

Программа:
Первая программа определяет направление движение руки, а так же определяет приближение и отдалении, загружаем скетч в контроллер Arduno UNO.

#include <Wire.h>                             // Подключаем библиотеку Wire
#include <SparkFun_APDS9960.h>                // Подключаем библиотеку SparkFun_APDS9960
 
#define APDS9960_INT    2                     // Указываем вывод прерывания
 
SparkFun_APDS9960 apds = SparkFun_APDS9960(); // Создаем объект
int isr_flag = 0;                             // Создаем переменную isr_flag
 
void setup() {

  // Инициализируем последовательную связь и отправляем сообщения
  Serial.begin(9600);                        
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));
 
  // Инициализируем прерывание на спад
  attachInterrupt(0, interruptRoutine, FALLING);
 
  // Инициализируем APDS-9960
  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");
    }
  }
}

После загрузки скетча проведите рукой влево, вправо, вперед, назад и приблизьте и отдалите. Последовательный монитор будет отображать данные жеста всякий раз, когда будет обнаружено прерывание.

Будут вопросы пишите.

Ссылки
  Библиотека APDS9960

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Датчик жестов GY-9960, APDS-9960

Вам может также понравиться...

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

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