智能家居硬件小製作(含源碼)《手勢識別控制器》基於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 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小白入門全解,學習筆記

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章