“SKU:RB-02S102 Gesture Sensor”的版本间的差异

来自ALSROBOT WiKi
跳转至: 导航搜索
(以“==产品概述== Gesture Sensor模块是基于APDS-9960传感器的一款能够识别手势移动方向(上下左右)的传感器模块。APDS-9960芯片集成...”为内容创建页面)
 
产品相关推荐
 
(未显示1个用户的13个中间版本)
第1行: 第1行:
 +
[[文件:02S102001.png|500px|缩略图|右]]
 
==产品概述==
 
==产品概述==
 
Gesture Sensor模块是基于APDS-9960传感器的一款能够识别手势移动方向(上下左右)的传感器模块。APDS-9960芯片集成了RGB、环境光、接近和手势检测功能。模块使用I2C接口,使用相应arduino库函数即可对编程控制,传感器返回的信号可用于作为机器人接收的控制信号,从而实现对机器人的控制。内置的识别算法相当智能,能够把双手从生硬的按键中解放出来。
 
Gesture Sensor模块是基于APDS-9960传感器的一款能够识别手势移动方向(上下左右)的传感器模块。APDS-9960芯片集成了RGB、环境光、接近和手势检测功能。模块使用I2C接口,使用相应arduino库函数即可对编程控制,传感器返回的信号可用于作为机器人接收的控制信号,从而实现对机器人的控制。内置的识别算法相当智能,能够把双手从生硬的按键中解放出来。
第10行: 第11行:
 
# 检测距离:10 cm
 
# 检测距离:10 cm
 
# 重量大小:3g
 
# 重量大小:3g
 +
* 产品尺寸图:
 +
[[文件:size041.jpg|500px|缩略图|居中]]
  
==使用方法==
+
==使用方法_1(Arduino 控制器)==
 +
===使用硬件===
 +
* 1 * Arduino UNO 控制器
 +
* 杜邦线若干
 +
* USB 数据线
 +
===硬件连接===
 +
[[文件:02S10211.png|700px|缩略图|居中]]
 +
===Arduino_code_1===
 +
<pre style='color:blue'>#include <Wire.h>
 +
#include <ALS_APDS9960.h>
 +
 
 +
ALS_APDS9960 apds = ALS_APDS9960();
 +
int isr_flag = 0;
 +
 
 +
void setup() {
 +
  Serial.begin(9600);
 +
  Serial.println();
 +
  Serial.println(F("--------------------------------"));
 +
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
 +
  Serial.println(F("--------------------------------"));
 +
 
 +
  if ( apds.init() ) {
 +
    Serial.println(F("APDS-9960 initialization complete"));
 +
  } else {
 +
    Serial.println(F("Something went wrong during APDS-9960 init!"));
 +
  }
 +
 
 +
  // Start running the APDS-9960 gesture sensor engine
 +
  if ( apds.enableGestureSensor(true) ) {
 +
    Serial.println(F("Gesture sensor is now running"));
 +
  } else {
 +
    Serial.println(F("Something went wrong during gesture sensor init!"));
 +
  }
 +
}
 +
 
 +
void loop() {
 +
    handleGesture();
 +
    delay(50);
 +
}
 +
 
 +
void handleGesture() {
 +
    if ( apds.isGestureAvailable() ) {
 +
    switch ( apds.readGesture() ) {
 +
      case DIR_UP:
 +
        Serial.println("UP");
 +
        break;
 +
      case DIR_DOWN:
 +
        Serial.println("DOWN");
 +
        break;
 +
      case DIR_LEFT:
 +
        Serial.println("LEFT");
 +
        break;
 +
      case DIR_RIGHT:
 +
        Serial.println("RIGHT");
 +
        break;
 +
      case DIR_NEAR:
 +
        Serial.println("NEAR");
 +
        break;
 +
      case DIR_FAR:
 +
        Serial.println("FAR");
 +
        break;
 +
      default:
 +
        Serial.println("NONE");
 +
    }
 +
  }
 +
}</pre>
 +
===程序效果===
 +
手在上下左右远近滑过经过传感器时,串口会打印如图所示的数据
 +
[[文件:02S10210.png|700px|缩略图|居中]]
 +
 
 +
==使用方法_2(Arduino 控制器)==
 +
===使用硬件===
 +
* 1 * LED 发光模块
 +
* 1 * Arduino 控制器
 +
* 1 * 传感器扩展板 V5.0
 +
* 1 * 手势传感器
 +
* 1 * USB 数据线
 +
* 1 * 4P 传感器连接线
 +
* 杜邦线若干
 +
 
 +
===硬件连接===
 +
[[文件:02S10220.png|700px|缩略图|居中]]
 +
 
 +
===Arduino_code_2===
 +
<pre style='color:blue'>#include <Wire.h>
 +
#include <ALS_APDS9960.h>
 +
#define led 4
 +
#define APDS9960_INT    2
 +
ALS_APDS9960 apds = ALS_APDS9960();
 +
int temp = 0;
 +
int isr_flag = 0;
 +
 
 +
void setup() {
 +
  pinMode(led,OUTPUT);
 +
  pinMode(APDS9960_INT, INPUT);
 +
 
 +
  Serial.begin(9600);
 +
  Serial.println();
 +
  Serial.println(F("--------------------------------"));
 +
  Serial.println(F("ALS_APDS-9960 - GestureTest"));
 +
  Serial.println(F("--------------------------------"));
 +
 
 +
  attachInterrupt(0, interruptRoutine, FALLING);
 +
 
 +
  if ( apds.init() ) {
 +
    Serial.println(F("APDS-9960 initialization complete"));
 +
  } else {
 +
    Serial.println(F("Something went wrong during APDS-9960 init!"));
 +
  }
 +
 
 +
  if ( apds.enableGestureSensor(true) ) {
 +
    Serial.println(F("Gesture sensor is now running"));
 +
  } else {
 +
    Serial.println(F("Something went wrong during gesture sensor init!"));
 +
  }
 +
}
 +
 
 +
void loop() {
 +
  if( isr_flag == 1 ) {
 +
    detachInterrupt(0);
 +
    handleGesture();
 +
    isr_flag = 0;
 +
    attachInterrupt(0, interruptRoutine, FALLING);
 +
  }
 +
 
 +
}
 +
 
 +
void interruptRoutine() {
 +
  isr_flag = 1;
 +
      switch(temp){
 +
      case 1:
 +
        digitalWrite(led,HIGH);
 +
        break;
 +
      case 2:
 +
        digitalWrite(led,LOW);
 +
        break;
 +
      }
 +
}
 +
 
 +
void handleGesture() {
 +
    if ( apds.isGestureAvailable() ) {
 +
    switch ( apds.readGesture() ) {
 +
      case DIR_UP:
 +
        Serial.println("UP");
 +
        temp = 1;
 +
        break;
 +
      case DIR_DOWN:
 +
        Serial.println("DOWN");
 +
        temp = 2;
 +
        break;
 +
      case DIR_LEFT:
 +
        Serial.println("LEFT");
 +
        break;
 +
      case DIR_RIGHT:
 +
        Serial.println("RIGHT");
 +
        break;
 +
      case DIR_NEAR:
 +
        Serial.println("NEAR");
 +
        break;
 +
      case DIR_FAR:
 +
        Serial.println("FAR");
 +
        break;
 +
      default:
 +
        Serial.println("NONE");
 +
        temp = 0;
 +
    }
 +
  }
 +
}</pre>
 +
===程序效果===
 +
* 向上滑动时,通过串口打印‘UP’,同时 LED 亮起
 +
* 向下滑动时,通过串口打印‘DOWM’,同时 LED 熄灭
 +
 
 +
==应用案例==
 
1、测试环境<br/>
 
1、测试环境<br/>
 
* 硬件环境:Starduino UNO R3 、传感器V5.0扩展板、红外手势传感器、8*8点阵
 
* 硬件环境:Starduino UNO R3 、传感器V5.0扩展板、红外手势传感器、8*8点阵
第26行: 第201行:
  
 
4、例子程序<br/>
 
4、例子程序<br/>
<pre style='color:blue'>#include <Wire.h>
+
<pre style='color:blue'>
 +
#include <Wire.h>
 
#include <ALSROBOT_APDS9960.h>
 
#include <ALSROBOT_APDS9960.h>
 
// Pins
 
#define APDS9960_INT    2 // Needs to be an interrupt pin
 
 
const int DINPin = 4;        //数据引脚 连接到数字P4口
 
const int DINPin = 4;        //数据引脚 连接到数字P4口
 
const int CLKPin = 5;        //时钟引脚 连接到数字P5口
 
