智能家居硬件小制作(含源码)《手势识别控制器》基于PAJ7620手势模块、L298N驱动板、arduino
介绍
手势识别控制器,基于arduino、PAJ7620传感器,可实现9种手势识别,应用于制作各种智能硬件
控制电视、窗帘、门、计算机、手机、智能车、机器人等各种硬件
以下以控制电机为例子
。
材料
- Arduino uno
- PAJ7620手势模块
- Base shield扩展板(可选),使接线简单
- L298N驱动板
- 直流电机
- 杜邦线
PAJ7620手势模块👇
L298N驱动板👇
PAJ7620手势模块
参数
主板支持: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
- 从上面链接将库代码的zip文件下载.
- 打开arduino IDE
- 点击【项目】----->【加载库】-----> 【添加.ZIP库】
- 选择刚刚下载的文件,打开即可
使用
官方的简单演示
以下简单的演示将向您展示一个非常简单的应用:当您向上移动时,红色的LED将被打开,反之红色的LED将被关闭。
#include <Wire.h>
#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小白入门全解,学习笔记
有能力的小伙伴可以考虑自己加上显示功能,我的lcd笔记如下
制作手势识别控制器
接线
L298N驱动和直流电机接线方法参考我的博客
Arduino实践详细说明(三)L298N驱动直流电机
PAJ7620手势接线方法如上述
这里就不再啰嗦重复,有疑问可评论
源代码
持续更新arduino 树莓派 python linux c语言等等
接到有帮助的话 求点赞👍 求关注❤️ 求分享👥
有问题可以评论
点关注,不迷路
如果有任何错误,如何建议,请批评指教,不胜感激 !
/*手势模块,控制l298n驱动电机*/
#include <Wire.h>
#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);
}
来源:CSDN
作者:GuanFuXinCSDN
链接:https://blog.csdn.net/GuanFuXinCSDN/article/details/104709903