智能家居硬件小制作(含源码)《手势识别控制器》基于PAJ7620手势模块、L298N驱动板、arduino

智能家居硬件小制作(含源码)《手势识别控制器》基于PAJ7620手势模块、L298N驱动板、arduino

介绍

手势识别控制器,基于arduino、PAJ7620传感器,可实现9种手势识别,应用于制作各种智能硬件
控制电视、窗帘、门、计算机、手机、智能车、机器人等各种硬件
以下以控制电机为例子

材料

  1. Arduino uno
  2. PAJ7620手势模块
  3. Base shield扩展板(可选),使接线简单
  4. L298N驱动板
  5. 直流电机
  6. 杜邦线

PAJ7620手势模块👇
在这里插入图片描述
L298N驱动板👇
在这里插入图片描述

PAJ7620手势模块

参数

主板支持:Arduino UNO / Seeeduino / Arduino Mega2560
在这里插入图片描述
模块支持9种手势,如下
在这里插入图片描述

硬件连接

  1. 你可以通过连接Base Shield 将此模块连接到 Base Shield 的 I2C 端口,如下
    在这里插入图片描述
    先把PAJ7620手势模块连接到 Base shield 的 I2C 端口上然后将 Base shield 连接到 Arduino UNO 上,即可

  2. 如果没有 Base Shield ,您也可以通过跳线将PAJ7620手势直接连接到 Arduino,方法如下

Arduino UNOBase ShieldPAJ7620手势模块
5VI2C 端口VCC
GNDI2C 端口GND
SDAI2C 端口SDA
SCLI2C 端口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小白入门全解,学习笔记

Arduino实践详细说明(三)L298N驱动直流电机

有能力的小伙伴可以考虑自己加上显示功能,我的lcd笔记如下

Arduino实践(二)lcd1602使用说明,源码

制作手势识别控制器

接线

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);
}
  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuanFuXinCSDN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值