const int CLKPin = 5;        //时钟引脚 连接到数字P5口
第54行: 第227行:
  
 
void setup() {
 
void setup() {
 
  // Set interrupt pin as input
 
  pinMode(APDS9960_INT, INPUT);
 
 
   pinMode(DINPin,OUTPUT);      //设置数据引脚为输出
 
   pinMode(DINPin,OUTPUT);      //设置数据引脚为输出
 
   pinMode(CLKPin,OUTPUT);      //设置锁存引脚为输出
 
   pinMode(CLKPin,OUTPUT);      //设置锁存引脚为输出
第66行: 第236行:
 
   Serial.println(F("ALSROBOT APDS-9960 - GestureTest"));
 
   Serial.println(F("ALSROBOT APDS-9960 - GestureTest"));
 
   Serial.println(F("--------------------------------"));
 
   Serial.println(F("--------------------------------"));
 
 
  // Initialize interrupt service routine
 
  attachInterrupt(0, interruptRoutine, FALLING);
 
  
  // Initialize APDS-9960 (configure I2C and initial values)
 
 
   if ( apds.init() ) {
 
   if ( apds.init() ) {
 
     Serial.println(F("APDS-9960 initialization complete"));
 
     Serial.println(F("APDS-9960 initialization complete"));
第181行: 第347行:
 
   }
 
   }
 
   handleGesture();
 
   handleGesture();
}
 
 
void interruptRoutine() {
 
  isr_flag = 1;
 
 
}
 
}
  
第218行: 第380行:
 
     }
 
     }
 
   }
 
   }
}</pre>
+
}
 +
</pre>
 
5、程序效果
 
5、程序效果
 
如图所示,当手滑动时,点阵显示相应的滑动方向
 
如图所示,当手滑动时,点阵显示相应的滑动方向
 
[[文件:02S10202.png|700px|缩略图|居中]]
 
[[文件:02S10202.png|700px|缩略图|居中]]
 +
 
==产品相关推荐==
 
==产品相关推荐==
 
[[文件:erweima.png|230px|无框|右]]
 
[[文件:erweima.png|230px|无框|右]]
 +
===资料下载===
 +
* [http://www.makerspace.cn/forum.php?mod=viewthread&tid=6647&fromuid=10780 Arduino 库文件加载方法]
 +
* 例程及芯片手册下载链接: https://pan.baidu.com/s/1UWH-DQiHI-AbRQPh_9PI6Q 提取码:qip3
 
===产品购买地址===
 
===产品购买地址===
 
+
* [http://www.alsrobot.cn/goods-771.html 手势识别传感器]
===相关学习资料===
+
* [http://pan.baidu.com/s/1i45wtvR apds9960_datasheet 下载]
+
* [http://www.makerspace.cn/forum.php?mod=viewthread&tid=6786&page=1&extra=#pid21424 RB - 02S102 Gesture Sensor 手势识别模块库文件下载]
+

2021年7月27日 (二) 17:37的最后版本

02S102001.png

目录

产品概述

Gesture Sensor模块是基于APDS-9960传感器的一款能够识别手势移动方向(上下左右)的传感器模块。APDS-9960芯片集成了RGB、环境光、接近和手势检测功能。模块使用I2C接口,使用相应arduino库函数即可对编程控制,传感器返回的信号可用于作为机器人接收的控制信号,从而实现对机器人的控制。内置的识别算法相当智能,能够把双手从生硬的按键中解放出来。

产品参数

  1. 输入电压:3.3V - 5V
  2. 引脚接口:IIC接口* 1、中断引脚 * 1
  3. 接口类型:直插、KF2510
  4. 输出信号:数字
  5. 产品尺寸:30 mm * 25 mm
  6. 定位孔:4 * M3,间距 23mm x 18mm
  7. 检测距离:10 cm
  8. 重量大小:3g
  • 产品尺寸图:
Size041.jpg

使用方法_1(Arduino 控制器)

使用硬件

  • 1 * Arduino UNO 控制器
  • 杜邦线若干
  • USB 数据线

硬件连接

02S10211.png

Arduino_code_1

#include <Wire.h>
#include <ALS_APDS9960.h>

ALS_APDS9960 apds = ALS_APDS9960();
int isr_flag = 0;

void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  
  // Start running the APDS-9960 gesture sensor engine
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void loop() {
    handleGesture();
    delay(50);
}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      case DIR_LEFT:
        Serial.println("LEFT");
        break;
      case DIR_RIGHT:
        Serial.println("RIGHT");
        break;
      case DIR_NEAR:
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        Serial.println("FAR");
        break;
      default:
        Serial.println("NONE");
    }
  }
}

程序效果

手在上下左右远近滑过经过传感器时,串口会打印如图所示的数据

02S10210.png

使用方法_2(Arduino 控制器)

使用硬件

  • 1 * LED 发光模块
  • 1 * Arduino 控制器
  • 1 * 传感器扩展板 V5.0
  • 1 * 手势传感器
  • 1 * USB 数据线
  • 1 * 4P 传感器连接线
  • 杜邦线若干

硬件连接

02S10220.png

Arduino_code_2

#include <Wire.h>
#include <ALS_APDS9960.h>
#define led 4
#define APDS9960_INT    2 
ALS_APDS9960 apds = ALS_APDS9960();
int temp = 0;
int isr_flag = 0;

void setup() {
  pinMode(led,OUTPUT);
  pinMode(APDS9960_INT, INPUT);
  
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("ALS_APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));
  
  attachInterrupt(0, interruptRoutine, FALLING);
  
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void loop() {
  if( isr_flag == 1 ) {
    detachInterrupt(0);
    handleGesture();
    isr_flag = 0;
    attachInterrupt(0, interruptRoutine, FALLING);
  }

}

void interruptRoutine() {
  isr_flag = 1;
      switch(temp){
      case 1:
        digitalWrite(led,HIGH);
        break;
      case 2:
        digitalWrite(led,LOW);
        break;
      }
}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.println("UP");
        temp = 1;
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        temp = 2;
        break;
      case DIR_LEFT:
        Serial.println("LEFT");
        break;
      case DIR_RIGHT:
        Serial.println("RIGHT");
        break;
      case DIR_NEAR:
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        Serial.println("FAR");
        break;
      default:
        Serial.println("NONE");
        temp = 0;
    }
  }
}

