Maker.io main logo

Grove Smart IR Gesture Sensor (PAJ7660) Arduino Project

2023-10-02 | By Mirko Pavleski

License: General Public License Gesture Arduino

Тoday I received the Grove smart IR Gesture sensor from Seeed Studio. The product is nicely packaged and comes with a basic information sheet.

jghf

This is a relatively new module, and this time I will try to make a practical device that will present its possibilities with the help of a microcontroller. During testing and development, I will use utilities, libraries, and instructions from the Seeed Studio site

 

As for microcontrollers, I plan to work with an Arduino Nano. Otherwise, the Gesture sensor module on the back side has a microswitch with 4 units, with which combinations can be changed the method of communication between I2C, SPI, and USB mode.

jio

The fastest and easiest way to test the sensor and basic functions is using the provided Windows application Gesture Demo.

hu

For this purpose, the module should be set in USB mode, which means that the four microswitches should be in the OFF position. On the front of the sensor, in the upper left corner, there is a small human shape. If you see the figure standing upright, then you have placed it in the correct position.

ghjugv

Now we need to connect the Grove Gesture Sensor to PC, start Application, and click on RUN button in the top left corner of the software and then select Gesture mode to see the results in real time. Next, I present to you a way to make an independent device with the help of an Arduino microcontroller. This is the simplest example that will show the recognized gestures on the LCD display in text form, and at the same time will turn on the corresponding LED. LEDs can be replaced by relays that control a process or execute another command or perform a function according to the user's needs. In a word, basically with this simple code, and with minimal modifications we can make complex functional devices. Otherwise, the basic code is also taken from the Seeed Studio site indicated above in the text. Writing code is not my specialty, so I'm sure it could be made much simpler, but the most important thing is that it works flawlessly. If you have knowledge, you can freely modify and simplify it.

gvhycgf

The whole device is very simple and contains only a few components: - Arduino microcontroller - 16x2 characters I2C LCD Display - 5 LEDs with suitable resistors for current control - Buzzer - and Grove Smart IR Gesture Sensor from Seeed Studio. vgh

First, we will do a finger test, where depending on the number of detected fingers, the appropriate number of LEDs are activated. Next is Swipe, which detects the direction of hand movement. For example, in this way we can change pictures in a photo album, programs on TV, or songs in a playlist. And this time, just one more test, which I think is the most interesting, and that is clockwise and counterclockwise rotation. As you can see in the video, the executed commands are constantly displayed on the LCD Display. Finally, a short conclusion: This little module is an intelligent gesture recognition device equipped with an infrared camera sensor and applied AI algorithm. It can detect over 15 gestures with wide detection while supporting both IIC and SPI communication. In this video, I have presented the simplest way of controlling the module, thus giving you the opportunity to develop more ideas yourself and make a device according to your needs. Otherwise, you can get the module in the Seeed Studio store at a really affordable price.

bvhujhg

Copy Code
#include "Gesture.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

pag7660 Gesture; // Combined mode is used by default

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
lcd.init(); // initialize the lcd
lcd.backlight();

Serial.begin(9600);
tone(10, 500, 1000);

while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 TEST DEMO: Gesture combined mode.");

if(Gesture.init()) {
Serial.println("PAG7660 initialization success");
lcd.setCursor(5,0);
lcd.print("PAG7660");
lcd.setCursor(1,1);
lcd.print("Init. success");

delay(2000);
} else {
Serial.println("PAG7660 initialization failed");
}
Serial.println("Please input your gestures:\n");
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Input Gesture:");
}

void loop() {
pag7660_gesture_t result;
if (Gesture.getResult(result)) {
printResultCombinedMode(result);
}
delay(100);
}

void printResultCombinedMode(const pag7660_gesture_t& result) {
const char *cursor_str[] = {
NULL,
"Tap",
"Grab",
"Pinch",
};
switch (result.type) {
case 0:
switch (result.cursor.type) {
case 1:
case 2:
case 3:
if (result.cursor.select)
Serial.println(cursor_str[result.cursor.type]);
break;
default:
break;
}
break;
case 1:

case 2:

case 3:
case 4:
case 5:
Serial.print(result.type);
Serial.println("-finger");

lcd.setCursor(1,1);
lcd.print(result.type);
lcd.print(" - finger ");

if (result.type <= 1) {
digitalWrite(2, HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
}

if (result.type >1 && result.type<=2 ) {
digitalWrite(2, HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
}

if (result.type >2 && result.type<=3 ) {
digitalWrite(2, HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
}
if (result.type >3 && result.type<=4 ) {
digitalWrite(2, HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
if (result.type >4 && result.type<=5 ) {
digitalWrite(2, HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
}
break;

case 6:
Serial.print("Rotate Right ");
Serial.println(result.rotate);
break;
case 7:
Serial.print("Rotate Left ");
Serial.println(result.rotate);
break;
case 8:
Serial.println("Swipe Left");
lcd.setCursor(1,1);
lcd.print("<-Swipe Left ");
tone(10, 3000, 100);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(1000);
digitalWrite(2,LOW);
digitalWrite(3, LOW);
break;

case 9:
Serial.println("Swipe Right");

lcd.setCursor(1,1);
lcd.print("Swipe Right->");
tone(10, 3000, 100);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
delay(1000);
digitalWrite(5,LOW);
digitalWrite(6, LOW);

break;
case 19:
case 20:
case 21:
case 22:
case 23:
Serial.print(result.type - 19 + 1);
Serial.println("-finger push");
break;
default:
break;
}

}
制造商零件编号 101991067
GROVE SMART IR GESTURE SENSOR
Seeed Technology Co., Ltd
制造商零件编号 ABX00092
ARDUINO NANO ESP32 WITHOUT HEADE
Arduino
制造商零件编号 292
I2C/SPI CHARACTER LCD BACKPACK
Adafruit Industries LLC
制造商零件编号 NHD-0216K1Z-NSW-BBW-L
LCD MOD 32DIG 16X2 TRANSMISV WHT
Newhaven Display Intl
制造商零件编号 ROB-12567
SPARKFUN REDBOT BUZZER
SparkFun Electronics
Add all DigiKey Parts to Cart
TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum