手势识别带触摸传感器

简介

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

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

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

warning_yellow.png 注意:

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

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

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

参数规格

引脚说明

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

功能说明

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

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

示例代码(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,打开串口监视器,做出向右、向左、向后、向前、下压、上拉及上拉下压后手松开中的任意一种手势或触摸某一个触摸点时均能通过串口监视器看到相对应的现象

注意:

准备

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

Arduino调试方法

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

手势识别传感器arduino接线

Arduino调试代码

/*!
 * @file simpleGesture.ino
 * @brief Sensor event will print on your serial monitor
 * @n     for esp32, rx_pin = D5, tx_pin = D6
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author      PengKaixing(kaixing.peng@dfrobot.com)
 * @version  V1.0.0
 * @date  2022-03-25
 * @url https://github.com/DFRobot/DFRobot_Gesture_Touch
 */

#include "DFRobot_Gesture_Touch.h"

#ifdef __AVR__
  SoftwareSerial    mySerial(/*RX*/10, /*TX*/11); 
#elif defined ESP_PLATFORM
// ESP32:IO16 <--> TX:sensor
// ESP32:IO17 <--> RX:sensor
HardwareSerial mySerial(1);
#endif

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

void setup()
{
  Serial.begin(115200);

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

  // enable all functions
  DFGT.enableFunction(DFGT_FUN_ALL);

  // disable function test
  DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);

  // enable function test
  // DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);

  // set auto sleep time out, in sleep mode, something approach will wake it up
  // DFGT.setSleep(4);

  Serial.println("simple Gesture!");
}

void loop()
{
  // get an event that data saved in serial buffer
  int8_t rslt = DFGT.getAnEvent();  

  if(rslt != DF_ERR) 
  {
    // disable auto sleep
    // DFGT.setSleep(DFGT_SLEEP_DISABLE);
    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来显示距离测量数据,非常适合室外使用。 点击下载LCD1602库文件Arduino/树莓派Python库文件和示例

Arduino LCD连接图

手势识别传感器LCD接线

Arduino LCD调试代码

/*!
 * @file simpleGesture.ino
 * @brief Sensor event will print on your serial monitor
 * @n     for esp32, rx_pin = D5, tx_pin = D6
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author      PengKaixing(kaixing.peng@dfrobot.com)
 * @version  V1.0.0
 * @date  2022-03-25
 * @url https://github.com/DFRobot/DFRobot_Gesture_Touch
 */

#include "DFRobot_Gesture_Touch.h"
#include <Wire.h>
#include "DFRobot_RGBLCD1602.h"

/*
Change the RGBaddr value based on the hardware version
-----------------------------------------
       Moudule        | Version| RGBAddr|
-----------------------------------------
  LCD1602 Module      |  V1.0  | 0x60   |
-----------------------------------------
  LCD1602 Module      |  V1.1  | 0x6B   |
-----------------------------------------
  LCD1602 RGB Module  |  V1.0  | 0x60   |
-----------------------------------------
  LCD1602 RGB Module  |  V1.1  | 0x2D   |
-----------------------------------------
*/
DFRobot_RGBLCD1602 lcd(/*RGBAddr*/0x60 ,/*lcdCols*/16,/*lcdRows*/2);  //16 characters and 2 lines of show

#ifdef __AVR__
  SoftwareSerial    mySerial(/*RX*/10, /*TX*/11); 
#elif defined ESP_PLATFORM
// ESP32:IO16 <--> TX:sensor
// ESP32:IO17 <--> RX:sensor
HardwareSerial mySerial(1);
#endif

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

void setup()
{
  Serial.begin(115200);

  // initialize the LCD and master IIC
  lcd.init();
  delay(20);

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

  // enable all functions
  DFGT.enableFunction(DFGT_FUN_ALL);

  // disable function test
  DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);

  // enable function test
  // DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);

  // set auto sleep time out, in sleep mode, something approach will wake it up
  // DFGT.setSleep(4);

  Serial.println("simple Gesture!");

  /**
   *  @brief set cursor position
   *  @param col columns optional range 0-15
   *  @param row rows optional range 0-1,0 is the first row, 1 is the second row
   */
  lcd.setCursor(0, 0);
  lcd.print("State:");
}

void loop()
{
  lcd.setCursor(0, 1);
  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;
      default: break;
    }
  }
}

Mind+图形化编程

1、下载及安装软件。下载地址:https://mindplus.cc 详细教程:安装教程
2、切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
3、“扩展”中选择“主控板”中的“Arduino Uno”。用户库中搜索“手势”加载本传感器的扩展库。 详细教程:Mind+基础wiki教程-加载扩展库流程
4、进行编程,程序如下图:
5、菜单“连接设备”,“上传到设备”
6、程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印

常见问题

Q:有操作演示吗?手势速度需要多块?用什么手势操作?

A:可以参考社区开箱帖:点击查看

串口协议.doc

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

更多

DFshopping_car1.png DFRobot商城购买链接