程序效果

  • 向上滑动时,通过串口打印‘UP’,同时 LED 亮起
  • 向下滑动时,通过串口打印‘DOWM’,同时 LED 熄灭

应用案例

1、测试环境

  • 硬件环境:Starduino UNO R3 、传感器V5.0扩展板、红外手势传感器、8*8点阵
  • 软件环境:Arduino IDE 1.7.7

2、引脚定义

  • -:电源地
  • +:电源正极
  • SDA:数据引脚
  • SCL:时引脚

3、硬件连接

02S10201.png

4、例子程序

#include <Wire.h>
#include <ALSROBOT_APDS9960.h>
const int DINPin = 4;         //数据引脚 连接到数字P4口
const int CLKPin = 5;         //时钟引脚 连接到数字P5口
const int LTHPin = 6;         //锁存引脚 连接到数字P6口

byte LieScan[16] = {                         //列扫描,点阵只点亮一列
  0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
};
byte HanZi_1[] = {
  0x1c,0x7c,0x7e,0x3f,0x3f,0x7e,0x7c,0x1c    //显示心形图案
};
char Left[]={0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x00};
char Down[]={0x00,0x10,0x30,0x7e,0x7e,0x30,0x10,0x00};
char Up[]={0x00,0x08,0x0c,0x7e,0x7e,0x0c,0x08,0x00};
char Right[]={0x00,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00};
char Far[]={0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xff,0xff};
char Near[]={0x00,0x00,0x3c,0x3c,0x3c,0x3c,0x00,0x00};
char Moren[]={0x18,0x3c,0x5a,0xff,0xff,0x5a,0x3c,0x18};

ALSROBOT_APDS9960 apds = ALSROBOT_APDS9960();
int isr_flag = 0;
int temp=0;

void setup() {
  pinMode(DINPin,OUTPUT);      //设置数据引脚为输出
  pinMode(CLKPin,OUTPUT);      //设置锁存引脚为输出
  pinMode(LTHPin,OUTPUT);      //设置时钟引脚为输出
  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("ALSROBOT APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  
  // Start running the APDS-9960 gesture sensor engine
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void left(){
  for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, Left[x]);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }    
}

void down()
{
    for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, Down[x]);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }    
}
void up()
{
       for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, Up[x]);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }   
}

void right()
{
       for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, Right[x]);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }   
}

void far()
{
       for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, Far[x]);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }   
}

void near()
{
       for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, Near[x]);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }   
}
void moren()
{
       for(unsigned char times_1 = 0;times_1 <250;times_1++) {  //持续刷新250次
    for(char x = 0;x <8;x++) {
      shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]);  //先选择列
      shiftOut(DINPin, CLKPin, MSBFIRST, 0x00);  //再送行数据
      digitalWrite(LTHPin, LOW);    //刷新显示
      digitalWrite(LTHPin, HIGH);
    }
  }   
}



void loop() {
  
  switch(temp)
  {
      case 1:up();break;
      case 2:down();break;
      case 3:left();break;
      case 4:right();break;
      case 5:near();break;
      case 6:far();break;
      default :moren();break;
  }
  handleGesture();
}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        temp=1;
        Serial.println("UP");
        break;
      case DIR_DOWN:
      temp=2;
        Serial.println("DOWN");
        break;
      case DIR_LEFT:
        temp=3;
        Serial.println("LEFT");
        break;
      case DIR_RIGHT:
        temp=4;
        Serial.println("RIGHT");
        break;
      case DIR_NEAR:
        temp=5;
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        temp=6;
        Serial.println("FAR");
        break;
      default:temp=7;
        Serial.println("NONE");
    }
  }
}

5、程序效果 如图所示,当手滑动时,点阵显示相应的滑动方向

02S10202.png

产品相关推荐

Erweima.png

资料下载

产品购买地址