手势识别控制器,基于arduino、PAJ7620传感器,可实现9种手势识别,应用于制作各种智能硬件
控制电视、窗帘、门、计算机、手机、智能车、机器人等各种硬件
以下以控制电机为例子
主板支持:Arduino UNO / Seeeduino / Arduino Mega2560
模块支持9种手势,如下
你可以通过连接Base Shield 将此模块连接到 Base Shield 的 I2C 端口,如下
先把PAJ7620手势模块连接到 Base shield 的 I2C 端口上然后将 Base shield 连接到 Arduino UNO 上,即可
如果没有 Base Shield ,您也可以通过跳线将PAJ7620手势直接连接到 Arduino,方法如下
Arduino UNO | Base Shield | PAJ7620手势模块 |
---|---|---|
5V | I2C 端口 | VCC |
GND | I2C 端口 | GND |
SDA | I2C 端口 | SDA |
SCL | I2C 端口 | SCL |
Digit 2 | 未连接 | INT (Reserved pad) |
为了使用使用PAJ7620手势模块,我们需要引入一个库文件
库文件:PAJ7620
官方的简单演示
以下简单的演示将向您展示一个非常简单的应用:当您向上移动时,红色的LED将被打开,反之红色的LED将被关闭。
#include
#include "paj7620.h"
void setup()
{
paj7620Init(); //初始化手势传感器芯片PAJ7620
}
void loop()
{
uint8_t data = 0; // Read Bank_0_Reg_0x43/0x44 for gesture result.
paj7620ReadReg(0x43, 1, &data); // When different gestures be detected, the variable 'data' will be set to different values by paj7620ReadReg(0x43, 1, &data).
if (data == GES_UP_FLAG) // When up gesture be detected,the variable 'data' will be set to GES_UP_FLAG.
digitalWrite(4, HIGH); // turn the LED on (HIGH is the voltage level)
if (data == GES_DOWN_FLAG) // When down gesture be detected,the variable 'data' will be set to GES_DOWN_FLAG.
digitalWrite(4, LOW); // turn the LED off by making the voltage LOW
您可以自己查看 .h 和 .cpp 文件,以查看所有可用的功能
关于其他硬件有需要可以查看我的其他博客
Arduino小白入门全解,学习笔记
Arduino实践详细说明(三)L298N驱动直流电机
有能力的小伙伴可以考虑自己加上显示功能,我的lcd笔记如下
Arduino实践(二)lcd1602使用说明,源码
L298N驱动和直流电机接线方法参考我的博客
Arduino实践详细说明(三)L298N驱动直流电机
PAJ7620手势接线方法如上述
这里就不再啰嗦重复,有疑问可评论
持续更新arduino 树莓派 python linux c语言等等
接到有帮助的话 求点赞 求关注❤️ 求分享
有问题可以评论
点关注,不迷路
如果有任何错误,如何建议,请批评指教,不胜感激 !
/*手势模块,控制l298n驱动电机*/
#include
#include "paj7620.h" //导入库,并调用
#define GES_REACTION_TIME 500
#define GES_ENTRY_TIME 800
#define GES_QUIT_TIME 1000
#define IN1 3 //定义IN1为3口
#define IN2 4 //定义IN2为4口
#define ENA 10 //定义ENA为10口
void setup()
{
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(ENA,OUTPUT);
uint8_t error = 0;
Serial.begin(9600);
Serial.println("\nPAJ7620U2 TEST DEMO: Recognize 9 gestures.");
error = paj7620Init(); //初始化手势模块
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);
{
switch (data)
{
case GES_RIGHT_FLAG:
{ delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if(data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
digitalWrite(IN1,LOW); //控制电机停下
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
delay(GES_QUIT_TIME);}
else if(data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
digitalWrite(IN1,HIGH); //控制电机正转
digitalWrite(IN2,LOW);
analogWrite(ENA,200); //控制电机转速,超过150电机才开始转
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Right");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
}}
break;
case GES_LEFT_FLAG:
{ delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if(data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
delay(GES_QUIT_TIME);
}
else if(data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Left");
digitalWrite(IN1,LOW); //电机反转
digitalWrite(IN2,HIGH);
analogWrite(ENA,200);
}}
break;
case GES_UP_FLAG:
{ delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if(data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
delay(GES_QUIT_TIME);
}
else if(data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
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");
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
delay(GES_QUIT_TIME);}
else if(data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Down");
}}
break;
case GES_FORWARD_FLAG:
{ Serial.println("Forward");
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
delay(GES_QUIT_TIME);
}
break;
case GES_BACKWARD_FLAG :
{ Serial.println("Backward");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
delay(GES_QUIT_TIME);
}
break;
case GES_CLOCKWISE_FLAG:
{ Serial.println("Clockwise");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
}
break;
case GES_COUNT_CLOCKWISE_FLAG:
{ Serial.println("anti-clockwise");
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,200);
}
break;
default:
paj7620ReadReg(0x44, 1, &data1);
if (data1 == GES_WAVE_FLAG)
{
Serial.println("wave");
}
break;
}
}
delay(100);
}