_SKU_SEN0285__Gesture&Touch_Sensor_V1.0手势识别及触摸传感器 - jimaobian/DFRobotWikiCn GitHub Wiki

简介

这款是一款集成了手势识别功能和触摸识别功能的传感器模块,它的最大检测距离为30cm,距离0-30cm可调。其中,能够识别向右、向左、向后、向前、下压、上拉及上拉下压后手松开共7种手势,以及5路的触摸信号,并具有自动睡眠和唤醒的功能。

模块自带手势识别算法,输出数据简洁可靠,可通过串口直接与arduino及树莓派等控制器或上位机通讯。用于智能灯、人机交互、智能小车、趣味游戏等多功能远距离手势控制端。传感器板载5路触摸片,不仅可以直接实现触摸还可以利用导线连接方式延长触摸端,

能更好的应用到您的项目中。传感器模组特增加了屏蔽罩,在保留Gravity优点的同时,使传感器得到更好的保护,给您带来更好的使用体验。

warning_yellow.png
注意:

1.由于模块的工作原理的缘故,在强光直射下使用时可能会有异常情况发生;

2.模块断电后会自动初始化,之前的设置无效。

3.连续发送字节时,前个字节的结束信号与下个字节的起始信号要有 200us 以上的时间间隔;模组在工作模式下才能串口接收,接收完数据后需要模组空闲状态才能处理数据,所以说假如接收数据时模组上方一直有物体,要把物体移开才能完成相应设置。 |

参数规格

  • 供电电压:3.3V - 6V (推荐:5V)
  • 输出电压:0 - 3.3V
  • 工作电流:约56.3mA
  • 睡眠电流:约40uA
  • 通讯方式:UART
  • 转接板尺寸:36mm * 32mm
  • 串口协议帧格式:串口波特率 9600;8 个数据位;无校验位;1 个停止位

引脚说明

| | | | ----------------------------------- | | | 手势识别原理 | |

' 标号' ' 名称' ' 功能描述' ' 接线颜色(参考)'
1 TXD 接收数据 Green
2 RXD 发送数据 Blue
3 GND Black
4 VCC 电源 Red
5 Touch Port 触摸信号*5

功能说明

  • 1.设置模组感应高度(上电默认20厘米)

示例代码:DFGT.setGestureDistance(20);-----高度单位为厘米,最大识别高度为30厘米

  • 2.可设置睡眠使能或者自动进睡眠时间(上电默认不使能睡眠)

示例代码:DFGT.setSleep(4);-----睡眠时间单位为秒

  • 3.设置感应手势使能(上电默认全部感应手势使能):

示例代码(1)DFGT.enableFunction(DFGT_FUN_ALL);-----打开全部感应手势使能

示例代码(2)DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);-----部分感应手势禁止使能测试

示例代码(3)DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);-----部分感应手势使能测试

使用教程

连接器件连线,将程序下载到UNO,打开串口监视器,做出向右、向左、向后、向前、下压、上拉及上拉下压后手松开中的任意一种手势或触摸某一个触摸点时均能通过串口监视器看到相对应的现象

注意:

  • 1.模块上电默认功能:无休眠,带5路触摸,上拉下压功能检测高度15cm,方向识别功能检测高度15cm;
  • 2.模块默认检测高度为15cm,如需更高高度,需要设定;
  • 3.手势速度不能过慢,传感器会无法识别,保持正常速度即可;

准备

  • 硬件
    • Arduino UNO R3 x1
    • IO 传感器扩展板 V7.1 x1
    • Gesture&Touch Sensor x1
    • PC电脑 x1
    • 杜邦线 若干
  • 软件
    • Arduino IDE 版本1.6.8以上

点击下载库文件Arduino/树莓派Python库文件和示例

Arduino调试方法

鉴于手势识别传感器为串口设备,而普通Arduino只有一个硬件串口,所以推荐使用软串口来配合传感器使用,用户也可以使用多串口设备,诸如Arduino Leonardo,Arduino Mega2560等设备,此处使用最常见的Arduino UNO作为控制器,定义D10和D11为软串口。

  • Arduino接线如图所示;

手势识别传感器arduino接线

Arduino调试代码

  • 需要使用PC串口工具,读到的数据会显示在Arduino串口界面

|

/*
 * file simpleGesture.ino
 *
 * @ https://github.com/DFRobot/DFRobot_Gesture_Touch
 *
 * example for DFRobot Gesture&Touch sensor
 *
 * sensor event will print on your serial monitor
 *
 * for esp32, rx_pin = D5, tx_pin = D6
 *
 * Copyright   [DFRobot](http://www.dfrobot.com), 2016
 * Copyright   GNU Lesser General Public License
 *
 * version  V1.0
 * date  2018-10-19
 */

#include "DFRobot_Gesture_Touch.h"

#ifdef __AVR__
  #include "SoftwareSerial.h"
  SoftwareSerial    mySerial(10, 11);         // example for uno, use software serial
#elif defined ESP_PLATFORM
  #include "HardwareSerial.h"
  HardwareSerial    mySerial(1);
#endif

DFRobot_Gesture_Touch   DFGT(&mySerial);    // init sensor object, request write and read function

void setup()
{
  Serial.begin(115200);
  mySerial.begin(9600);
  delay(2000);
  while(mySerial.available())  // flush serial buffer
    mySerial.read();
  Serial.println("gesture&touch sensor test");

  DFGT.setGestureDistance(20);             // suggest default value
  // DFGT.enableFunction(DFGT_FUN_ALL);       // enable all functions
  // DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);    // disable function test
  // DFGT.disableFunction(DFGT_FUN_TOUCH1 | DFGT_FUN_TOUCH2);    // disable function test
  // DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);     // enable function test
  // DFGT.setSleep(4);                        // set auto sleep time out, in sleep mode, put something
}

