Szukaj kodu

Czujnik gestów, RGB i zbliżeniowy APDS9960 dla Arduino

Czujnik gestów, RGB i zbliżeniowy APDS9960 dla Arduino

W tym samouczku dowiemy się, jak używać modułu czujnika APDS9960, który łączy w sobie wykrywanie gestów, pomiar kolorów RGB oraz wykrywanie odległości. Ten wszechstronny czujnik może wykrywać ruchy w różnych kierunkach i może być zintegrowany z projektami do sterowania silnikami, światłami lub innymi urządzeniami na podstawie gestów dłoni. Po ukończeniu tego samouczka zrozumiesz, jak podłączyć czujnik i zaimplementować podstawowe wykrywanie gestów w swoich projektach Arduino.

APDS-9960 gesture sensor module -1

Moduł APDS9960 jest kompaktowy i wymaga minimalnego okablowania, co czyni go doskonałym wyborem do projektów interaktywnych. Do programowania czujnika użyjemy Arduino IDE, a wykryte gesty będą wyświetlane na monitorze szeregowym. Aby uzyskać wizualny przewodnik, zapoznaj się z filmem (na filmie w czasie 00:00).

Objaśnienie sprzętu

Kluczowym elementem tego projektu jest moduł czujnika APDS9960. Moduł ten jest w stanie wykrywać gesty, takie jak przesunięcie w lewo, w prawo, w górę i w dół. Mierzy również wartości kolorów RGB oraz odległość do pobliskich obiektów. Czujnik komunikuje się z Arduino za pomocą I2C, co upraszcza proces okablowania i kodowania.

APDS9960 zawiera wiele wewnętrznych czujników: czujnik gestów, czujnik kolorów RGB oraz czujnik światła otoczenia. Czujnik gestów wykorzystuje diodę podczerwieni i fotodetektor do wykrywania ruchów dłoni, podczas gdy czujnik RGB mierzy natężenie światła czerwonego, zielonego i niebieskiego w celu identyfikacji kolorów. Czujnik odległości określa, jak blisko obiektu znajduje się czujnik, co może być przydatne w różnych zastosowaniach.

Szczegóły z karty katalogowej

Producent Avago Technologies
Numer części APDS-9960
Napięcie logiczne/IO 1,8 V do 3,6 V
Napięcie zasilania 3,3 V
Prąd wyjściowy (na kanał) 20 mA maks.
Prąd szczytowy (na kanał) 100 mA
Zalecenia dotyczące częstotliwości PWM Nie dotyczy
Progi logiczne wejściowe 0,3 V (niski), 0,7 V (wysoki)
Spadek napięcia / RDS(on) / nasycenie 0,5 V maks.
Limity termiczne -40 do 85 °C
Obudowa 6-pinowa LGA
Uwagi / warianty Brak

 

  • Zawsze zasilaj APDS9960 napięciem 3,3 V; wyższe napięcia mogą uszkodzić czujnik.
  • Zapewnij odpowiednie rezystory podciągające na liniach I2C, jeśli podłączasz wiele urządzeń.
  • Trzymaj czujnik z dala od bezpośredniego światła słonecznego, aby uniknąć zakłóceń.
  • Użyj kondensatora odsprzęgającego blisko pinów zasilania dla stabilności.
  • Zwracaj uwagę na zakres wykrywania dla detekcji odległości (zazwyczaj około 20 cm).

Instrukcje okablowania

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

Aby podłączyć moduł czujnika APDS9960 do Arduino, wykonaj następujące kroki:

  • Podłącz pin VCC modułu APDS9960 do pinu 3,3 V na Arduino.
  • Podłącz pin GND do jednego z pinów GND na Arduino.
  • Podłącz pin SDA do pinu A4 na Arduino (linia danych I2C).
  • Podłącz pin SCL do pinu A5 na Arduino (linia zegara I2C).
  • Podłącz pin INT do pinu cyfrowego 2 na Arduino do obsługi przerwań.

Należy pamiętać, że jeśli używasz innego modelu Arduino, piny SDA i SCL mogą się różnić (np. w Arduino Mega użyj SDA na pinie 20 i SCL na pinie 21). Upewnij się, że sprawdziłeś konkretne przypisania pinów dla swojej płytki. W przypadku różnych konfiguracji zapoznaj się z filmem (na filmie w czasie 02:30).

Przykłady kodu i omówienie

W funkcji setup inicjalizujemy komunikację szeregową oraz czujnik APDS9960. Pin przerwania jest skonfigurowany do nasłuchiwania zdarzeń gestów. Oto fragment kodu setup:

void setup() {
  pinMode(APDS9960_INT, INPUT);
  Serial.begin(9600);
  Serial.println(F("Inicjalizacja APDS-9960..."));
  if (apds.init()) {
    Serial.println(F("Inicjalizacja zakończona"));
  } else {
    Serial.println(F("Inicjalizacja nie powiodła się"));
  }
}

Ten kod konfiguruje niezbędne ustawienia, aby zapewnić gotowość czujnika do użycia i zapewnia informacje zwrotne na monitorze szeregowym.

Następnie definiujemy, jak obsługiwać gesty wykryte przez czujnik. Funkcja handleGesture używa instrukcji switch do określenia kierunku gestu. Oto odpowiedni fragment:

void handleGesture() {
  if (apds.isGestureAvailable()) {
    switch (apds.readGesture()) {
      case DIR_UP:
        Serial.println("GÓRA");
        break;
      case DIR_DOWN:
        Serial.println("DÓŁ");
        break;
      // Dodatkowe przypadki dla lewo, prawo, blisko i daleko
    }
  }
}

Ta funkcja sprawdza, czy gest jest dostępny, i odczytuje jego kierunek, wyświetlając wynik na monitorze szeregowym w celu uzyskania informacji zwrotnej. Pełny kod znajduje się poniżej artykułu i zawiera szczegóły implementacji.

Demonstracja / Czego się spodziewać

Po uruchomieniu programu powinieneś zobaczyć wykryte gesty wyświetlane na monitorze szeregowym podczas poruszania dłonią w różnych kierunkach. Na przykład przesunięcie w górę powinno wyświetlić "GÓRA", a przesunięcie w dół "DÓŁ". Podczas wykonywania gestów blisko i daleko przytrzymaj dłoń nieruchomo przez sekundę (na filmie w czasie 10:00).

Zachowaj ostrożność w przypadku detekcji odległości czujnika; jeśli poruszysz dłonią zbyt szybko lub zbyt daleko od czujnika, gest może nie zostać zarejestrowany dokładnie. To częsty problem, który może wpływać na wydajność.

Znaczniki czasu w filmie

  • 00:00 - Wprowadzenie do czujnika APDS9960
  • 02:30 - Instrukcje podłączenia
  • 05:15 - Wyjaśnienia dotyczące kodu
  • 10:00 - Demonstracja rozpoznawania gestów

Obrazy

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).
Język: 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
    }
  }
}

Rzeczy, których możesz potrzebować

Zasoby i odniesienia

Pliki📁

Plik Fritzing

Inne pliki

  • Biblioteka gestów APDS9960 od Robojax
    Ta biblioteka jest używana do czujnika gestów APDS9960, aby wykrywać ruch twojej ręki i rozpoznawać obecny kolor.
    robojax-gesture-APDS9960-Library.zip 0.30 MB
  • APDS9960 Karta katalogowa
    to jest karta katalogowa układu APDS9960. zapoznaj się z tym plikiem, aby dowiedzieć się więcej na jego temat.
    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