ኮድ ይፈልጉ

ለአርዱኖ APDS9960 የእጅ ምልክት፣ RGB እና የቅርበት ዳሳሽ

ለአርዱኖ APDS9960 የእጅ ምልክት፣ RGB እና የቅርበት ዳሳሽ

በዚህ መማሪያ ውስጥ፣ የእጅ ምልክት መለየትን፣ RGB ቀለም ዳሳሽን እና የቅርበት ዳሳሽ ችሎታዎችን የሚያጣምረውን የAPDS9960 ዳሳሽ ሞጁል እንዴት መጠቀም እንደሚቻል እንመረምራለን። ይህ ሁለገብ ዳሳሽ በተለያዩ አቅጣጫዎች የሚደረጉ እንቅስቃሴዎችን መለየት ይችላል እና በእጅ ምልክቶች ላይ ተመስርተው ሞተሮችን፣ መብራቶችን ወይም ሌሎች መሳሪያዎችን ለመቆጣጠር በፕሮጀክቶች ውስጥ ሊዋሃድ ይችላል። በዚህ መማሪያ መጨረሻ ላይ፣ ዳሳሹን እንዴት ማገናኘት እና በአርዱኖ ፕሮጀክቶችዎ ውስጥ መሰረታዊ የእጅ ምልክት መለየትን እንዴት መተግበር እንደሚችሉ ይረዱዋል።

APDS-9960 gesture sensor module -1

የAPDS9960 ሞጁል የታመቀ እና አነስተኛ የሽቦ ግንኙነት የሚፈልግ በመሆኑ ለበይነተገናኝ ፕሮጀክቶች በጣም ጥሩ ምርጫ ያደርገዋል። ዳሳሹን ለፕሮግራም ማድረግ እና የተለዩትን የእጅ ምልክቶች በተከታታይ መቆጣጠሪያ ላይ ለማሳየት የአርዱኖ IDE እንጠቀማለን። ለእይታ መመሪያ፣ በቪዲዮው ላይ ያለውን ቪዲዮ ይመልከቱ (በቪዲዮ 00:00)።

ሃርድዌር ተብራርቷል

የዚህ ፕሮጀክት ቁልፍ አካል የAPDS9960 ዳሳሽ ሞጁል ነው። ይህ ሞጁል ወደ ግራ መጥረግ፣ ወደ ቀኝ መጥረግ፣ ወደ ላይ መጥረግ እና ወደ ታች መጥረግን የመሳሰሉ የእጅ ምልክቶችን መለየት ይችላል። እንዲሁም የRGB ቀለም እሴቶችን እና በአቅራቢያ ያሉ ነገሮችን ቅርበት ይለካል። ዳሳሹ ከአርዱኖ ጋር I2C በመጠቀም ይገናኛል፣ ይህም የሽቦ ግንኙነትን እና የኮድ ሂደትን ቀላል ያደርገዋል።

APDS9960 በርካታ ውስጣዊ ዳሳሾችን ይዟል፡ የእጅ ምልክት ዳሳሽ፣ የRGB ቀለም ዳሳሽ እና የአካባቢ ብርሃን ዳሳሽ። የእጅ ምልክት ዳሳሽ የእጅ እንቅስቃሴዎችን ለመለየት የኢንፍራሬድ LED እና የፎቶ መርማሪ ይጠቀማል፣ የ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 ዳሳሽ ሞጁልን ከአርዱኖዎ ጋር ለማገናኘት እነዚህን ደረጃዎች ይከተሉ፦

  • የAPDS9960ን VCC ፒን በአርዱኖ ላይ ካለው 3.3ቪ ፒን ጋር ያገናኙ።
  • GND ፒንን በአርዱኖ ላይ ካሉት የGND ፒኖች አንዱ ጋር ያገናኙ።
  • SDA ፒንን ከአርዱኖው A4 ፒን (የI2C ዳታ መስመር) ጋር ያገናኙ።
  • SCL ፒንን ከአርዱኖው A5 ፒን (የI2C ሰዓት መስመር) ጋር ያገናኙ።
  • INT ፒንን ለማቋረጥ አያያዝ በአርዱኖ ላይ ካለው ዲጂታል ፒን 2 ጋር ያገናኙ።

የተለየ የአርዱኖ ሞዴል እየተጠቀሙ ከሆነ፣ የSDA እና SCL ፒኖች ሊለያዩ እንደሚችሉ ልብ ይበሉ (ለምሳሌ፣ በአርዱኖ ሜጋ ላይ፣ SDAን በፒን 20 እና SCLን በፒን 21 ይጠቀሙ)። ለቦርድዎ የተወሰኑ የፒን ካርታዎችን መፈተሽዎን ያረጋግጡ። ለተለያዩ ውቅሮች፣ በቪዲዮው ላይ ያለውን ቪዲዮ ይመልከቱ (በቪዲዮ 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 ተግባር የእጅ ምልክቱን አቅጣጫ ለመወሰን የመቀየሪያ መግለጫ ይጠቀማል። የተጠቀሰ ክፍል እዚህ አለ፦

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
    }
  }
}

እንደሚያስፈልግዎት ይችላል

ምንጮች እና ምንጮች

ፋይሎች📁

ፍሪትዚንግ ፋይል

ሌላ ፋይሎች

  • APDS9960 እንቅስቃሴ ቤተ መዋቅር ከሮቦጃክስ
    ይህ ቤተ መጻፍ የጂስተር ሴንሰር 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