Search Code

Sensor ya APDS9960 ya ishara, RGB na ukaribu kwa Arduino

Sensor ya APDS9960 ya ishara, RGB na ukaribu kwa Arduino

Katika mafunzo haya, tutachunguza jinsi ya kutumia moduli ya sensor ya APDS9960, ambayo inachanganya uwezo wa kugundua ishara za mikono, kuhisi rangi za RGB, na kuhisi ukaribu. Sensor hii yenye matumizi mengi inaweza kugundua harakati katika mwelekeo mbalimbali na inaweza kuunganishwa katika miradi ya kudhibiti motors, taa, au vifaa vingine kulingana na ishara za mikono. Kufikia mwisho wa mafunzo haya, utaelewa jinsi ya kuunganisha sensor na kutekeleza ugunduzi wa msingi wa ishara katika miradi yako ya Arduino.

APDS-9960 gesture sensor module -1

Moduli ya APDS9960 ni ndogo na inahitaji wiring ndogo, na kuifanya kuwa chaguo bora kwa miradi shirikishi. Tutatumia Arduino IDE kupanga sensor na kuonyesha ishara zilizogunduliwa kwenye monitor ya serial. Kwa mwongozo wa kuona, rejea video kwenye (kwenye video saa 00:00).

Vifaa Vimeelezwa

Kipengele muhimu cha mradi huu ni moduli ya sensor ya APDS9960. Moduli hii ina uwezo wa kugundua ishara kama swipe kushoto, swipe kulia, swipe juu, na swipe chini. Pia hupima thamani za rangi za RGB na ukaribu wa vitu vilivyo karibu. Sensor inawasiliana na Arduino kwa kutumia I2C, ambayo hurahisisha mchakato wa wiring na coding.

APDS9960 ina sensor nyingi za ndani: sensor ya ishara, sensor ya rangi ya RGB, na sensor ya mwanga wa mazingira. Sensor ya ishara hutumia LED ya infrared na photodetector kugundua harakati za mkono, wakati sensor ya RGB hupima viwango vya mwanga nyekundu, kijani, na bluu kutambua rangi. Sensor ya ukaribu huamua jinsi kitu kilivyo karibu na sensor, ambayo inaweza kuwa muhimu katika matumizi mbalimbali.

Maelezo ya Datasheet

Mtengenezaji Avago Technologies
Nambari ya sehemu APDS-9960
Voltage ya Logic/IO 1.8 V hadi 3.6 V
Voltage ya usambazaji 3.3 V
Mkondo wa pato (kwa kila channel) 20 mA max
Mkondo wa kilele (kwa kila channel) 100 mA
Mwongozo wa frequency ya PWM Haifai
Viwango vya kizingiti cha logic ya kuingiza 0.3 V (chini), 0.7 V (juu)
Kushuka kwa voltage / RDS(on) / kueneza 0.5 V max
Mipaka ya joto -40 hadi 85 °C
Kifurushi 6-pin LGA
Vidokezo / lahaja Hakuna

 

  • Daima weka nguvu ya APDS9960 kwa 3.3V; voltages za juu zinaweza kuharibu sensor.
  • Hakikisha resistors sahihi za pull-up kwenye mistari ya I2C ikiwa unaunganisha vifaa vingi.
  • Weka sensor mbali na mwanga wa jua wa moja kwa moja ili kuepuka usumbufu.
  • Tumia capacitor ya decoupling karibu na pini za nguvu kwa utulivu.
  • Fahamu masafa ya kuhisi kwa ugunduzi wa ukaribu (kawaida karibu 20 cm).

Maagizo ya Wiring

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

