Dans ce tutoriel, vous allez apprendre à utiliser le capteur de gestes PAJ7620U2 avec Arduino ou d’autres microcontrôleurs courants comme l’ESP32 ou l’ESP8266.
Nous allons utiliser trois bibliothèques Arduino différentes pour reconnaître les gestes avec le capteur PAJ7620U2. Nous utiliserons ensuite la détection de gestes du PAJ7620U2 pour contrôler la position d’un servo.
Pour d’autres capteurs de gestes, consultez nos tutoriels sur le APDS-9930 et le APDS-9960 Capteur de Gestes.
Matériel nécessaire
Pour ce projet, il vous faut un capteur PAJ7620U2 et un microcontrôleur. J’ai utilisé un Arduino Uno, mais n’importe quel autre Arduino ou un ESP32/ESP8266 fera l’affaire, tant qu’il fournit une sortie 3,3V. Un des exemples utilise aussi un servo, mais ce n’est pas indispensable pour ce projet.

Capteur PAJ7620U2

Arduino Uno

Câble USB pour Arduino UNO

Jeu de fils Dupont

Breadboard

Servo
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Caractéristiques du capteur de gestes PAJ7620U2
Le PAJ7620U2 est un capteur de détection de gestes très compact (5,2x3x1,88 mm). Il peut reconnaître 13
gestes de la main comme monter, descendre, gauche, droite, avant, arrière, cercle horaire, cercle antihoraire, rotation horaire, saluer et des combinaisons de certains gestes, par exemple haut-bas.
Notez qu’il existe aussi un capteur PAJ7620 très similaire au PAJ7620U2, mais qui ne reconnaît que 9 gestes.
Le PAJ7620U2 possède deux modes de détection : rapide et lent. La vitesse de geste va de 60°/s à 600°/s en mode lent (normal) et de 60°/s à 1200°/s en mode rapide (gaming).
La puce fonctionne de 2,8V à 3,6V, consomme seulement 2,82 mA, et communique via une interface I2C jusqu’à 400 kbit/s.
Pour plus d’informations, consultez la fiche technique du PAJ7620U2 ci-dessous :
Carte breakout pour PAJ7620U2
La puce PAJ7620U2 est trop petite pour être connectée directement à un Arduino. En général, vous aurez besoin d’une carte breakout comme celle ci-dessous :

La plupart des cartes breakout pour le PAJ7620U2 possèdent les cinq broches suivantes :
- VIN : Alimentation (2,8 – 3,6V)
- GND : Masse
- SDA : Signal de données I2C
- SCL : Signal d’horloge I2C
- INT : Broche d’interruption
Dans la section suivante, je vous montre comment connecter une carte breakout PAJ7620U2 à un Arduino.
Connexion du PAJ7620U2 à Arduino
Grâce à l’interface I2C du PAJ7620U2, la connexion à un Arduino est simple. Commencez par connecter la broche SCL de la carte breakout PAJ7620U2 à A5 de l’Arduino. De même, connectez SDA à A4 de l’Arduino. Ensuite, reliez GND à GND et 3.3V à VCC du PAJ7620U2.

Assurez-vous d’utiliser du 3,3V pour l’alimentation. Le capteur PAJ7620U2 n’est pas prévu pour du 5V et les cartes breakout pour ce capteur n’ont généralement pas de régulateur de tension.
Code pour détecter les gestes avec le PAJ7620U2
Avant d’écrire du code pour détecter les gestes avec le PAJ7620U2, il faut installer une bibliothèque. J’ai choisi la bibliothèque PAJ7620U2 de Seeed-Studio. Pour l’installer, ouvrez le Library Manager , cherchez “PAJ7620”, trouvez la bibliothèque « Gesture PAJ7620 » de Seeed-Studio et cliquez sur INSTALL

Une fois la bibliothèque installée, écrivons un petit code de test pour essayer le capteur. Téléversez le code suivant, ouvrez le Serial Monitor et passez la main devant le capteur à environ 5 cm.
#include "Wire.h"
#include "paj7620.h"
void setup() {
Serial.begin(9600);
if (paj7620Init()) {
Serial.println("Could not initalize Sensor!");
}
}
void loop() {
uint8_t data = 0;
if (!paj7620ReadReg(0x43, 1, &data)) {
if (data == GES_RIGHT_FLAG) Serial.println("Right");
if (data == GES_LEFT_FLAG) Serial.println("Left");
if (data == GES_UP_FLAG) Serial.println("Up");
if (data == GES_DOWN_FLAG) Serial.println("Down");
}
delay(100);
}
Vous devriez voir la sortie suivante sur le Serial Monitor après avoir passé la main devant le capteur dans les quatre directions :