void loop()
{
  int8_t    rslt = DFGT.getAnEvent();  // get an event that data saved in serial buffer
  if(rslt != DF_ERR) {
    // DFGT.setSleep(DFGT_SLEEP_DISABLE);  // disable auto sleep
    switch(rslt) {
      case DFGT_EVT_BACK: {
        Serial.println("get event back");
      } break;
      case DFGT_EVT_FORWARD: {
        Serial.println("get event forward");
      } break;
      case DFGT_EVT_RIGHT: {
        Serial.println("get event right");
      } break;
      case DFGT_EVT_LEFT: {
        Serial.println("get event left");
      } break;
      case DFGT_EVT_PULLUP: {
        Serial.println("get event pull up");
      } break;
      case DFGT_EVT_PULLDOWN: {
        Serial.println("get event pull down");
      } break;
      case DFGT_EVT_PULLREMOVE: {
        Serial.println("get event pull and remove");
      } break;
      case DFGT_EVT_TOUCH1: {
        Serial.println("get event touch1");
      } break;
      case DFGT_EVT_TOUCH2: {
        Serial.println("get event touch2");
      } break;
      case DFGT_EVT_TOUCH3: {
        Serial.println("get event touch3");
      } break;
      case DFGT_EVT_TOUCH4: {
        Serial.println("get event touch4");
      } break;
      case DFGT_EVT_TOUCH5: {
        Serial.println("get event touch5");
      } break;
    }
  }
}

|} 实现功能:能够识别向右、向左、向后、向前、下压、上拉及上拉下压后手松开共7种手势,以及5路的触摸信号。 arduino串口调试结果

Arduino LCD手势结果显示

实际应用场景中,传感器一般会在脱机状态下工作,我们特别提供了一个使用案例,使用锂电池供电,用LCD来显示距离测量数据,非常适合室外使用。

Arduino LCD连接图

  • Arduino接线如图所示;

手势识别传感器LCD接线

Arduino LCD调试代码

|

/*
 * file simpleGesture.ino
 *
 * @ https://github.com/DFRobot/DFRobot_Gesture_Touch
 *
 * example for DFRobot Gesture&Touch sensor
 *
 * sensor event will print on your serial monitor
 *
 * for esp32, rx_pin = D5, tx_pin = D6
 *
 * Copyright   [DFRobot](http://www.dfrobot.com), 2016
 * Copyright   GNU Lesser General Public License
 *
 * version  V1.0
 * date  2018-10-19
 */

#include "DFRobot_Gesture_Touch.h"
#include <Wire.h>
#include "DFRobot_LCD.h"
DFRobot_LCD lcd(16,2);  //16 characters and 2 lines of show

#ifdef __AVR__
  #include "SoftwareSerial.h"
  SoftwareSerial    mySerial(10, 11);         // example for uno, use software serial
#elif defined ESP_PLATFORM
  #include "HardwareSerial.h"
  HardwareSerial    mySerial(1);
#endif

DFRobot_Gesture_Touch   DFGT(&mySerial);    // init sensor object, request write and read function

void setup()
{
  lcd.init();                              // 给LCD的I2C通讯初始化
  delay(20);
  lcd.init();                             // 给LCD的I2C通讯初始化
  delay(20);
  mySerial.begin(9600);
  delay(2000);

  DFGT.setGestureDistance(20);             // suggest default value
}

void loop()
{
  lcd.setCursor(0, 0);                 // 定位光标在LCD第0行、第0列
  lcd.print("State:");               //在LCD第0行第0列开始显示"Result:"
  lcd.setCursor(0, 1);               // 定位光标在LCD第2行、第0列
  int8_t    rslt = DFGT.getAnEvent();  // get an event that data saved in serial buffer
  if(rslt != DF_ERR) {
    switch(rslt) {
      case DFGT_EVT_BACK: {
        lcd.print("Back            ");
      } break;
      case DFGT_EVT_FORWARD: {
        lcd.print("Forward            ");
      } break;
      case DFGT_EVT_RIGHT: {
        lcd.print("Right            ");
      } break;
      case DFGT_EVT_LEFT: {
        lcd.print("Left            ");
      } break;
      case DFGT_EVT_PULLUP: {
        lcd.print("Pull up          ");
      } break;
      case DFGT_EVT_PULLDOWN: {
        lcd.print("Pull Down          ");
      } break;
      case DFGT_EVT_PULLREMOVE: {
        lcd.print("Pull and Remove          ");
      } break;
      case DFGT_EVT_TOUCH1: {
        lcd.print("Touch1          ");
      } break;
      case DFGT_EVT_TOUCH2: {
        lcd.print("Touch2          ");
      } break;
      case DFGT_EVT_TOUCH3: {
        lcd.print("Touch3          ");
      } break;
      case DFGT_EVT_TOUCH4: {
        lcd.print("Touch4          ");
      } break;
      case DFGT_EVT_TOUCH5: {
        lcd.print("Touch5          ");
      } break;
    }
  }
}

|} LCD显示结果

|

State:
Pull Down

|}

常见问题

Q:有操作演示吗?手势速度需要多块?用什么手势操作? A:可以参考社区开箱帖:点击查看

| 更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖! |

更多

DFshopping_car1.png DFRobot商城购买链接

⚠️ **GitHub.com Fallback** ⚠️