Ili kuunganisha moduli ya sensor ya APDS9960 kwenye Arduino yako, fuata hatua hizi:

  • Unganisha pini ya VCC ya APDS9960 kwenye pini ya 3.3V kwenye Arduino.
  • Unganisha pini ya GND kwenye moja ya pini za GND kwenye Arduino.
  • Unganisha pini ya SDA kwenye pini ya A4 ya Arduino (mstari wa data wa I2C).
  • Unganisha pini ya SCL kwenye pini ya A5 ya Arduino (mstari wa saa wa I2C).
  • Unganisha pini ya INT kwenye pini ya digital 2 kwenye Arduino kwa ushughulikiaji wa interrupt.

Kumbuka kwamba ikiwa unatumia mfano tofauti wa Arduino, pini za SDA na SCL zinaweza kutofautiana (kwa mfano, kwenye Arduino Mega, tumia SDA kwenye pini 20 na SCL kwenye pini 21). Hakikisha umeangalia ramani maalum za pini kwa bodi yako. Kwa usanidi tofauti, rejea video kwenye (kwenye video saa 02:30).

Mifano ya Code & Maelekezo

Katika kazi ya setup, tunaanzisha mawasiliano ya serial na sensor ya APDS9960. Pini ya interrupt imewekwa kusikiliza matukio ya ishara. Hapa kuna sehemu ya code ya setup:

void setup() {
  pinMode(APDS9960_INT, INPUT);
  Serial.begin(9600);
  Serial.println(F("APDS-9960 initialization..."));
  if (apds.init()) {
    Serial.println(F("Initialization complete"));
  } else {
    Serial.println(F("Initialization failed"));
  }
}

Code hii inaweka usanidi muhimu ili kuhakikisha sensor iko tayari kutumika na inatoa maoni kwenye monitor ya serial.

Ifuatayo, tunafafanua jinsi ya kushughulikia ishara zilizogunduliwa na sensor. Kazi ya handleGesture hutumia taarifa ya switch kuamua mwelekeo wa ishara. Hapa kuna sehemu iliyolenga:

void handleGesture() {
  if (apds.isGestureAvailable()) {
    switch (apds.readGesture()) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      // Kesi za ziada za kushoto, kulia, karibu, na mbali
    }
  }
}

Kazi hii inaangalia ikiwa ishara inapatikana na inasoma mwelekeo wake, ikichapisha matokeo kwenye monitor ya serial kwa maoni. Hakikisha unarejea code kamili iliyopakiwa chini ya makala kwa maelezo kamili ya utekelezaji.

Maonyesho / Nini cha Kutarajia

Unapoendesha programu, unapaswa kuona ishara zilizogunduliwa zikichapishwa kwenye monitor ya serial unaposogeza mkono wako katika mwelekeo tofauti. Kwa mfano, kusogeza juu kunapaswa kuonyesha "UP," wakati kusogeza chini kunaonyesha "DOWN." Hakikisha unashikilia mkono wako kwa utulivu kwa sekunde moja unapofanya ishara za karibu na mbali (kwenye video saa 10:00).

Kuwa makini na ugunduzi wa ukaribu wa sensor; ikiwa unasogeza mkono wako haraka sana au mbali sana na sensor, inaweza isisajili ishara kwa usahihi. Hili ni tatizo la kawaida linaloweza kuathiri utendaji.

Vidokezo vya Muda wa Video

  • 00:00 - Utangulizi wa sensa ya APDS9960
  • 02:30 - Maelekezo ya uunganishaji wa nyaya
  • 05:15 - Maelezo ya msimbo
  • 10:00 - Onyesho la utambuzi wa ishara za mikono

Bilder

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).
Språk: 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
    }
  }
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Fritzing-fil

Andra filer

  • APDS9960 Gesterbibliotek från Robojax
    Detta bibliotek används för gestsensor APDS9960 för att upptäcka rörelse av din hand och identifiera närvarande färg.
    robojax-gesture-APDS9960-Library.zip 0.30 MB
  • APDS9960 Datablad
    detta är databladet för APDS9960-chipet. ta en titt på den här filen för att lära dig mer om det.
    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