L’image ci-dessous montre l’orientation du capteur et les directions dans lesquelles il faut déplacer la main pour obtenir les lectures de gestes correspondantes :

Installer la bibliothèque PAJ7620U2 mise à jour
En octobre 2024, la bibliothèque PAJ7620U2 de Seeed-Studio installable via le Library Manager est limitée à la version 1.0.0. Seeed-Studio a publié une version 2.0.0 plus récente, mais elle n’est pas disponible via le Library Manager. Dans cette section, je vous montre comment installer et utiliser la bibliothèque mise à jour.
Avant d’installer la version 2.0.0, assurez-vous de désinstaller d’abord la version 1.0.0 ! Pour cela, ouvrez le Library Manager, cherchez « PAJ7620 », puis cliquez sur « UNINSTALL » pour la bibliothèque PAJ7620U2 de Seeed-Studio.
Ensuite, rendez-vous sur le Grove_Gesture repo , cliquez sur le bouton vert « Code » puis sur « Download ZIP », ce qui téléchargera un fichier nommé « Grove_Gesture-master.zip » sur votre ordinateur.

Vous pouvez ensuite installer cette bibliothèque ZIP via Sketch -> Include Library -> Add .ZIP Library ...
Vous trouverez ci-dessous un exemple simple qui utilise la bibliothèque PAJ7620U2 mise à jour pour reconnaître quatre gestes (Haut, Bas, Gauche, Droite) :
#include "Gesture.h"
paj7620 Gesture;
void setup() {
Serial.begin(9600);
if (!Gesture.init()) {
Serial.println("PAJ7620U2 initialization failed");
}
}
void loop() {
paj7620_gesture_t result;
if (Gesture.getResult(result)) {
if (result == UP) Serial.println("Up");
if (result == DOWN) Serial.println("Down");
if (result == LEFT) Serial.println("Left");
if (result == RIGHT) Serial.println("Right");
}
delay(100);
}
C’est essentiellement le même exemple que celui présenté pour l’ancienne bibliothèque version 1.0.0. Mais vous verrez que le nouveau code est un peu plus élégant, car il y a maintenant un Gesture et un result objet.
Le Grove_Gesture repo propose d’autres exemples qui montrent comment reconnaître 9 gestures ou 15 gestures . Cependant, si vous regardez le code, il est assez complexe et franchement pas très joli. Dans la section suivante, je vous présente donc une autre bibliothèque, bien plus agréable à utiliser si vous souhaitez détecter des gestes plus complexes.
Installer la bibliothèque RevEng_PAJ7620
Dans cet exemple, nous allons utiliser la RevEng_PAJ7620 Library pour détecter 9 gestes. Pour installer cette bibliothèque, ouvrez le Library Manager , cherchez “RevEng PAJ7620”, trouvez la bibliothèque « RevEng PAJ7620 » par Aaron S. Crandall et cliquez sur INSTALL :

Voici un exemple de code qui utilise la bibliothèque RevEng PAJ7620 pour reconnaître 9 gestes différents :
#include "RevEng_PAJ7620.h"
RevEng_PAJ7620 sensor = RevEng_PAJ7620();
void setup() {
Serial.begin(9600);
if (!sensor.begin()) {
Serial.print("PAJ7620U2 initialization failed");
}
}
void loop() {
Gesture gesture = sensor.readGesture();
switch (gesture) {
case GES_FORWARD:
Serial.println("FORWARD");
break;
case GES_BACKWARD:
Serial.println("BACKWARD");
break;
case GES_LEFT:
Serial.println("LEFT");
break;
case GES_RIGHT:
Serial.println("RIGHT");
break;
case GES_UP:
Serial.println("UP");
break;
case GES_DOWN:
Serial.println("DOWN");
break;
case GES_CLOCKWISE:
Serial.println("CLOCKWISE");
break;
case GES_ANTICLOCKWISE:
Serial.println("ANTICLOCKWISE");
break;
case GES_WAVE:
Serial.println("WAVE");
break;
}
}
Comme vous pouvez le voir, c’est très simple. On inclut d’abord la bibliothèque et on crée l’objet capteur. Dans la fonction setup , on initialise la communication série et le capteur. Et dans la fonction loop , on lit un geste et on utilise un switch pour afficher le geste détecté.
J’ai constaté que les gestes haut, bas, gauche, droite, avant et arrière sont détectés de façon fiable. Cependant, le capteur a plus de mal à détecter les gestes circulaires (horaire, antihoraire) et le geste de salutation. Il faut parfois s’entraîner un peu pour y arriver.
Dans la section suivante, nous allons utiliser le PAJ7620U2 pour contrôler un servo avec des gestes.
Contrôler un servo avec le capteur de gestes PAJ7620U2
Il faut d’abord connecter le servo à l’Arduino. Si vous avez un petit SG90 Micro Servos vous pouvez le brancher directement à un Arduino (pas besoin d’alimentation séparée). Connectez simplement le fil rouge (broche du milieu) du servo au 5V, le fil marron à la masse (GND) et le fil orange/jaune à la broche 13, comme ci-dessous.

