Код для поиска

Датчик жестов APDS-9960 с Arduino

Датчик жестов APDS-9960 с Arduino

Датчик жестов APDS-9960 позволяет обнаруживать жесты рук, такие как свайпы и близость. В этом руководстве мы покажем, как подключить APDS-9960 к Arduino и запрограммировать его для распознавания жестов. Результатом будет простая установка, которая может обнаруживать движения и передавать их через последовательный монитор. Этот гайд поможет вам понять проводку и код, необходимые для начала работы с датчиком жестов. (в видео на 00:30)

APDS-9960 gesture sensor module -1

Аппаратное обеспечение объяснено

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

Технические характеристики

ПроизводительБродком
Номер деталиAPDS-9960
Логическое/входное напряжение2.7 - 3.6 В
Напряжение питания3,3 В
Выходной ток (на канал)1 мА
Пиковый ток (на канал)10 мА
Рекомендации по частоте PWM100 Гц
Входные логические пороги0.3 x VDD(низкий), 0.7 x VДД(высокий)
Падение напряжения / RДС(включено)/ насыщение0.5 В макс
Термические ограничения-40 до +85 °C
пакет6-pin LGA
Заметки / вариантыПоддерживает I2C-связь

  • Убедитесь, что напряжение питания не превышает 3,6 В, чтобы избежать повреждений.
  • Используйте подтягивающие резисторы на линиях I2C для надежной связи.
  • Держите датчик подальше от прямых солнечных лучей для точных показаний.
  • Убедитесь, что датчик правильно инициализирован в коде.
  • Проверьте соединения проводки, чтобы избежать "плавающих" входов.

Инструкции по проводке

Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor

Для подключения 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...
    }
  }
}

В этой функции считывается жест, и в зависимости от обнаруженного направления выполняется соответствующее действие. Это позволяет осуществлять интерактивное управление на основе движений рук. Для полного понимания кода, пожалуйста, обратитесь к полной программе, загруженной ниже статьи.

APDS-9960 gesture sensor -3

Демонстрация / Что ожидать

Когда настройка завершена, вы можете ожидать, что Arduino будет считывать жесты и отображать распознанное направление на последовательном мониторе. Простые тесты включают в себя движения вашей рукой вверх, вниз, влево или вправо перед сенсором. Если все соединено правильно, вы должны увидеть соответствующий вывод на последовательном мониторе, подтверждающий распознавание жестов. Будьте осторожны с плавающими входами, так как они могут привести к непоследовательным измерениям (в видео на 05:20).

Временные метки видео

  • 00:00- Введение
  • 01:15- Обзор аппаратного обеспечения
  • 03:00- Инструкции по проводке
  • 04:30- Прогулка по коду
  • 06:15- Демонстрация

Изображения

APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor -3
APDS-9960 gesture sensor -3
Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor
1-Code for an APDS-9960 gesture sensor for Arduino
Язык: C++
/*
 * Код для датчика жестов APDS-9960 для Arduino
 * Этот код предназначен для обнаружения жестов вашей руки: движения вверх, вниз, влево или вправо; другие жесты могут быть обнаружены и использованы для управления чем-то еще.
 * 
 * Посмотрите видео о датчике жестов APDS-9960 https://youtu.be/qzSgZV_fbxI
 * Получите этот код на https://robojax.com
 * 
 * Код, использованный в видео, Ахмада Шамшири для Robojax.com
 * 31 декабря 2016 года, в 6:53 AM в Ajax, Ontario, Canada
 * Разрешение на распространение этого кода дано при условии, что это
 * замечание будет сохранено вместе с кодом.
 * Отказ от ответственности: этот код является "КАК ЕСТЬ" и предназначен только для образовательных целей.
 * 
 * GestureTest.ino
 * Датчик RGB и жестов APDS-9960
 * Шон Хаймел @ SparkFun Electronics
 * 30 мая 2014 года
 * https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
 * 
 * Тестирует способности датчика жестов APDS-9960. Конфигурирует
 * APDS-9960 через I2C и ждет событий жестов. Вычисляет
 * направление свайпа (вверх, вниз, влево, вправо) и отображает это
 * в консоли.
 * 
 * Чтобы выполнить жест NEAR, удерживайте руку
 * высоко над датчиком и двигайте ее ближе к датчику (в пределах 2 дюймов). Удерживайте руку на месте не менее 1 секунды, а затем уберите ее.
 * 
 * Чтобы выполнить жест FAR, удерживайте руку на расстоянии 2 дюйма от
 * датчика в течение как минимум 1 секунды, а затем уберите ее (вне
 * досягаемости) от датчика.
 * 
 * Аппаратные соединения:
 * 
 * ВАЖНО: APDS-9960 может принимать только 3.3V!
 * 
 * Пин 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
 * 
 * Этот код - beerware; если вы увидите меня (или любого другого сотрудника 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");
    }
  }
}
2-Source code for controlling a servo with your hand
Язык: C++
/*
 * Изменено для RoboJax А.Б.С. 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");
    }
  }
}

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Другие файлы