Skip to content

Latest commit

 

History

History

2-gesture_detection

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Piu' sotto, al termine della lingua inglese trovi il testo in italiano.
Below English text you'll find the Italian version


My VL53L1X library - Mode 2 - gesture recognition

Library provides a function that, receiving as parameter the detected distance of a target (a hand moving in front of the sensor), recognize three types of gestures:

  • a fast movement in front of the sensor (a hand quickly moving). This gesture is called a "SINGLE CLICK"
  • two fast movement in front of the sensor in a short time (a hand quickly moving forth and back): a "DOUBLE CLICK"
  • a target detected for a long time by the sensor (a hand keeping in front of the sensor): a "LONG CLICK"

Function returns the gestures detected and (in case of a long click) the target distance for the whole time gesture is detected.

Example of using this function is on this YouTube video: Gesture Recognition with ToF sensors: gesture detection and a gesture menu system using VL53L1X


Create a STM32CubeMX project

Follow all steps in Mode 1

STM32CubeIDE setup

Follow all steps in Mode 1
Then

  • Copy, from the src folder of this repository, z_vl53l1_gesture.c and z_vl53l1_gesture.h, again to the corresponding project folder
  • edit main.h file and, in "Private includes" session, add include directive for the .h files:

(main.h)
...
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "VL53L1X_api.h"
#include "vl53l1_platform.h"
#include "z_vl53l1_gesture.h"
/* USER CODE END Includes */
...

Library configuration

Edit z_vl53l1_gesture.h and set the configuration parameters in USER/PROJECT PARAMETERS session on "STEP 1":

  • max and min distance where gesture are detected (within the ranging threshold definition (see vl53l1_platform.h, STEP 3)
  • time threshold to detect a double click
  • time threshold to detect a long click
  • timing budget in single/doubleclick detection
  • timing budget when in long click
  • "differential smoothness" (see Controlling values with gesture recognition: an incremental algorithm)

Available functions


void VL53L1__InitGesture();

VL53L1__InitGesture() initialize sensor as per gesture detection parameters.

uint8_t VL53L1__CheckGesture(uint16_t dist, uint8_t *sClick, uint8_t *dClick, uint8_t *lClick, int16_t *lClickVal, const int16_t lClickLower, const int16_t lClickUpper);

VL53L1__CheckGesture() receives distance measured by the sensor (dist) and detects clicks, setting to 1 sClick, dClick, lClick if detected single, double or long clicks.
In case of a long click running, function sets lClickVal as per long click detection within limits defined by lClickLower and lClickUpper. (see Using the gesture recognition function for an example)


Usage


...

	SStatus=VL53L1__GetDistance(&Distance);
	if (SStatus<=VL53L1__RANGE_STATUS_THRESH)
		VL53L1__CheckGesture(Distance, &shortClick, &doubleClick, &longClick, &longClickVal, TESTGESTURE_LCLICK_LOWER, TESTGESTURE_LCLICK_UPPER);

...


La mia libreria VL53L1X - Mode 2 - riconoscimento gesti

La libreria fornisce una funzione che, ricevendo come parametro la distanza rilevata di un target (una mano che si muove davanti al sensore), riconosce tre tipi di gesti:

  • un movimento veloce davanti al sensore (una mano che si muove velocemente). Questo gesto è chiamato "SINGLE CLICK"
  • due movimenti veloci davanti al sensore in breve tempo (una mano che si muove velocemente avanti e indietro): un "DOUBLE CLICK"
  • un bersaglio rilevato a lungo dal sensore (una mano che rimane davanti al sensore): un "LONG CLICK"

La funzione restituisce i gesti rilevati e (in caso di long click) la distanza target per l'intero tempo in cui viene rilevato il gesto.

Un esempio di utilizzo di questa funzione si trova in questo video YouTube: Gesture Recognition with ToF sensors: gesture detection and a gesture menu system using VL53L1X


Crea un progetto STM32CubeMX

Esegui tutti i passi come in Mode 1

STM32CubeIDE setup

Esegui tutti i passi come in Mode 1
Poi

  • Copia, dalla cartella src di questa repository, z_vl53l1_gesture.c e z_vl53l1_gesture.h , nuovamente nella corrispondente cartella del progetto
  • modifica il file main.h e, nella sessione "Include private", aggiungi la direttiva include per i file .h:

(main.h)
...
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "VL53L1X_api.h"
#include "vl53l1_platform.h"
#include "z_vl53l1_gesture.h"
/* USER CODE END Includes */
...

Configurazione della libreria

Modifica z_vl53l1_gesture.h e imposta i parametri di configurazione nella sessione USER/PROJECT PARAMETERS nello "STEP 1":

  • distanza massima e minima in cui vengono rilevati i gesti (entro la definizione dell'area di lettura (vedere vl53l1_platform.h, FASE 3)
  • soglia temporale per rilevare un doppio clic
  • soglia temporale per rilevare un clic lungo
  • Budget temporale nel rilevamento del singolo/doppio clic
  • Budget temporale durante il clic lungo
  • "differential smoothness" (vedi Controlling values with gesture recognition: an incremental algorithm)

Funzioni disponibili


void VL53L1__InitGesture();

VL53L1__InitGesture() inizializza il sensore secondo i parametri richiesti per il rilevamento dei gesti.

uint8_t VL53L1__CheckGesture(uint16_t dist, uint8_t *sClick, uint8_t *dClick, uint8_t *lClick, int16_t *lClickVal, const int16_t lClickLower, const int16_t lClickUpper);

VL53L1__CheckGesture() riceve la distanza misurata dal sensore (dist) e rileva i click, impostando a 1 sClick, dClick, lClick se rilevati clic singoli, doppi o lunghi.
In caso di clic lungo, la funzione imposta lClickVal in base alla distanza rilevata del clic lungo, entro i limiti definiti da lClickLower e lClickUpper. (vedi Using the gesture recognition function per un esempio)

Utilizzo


...

	SStatus=VL53L1__GetDistance(&Distance);
	if (SStatus<=VL53L1__RANGE_STATUS_THRESH)
		VL53L1__CheckGesture(Distance, &shortClick, &doubleClick, &longClick, &longClickVal, TESTGESTURE_LCLICK_LOWER, TESTGESTURE_LCLICK_UPPER);

...