ESP8266-Arduino编程实例-PAJ7620手势传感器驱动 PAJ7620手势传感器驱动 1、PAJ7620介绍 PAJ7620 将手势识别功能与通用 I2C 接口集成到单个芯片中,形成图像分析传感器系统。 可识别上、下、左、右、前、后、顺时针、逆时针、挥手等9种人手手势。
它还提供内置的接近检测,以感应接近或离开传感器的物体。 PAJ7620 在省电机制方面具有极大的灵活性,非常适合低功耗电池供电的 HMI 设备。
PAJ7620 封装成模块形式,内置红外 LED 和光学透镜,作为完整的传感器解决方案。
PAJ7620具有如下特性:
手势模式:单目标检测
图像阵列大小:60 x 60
采样率:240fps
操作距离:20cm
输出类型:9 种手势:上、下、左、右、前进、后退、顺时针方向、逆时针方向和挥手)
光标模式:是
接口:I2C/SPI
光源 : 集成红外 LED 与光学
2、硬件准备
ESP8266 NodeMCU开发板一块
PAJ7620传感器模块一个
面板板一个
杜邦线若干
数据线一条
硬件接线如下:
传感器引脚
ESP8266开发板引脚
Vin
3.3v
Gnd
Gnd
SCL
D1
SDA
D2
3、软件准备
Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
4、代码实现 本次实例使用如下驱动库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 #include <Wire.h> #include "paj7620.h" #define GES\_REACTION\_TIME 500 // You can adjust the reaction time according to the actual circumstance. #define GES\_ENTRY\_TIME 800 // When you want to recognize the Forward/Backward gestures, your gestures' reaction time must less than GES\_ENTRY\_TIME(0.8s). #define GES\_QUIT\_TIME 1000 void setup() { uint8\_t error = 0; Serial.begin(9600); Serial.println("\nPAJ7620U2 TEST DEMO: Recognize 9 gestures."); error = paj7620Init(); // initialize Paj7620 registers if (error) { Serial.print("INIT ERROR,CODE:"); Serial.println(error); } else { Serial.println("INIT OK"); } Serial.println("Please input your gestures:\n"); } void loop() { uint8\_t data = 0, data1 = 0, error; error = paj7620ReadReg(0x43, 1, &data); // Read Bank\_0\_Reg\_0x43/0x44 for gesture result. if (!error) { switch (data) { // When different gestures be detected, the variable 'data' will be set to different values by paj7620ReadReg(0x43, 1, &data). case GES_RIGHT_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if (data == GES_FORWARD_FLAG) { Serial.println("Forward"); delay(GES_QUIT_TIME); } else if (data == GES_BACKWARD_FLAG) { Serial.println("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Right"); } break; case GES_LEFT_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if (data == GES_FORWARD_FLAG) { Serial.println("Forward"); delay(GES_QUIT_TIME); } else if (data == GES_BACKWARD_FLAG) { Serial.println("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Left"); } break; case GES_UP_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if (data == GES_FORWARD_FLAG) { Serial.println("Forward"); delay(GES_QUIT_TIME); } else if (data == GES_BACKWARD_FLAG) { Serial.println("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Up"); } break; case GES_DOWN_FLAG: delay(GES_ENTRY_TIME); paj7620ReadReg(0x43, 1, &data); if (data == GES_FORWARD_FLAG) { Serial.println("Forward"); delay(GES_QUIT_TIME); } else if (data == GES_BACKWARD_FLAG) { Serial.println("Backward"); delay(GES_QUIT_TIME); } else { Serial.println("Down"); } break; case GES_FORWARD_FLAG: Serial.println("Forward"); delay(GES_QUIT_TIME); break; case GES_BACKWARD_FLAG: Serial.println("Backward"); delay(GES_QUIT_TIME); break; case GES_CLOCKWISE_FLAG: Serial.println("Clockwise"); break; case GES_COUNT_CLOCKWISE_FLAG: Serial.println("anti-clockwise"); break; default: paj7620ReadReg(0x44, 1, &data1); if (data1 == GES_WAVE_FLAG) { Serial.println("wave"); } break; } } delay(100); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include <Wire.h> #include "paj7620.h" void setup() { Serial.begin(9600); paj7620Init(); } void loop() { uint8\_t data = 0; // Read Bank\_0\_Reg\_0x43/0x44 for gesture result. paj7620ReadReg(0x43, 1, &data); if (data == GES_UP_FLAG) { Serial.println("GES\_UP\_FLAG !"); } if (data == GES_DOWN_FLAG) { Serial.println("GES\_DOWN\_FLAG !"); } if(data == GES_FORWARD_FLAG) { Serial.println("GES\_FORWARD\_FLAG !"); } if(data == GES_BACKWARD_FLAG) { Serial.println("GES\_BACKWARD\_FLAG !"); } if(data == GES_RIGHT_FLAG) { Serial.println("GES\_RIGHT\_FLAG !"); } if(data ==GES_LEFT_FLAG) { Serial.println("GES\_LEFT\_FLAG !"); } }
文章来源: https://iotsmart.blog.csdn.net/article/details/126636601
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!