Кодты іздеу

APDS9960 Arduino үшін жест, RGB және жақындық сенсоры

APDS9960 Arduino үшін жест, RGB және жақындық сенсоры

Бұл оқулықта біз APDS9960 сенсор модулін қалай пайдалану керектігін қарастырамыз, ол ым-ишараны анықтау, RGB түсті сезу және жақындықты сезу мүмкіндіктерін біріктіреді. Бұл әмбебап сенсор әртүрлі бағыттағы қозғалыстарды анықтай алады және қол ым-ишарасы негізінде қозғалтқыштарды, шамдарды немесе басқа құрылғыларды басқару үшін жобаларға біріктірілуі мүмкін. Осы оқулықтың соңында сіз сенсорды қалай қосу керектігін және Arduino жобаларыңызда негізгі ым-ишараны анықтауды қалай жүзеге асыру керектігін түсінесіз.

APDS-9960 gesture sensor module -1

APDS9960 модулі ықшам және аз сымды қажет етеді, бұл оны интерактивті жобалар үшін тамаша таңдау етеді. Біз сенсорды бағдарламалау және анықталған ым-ишараларды сериялық мониторда көрсету үшін Arduino IDE қолданамыз. Көрнекі нұсқаулық үшін (00:00-дегі бейнеде) бейнені қараңыз.

Аппараттық құрал түсіндірмесі

Бұл жобаның негізгі құрамдас бөлігі APDS9960 сенсор модулі болып табылады. Бұл модуль солға сырғыту, оңға сырғыту, жоғары сырғыту және төмен сырғыту сияқты ым-ишараларды анықтай алады. Ол сондай-ақ RGB түс мәндерін және жақын нысандарға дейінгі қашықтықты өлшейді. Сенсор Arduino-мен I2C арқылы байланысады, бұл сымды қосу және кодтау процесін жеңілдетеді.

APDS9960 бірнеше ішкі сенсорларды қамтиды: ым-ишара сенсоры, RGB түс сенсоры және қоршаған жарық сенсоры. Ым-ишара сенсоры қол қозғалыстарын анықтау үшін инфрақызыл жарықдиод пен фотодетекторды пайдаланады, ал RGB сенсоры түстерді анықтау үшін қызыл, жасыл және көк жарық қарқындылығын өлшейді. Жақындық сенсоры нысанның сенсорға қаншалықты жақын екенін анықтайды, бұл әртүрлі қолданбаларда пайдалы болуы мүмкін.

Деректер парағының мәліметтері

Өндіруші Avago Technologies
Бөлшек нөмірі APDS-9960
Логика/IO кернеуі 1.8 В - 3.6 В
Қоректендіру кернеуі 3.3 В
Шығыс тогы (арнаға) 20 мА макс
Ең жоғары ток (арнаға) 100 мА
PWM жиілігі бойынша нұсқаулық Қолданылмайды
Кіріс логикалық шектері 0.3 В (төмен), 0.7 В (жоғары)
Кернеудің төмендеуі / RDS(on) / қанығу 0.5 В макс
Жылулық шектер -40 - 85 °C
Қаптама 6 істікшелі LGA
Ескертулер / нұсқалар Жоқ

 

  • APDS9960-ны әрқашан 3.3В кернеуімен қоректендіріңіз; жоғары кернеулер сенсорды зақымдауы мүмкін.
  • Бірнеше құрылғыны қосқанда I2C желілерінде тиісті тарту резисторларын қамтамасыз етіңіз.
  • Кедергілерді болдырмау үшін сенсорды тікелей күн сәулесінен алыс ұстаңыз.
  • Тұрақтылық үшін қуат түйреуіштеріне жақын жерде разрядтау конденсаторын пайдаланыңыз.
  • Жақындықты анықтау диапазонын біліңіз (әдетте шамамен 20 см).

Сымды қосу нұсқаулығы

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

APDS9960 сенсор модулін Arduino-ға қосу үшін мына қадамдарды орындаңыз:

  • APDS9960 VCC түйреуішін Arduino-дағы 3.3V түйреуішіне қосыңыз.
  • GND түйреуішін Arduino-дағы GND түйреуіштерінің біріне қосыңыз.
  • SDA түйреуішін Arduino-ның A4 түйреуішіне қосыңыз (I2C деректер желісі).
  • SCL түйреуішін Arduino-ның A5 түйреуішіне қосыңыз (I2C сағат желісі).
  • Үзілімдерді өңдеу үшін INT түйреуішін Arduino-дағы 2 цифрлық түйреуішіне қосыңыз.

Егер сіз басқа Arduino үлгісін қолдансаңыз, SDA және SCL түйреуіштері әртүрлі болуы мүмкін (мысалы, Arduino Mega-да 20-түйреуіште SDA және 21-түйреуіште SCL пайдаланыңыз). Платаңызға арналған нақты түйреуіш картасын тексеріңіз. Әртүрлі конфигурациялар үшін (02:30-дегі бейнеде) бейнені қараңыз.

Код мысалдары және түсіндірме

Орнату функциясында біз сериялық байланысты және APDS9960 сенсорын инициализациялаймыз. Үзіліс түйреуіші ым-ишара оқиғаларын тыңдау үшін орнатылады. Орнату кодының үзіндісі:

void setup() {
  pinMode(APDS9960_INT, INPUT);
  Serial.begin(9600);
  Serial.println(F("APDS-9960 инициализациясы..."));
  if (apds.init()) {
    Serial.println(F("Инициализация аяқталды"));
  } else {
    Serial.println(F("Инициализация сәтсіз аяқталды"));
  }
}

Бұл код сенсордың пайдалануға дайын болуын қамтамасыз ету үшін қажетті конфигурацияларды орнатады және сериялық мониторда кері байланыс береді.

Әрі қарай, сенсор анықтаған ым-ишараларды қалай өңдеу керектігін анықтаймыз. handleGesture функциясы ым-ишараның бағытын анықтау үшін switch операторын пайдаланады. Міне, қысқартылған үзінді:

void handleGesture() {
  if (apds.isGestureAvailable()) {
    switch (apds.readGesture()) {
      case DIR_UP:
        Serial.println("ЖОҒАРЫ");
        break;
      case DIR_DOWN:
        Serial.println("ТӨМЕН");
        break;
      // Солға, оңға, жақын және алыс үшін қосымша жағдайлар
    }
  }
}

Бұл функция ым-ишараның қолжетімді екенін тексереді және оның бағытын оқиды, нәтижені кері байланыс үшін сериялық мониторға басып шығарады. Толық іске асыру мәліметтері үшін мақаланың астында жүктелген толық кодты қараңыз.

Демонстрация / Не күтуге болады

Бағдарламаны іске қосқанда, қолыңызды әртүрлі бағытта қозғалтқанда анықталған ым-ишаралар сериялық мониторда басып шығарылғанын көруіңіз керек. Мысалы, жоғары сырғыту "ЖОҒАРЫ" деп көрсетілуі керек, ал төмен сырғыту "ТӨМЕН" деп көрсетеді. Жақын және алыс ым-ишараларды орындағанда қолыңызды бір секунд тұрақты ұстаңыз (10:00-дегі бейнеде).

Сенсордың жақындықты анықтауына абай болыңыз; егер қолыңызды тым жылдам немесе сенсордан тым алыс қозғалтсаңыз, ол ым-ишараны дәл тіркемеуі мүмкін. Бұл өнімділікке әсер етуі мүмкін жалпы мәселе.

Бейне уақыт белгілері

  • 00:00 - APDS9960 сенсорына кіріспе
  • 02:30 - Қосылу нұсқаулары
  • 05:15 - Код түсіндірмелері
  • 10:00 - Қимылды тану демонстрациясы

Суреттер

APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor module -1
Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor
87-This is code for an APDS9960 gesture, RGB, and proximity sensor module (6-pin).
Тіл: C++
++
/*
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
    }
  }
}

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Fritzing файлы

Басқа файлдар

  • APDS9960 жест кітапханасы Robojax-тан
    Бұл кітапхана APDS9960 жест сенсоры үшін қолданылады, ол қолыңыздың қозғалысын анықтап, қазіргі түсті анықтайды.
    robojax-gesture-APDS9960-Library.zip 0.30 MB
  • APDS9960 деректер парағы
    бұл APDS9960 чипінің деректер парағы. оның туралы көбірек білу үшін осы файлды қараңыз.
    robojax-gesture-APDS9960_datasheet.pdf 0.89 MB
  • APDS9960 Gesture Library
    Arduino library for the APDS9960 gesture, proximity, and color sensor. Provides functions to initialize the sensor, read gesture data, and configure detection thresholds. Supports I2C interface and operates at 3.3V.
    robojax-APDS9960-gesture-library.zip 0.30 MB
  • APDS9960 Gesture Datasheet
    Datasheet for the APDS9960 digital proximity, ambient light, RGB and gesture sensor. Features I2C interface, gesture detection with directional output, and operates at 2.4-3.6V.
    robojax-APDS9960-gesture-datasheet.pdf 0.89 MB