Si vous avez besoin de plus d’infos sur la connexion et l’utilisation de ces servos, consultez le tutoriel How to control servo motors with Arduino correspondant.
Le code suivant utilise la bibliothèque PAJ7620U2 Library by Seeed-Studio (V2.0.0) mise à jour. Il détecte quatre gestes et positionne le servo en conséquence.
#include "Gesture.h"
#include "Servo.h"
paj7620 sensor;
Servo servo;
const int servoPin = 13;
void setup() {
sensor.init();
servo.attach(servoPin);
servo.write(90);
}
void loop() {
paj7620_gesture_t gesture;
if (sensor.getResult(gesture)) {
if (gesture == UP) servo.write(90);
if (gesture == DOWN) servo.write(90);
if (gesture == LEFT) servo.write(170);
if (gesture == RIGHT) servo.write(10);
}
}
On commence par inclure la bibliothèque standard Servo library (pas besoin d’installer de bibliothèque). Ensuite, on crée l’objet servo et on définit la broche à laquelle le servo est connecté ( servoPin ).
Dans la fonction setup , on attache le servo à la broche et on l’oriente initialement à 90°. Dans la fonction loop, on remplace les appels à print par des commandes write au servo. Pour un geste haut ou bas, on place le servo à 90°. Un geste gauche le met à 10°, un geste droite à 170°. Le court extrait vidéo ci-dessous montre le code en action :

Voici le même code utilisant la RevEng_PAJ7620 Library . Il fonctionne de la même façon, mais je l’ai trouvé un peu moins réactif, même si ce n’est peut-être qu’une impression.
#include "RevEng_PAJ7620.h"
#include "Servo.h"
RevEng_PAJ7620 sensor = RevEng_PAJ7620();
Servo servo;
const int servoPin = 13;
void setup() {
sensor.begin();
servo.attach(servoPin);
servo.write(90);
}
void loop() {
Gesture gesture = sensor.readGesture();
if (gesture == GES_UP) servo.write(90);
if (gesture == GES_DOWN) servo.write(90);
if (gesture == GES_LEFT) servo.write(170);
if (gesture == GES_RIGHT) servo.write(10);
}
Voilà, vous avez maintenant un contrôle gestuel simple pour un petit servo, que vous pouvez par exemple utiliser pour ouvrir ou fermer une boîte sans contact.
Conclusions
Dans ce tutoriel, vous avez appris à utiliser le capteur de gestes PAJ7620U2 avec un Arduino pour détecter des gestes à l’aide de différentes bibliothèques.
Comparé au APDS-9930 ou au APDS-9960 Capteur de Gestes, le PAJ7620U2 peut détecter beaucoup plus de gestes (jusqu’à 15) contre seulement quatre pour le APDS-9960 ou un seul pour le APDS-9930 .
La portée des capteurs de gestes est généralement limitée à environ 10 cm. Si vous souhaitez mesurer précisément la distance à des objets éloignés, par exemple pour des applications robotiques, il vaut mieux utiliser des capteurs de distance infrarouge comme le GP2Y0A710K0F qui utilisent la triangulation pour déterminer la distance à un objet. Encore mieux, les capteurs de distance Time-of-Flight (ToF) comme le TOF10120 ou le VL53L1X library , qui peuvent mesurer des distances jusqu’à plusieurs mètres.
Si vous avez des questions, n’hésitez pas à les poser dans les commentaires.
Bon bricolage ; )

