第十八篇、基于Arduino uno,获取手势识别传感器的信号——结果导向

news2024/12/23 9:38:16

0、结果

说明:该传感器模块集手势识别和触摸检测功能于一体,提供0~30cm以内的可调检测范围。它可以检测 5 向触摸信号和 7 种手势:向左移动、向右移动、向前移动、向后移动、向上拉、向下拉、拉和移除。

1、外观

说明:虽然手势识别传感器形态各异,但是原理和代码都是适用的。


2、连线

 说明:只需要连接四根线。
uno————手势识别传感器

    5V--------------VCC
GND--------------GND
      5--------------TX
      6--------------RX

3、源程序

说明:当识别到对应手势的时候,会在串口打印出来,并将对应功能进行函数化,方便移植。

/****************************************hcsr501 part****************************************/
/*
  wiring:
  VCC------VCC
  GND------GND
    5------TX
    6------RX
*/

#include "DFRobot_Gesture_Touch.h"                                                  //include library
#include "SoftwareSerial.h"                                                         //include library

SoftwareSerial    mySerial1(5, 6);                                                  // example for uno, use software serial

DFRobot_Gesture_Touch   DFGT(&mySerial1);                                           //Instantiate object
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                                                               //Example Set the baud rate of the serial port to 9600
  mySerial1.begin(9600);                                                            //Initialize the soft serial port
  delay(1000);
  while (mySerial1.available()) {                                                   // flush serial buffer
    mySerial1.read();
  }
  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
  Serial.println("设备上线!");
}
void loop() {
  getGesture();                                                                     //Get gesture information
}
/*Get gesture information*/
void getGesture() {
  int rslt = DFGT.getAnEvent();                                                    // get an event that data saved in serial buffer
  if (rslt != DF_ERR) {
    switch (rslt) {
      case DFGT_EVT_BACK: {                                                        // The serial port displays the corresponding value
          Serial.println("get event back");
        } break;
      case DFGT_EVT_FORWARD: {                                                     // The serial port displays the corresponding value
          Serial.println("get event forward");
        } break;
      case DFGT_EVT_RIGHT: {                                                       // The serial port displays the corresponding value
          Serial.println("get event right");
        } break;
      case DFGT_EVT_LEFT: {                                                        // The serial port displays the corresponding value
          Serial.println("get event left");
        } break;
      case DFGT_EVT_PULLUP: {                                                      // The serial port displays the corresponding value
          Serial.println("get event pull up");
        } break;
      case DFGT_EVT_PULLDOWN: {                                                    // The serial port displays the corresponding value
          Serial.println("get event pull down");
        } break;
      case DFGT_EVT_PULLREMOVE: {                                                  // The serial port displays the corresponding value
          Serial.println("get event pull and remove");
        } break;
      case DFGT_EVT_TOUCH1: {                                                      // The serial port displays the corresponding value
          Serial.println("get event touch1");
        } break;
      case DFGT_EVT_TOUCH2: {                                                      // The serial port displays the corresponding value
          Serial.println("get event touch2");
        } break;
      case DFGT_EVT_TOUCH3: {                                                      // The serial port displays the corresponding value
          Serial.println("get event touch3");
        } break;
      case DFGT_EVT_TOUCH4: {                                                      // The serial port displays the corresponding value
          Serial.println("get event touch4");
        } break;
      case DFGT_EVT_TOUCH5: {                                                      // The serial port displays the corresponding value
          Serial.println("get event touch5");
        } break;
    }
  }
}

4、注意事项 

说明:需要下载对应的库文件才不会编译报错。程序里面设置的检测距离为20cm,所以实际的距离情况是要小于等于20cm,这样效果会比较好。做手势动作的时候最好慢一些,这样识别到的信号会更加准确和稳定。

5、基本原理

        红外手势识别传感器是一种基于红外光反射原理的手势识别传感器,能够通过检测手部动作来控制电路或设备的开关、方向等。在Arduino中使用红外手势识别传感器需要了解其工作原理。
        红外手势识别传感器内置有红外发射管和红外接收管,通过发射红外光线并接收反射回来的信号,检测用户的手部动作并输出对应的控制信号。
        当用户进行手势动作时,可以通过让手部区域遮挡或反射红外光线来控制传感器的输出。具体来说,传感器通过内置的红外发射管发射红外光,并接收反射回来的光信号,通过对信号的处理和分析来识别不同的手势动作。例如,当用户抬起手臂时,会使红外光线被遮挡一段时间,传感器可以检测到这种遮挡行为并输出对应的控制信号。同时,也可以通过手指和手掌的不同姿势来实现不同的控制功能,例如手势的上下左右、点击等。
        在Arduino中使用红外手势识别传感器,我们需要先将其正确连接到Arduino板上,并编写相应的程序进行控制。通常,可以通过数字输入输出端口发送控制信号,使传感器工作,并通过数字输入输出端口读取传感器返回的手势控制信号。具体地,在程序中需要使用Arduino提供的相应函数来对数字输入输出端口进行操作,从而实现红外手势识别传感器的控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web安全:拿到 Web 服务器 最高权限.(vulntarget 靶场 1)

Web安全:拿到 Web 服务器 最高权限. Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据…

软考A计划-网络规划设计师-学习笔记-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

从零开始Vue3+Element Plus后台管理系统(18)——权限路由实现

一开始打算做两种模式的路由权限,最后还是分成了3种,分别是: 前端固定路由,所有路由是固定的,通过权限过滤菜单和显示前端动态路由,通过权限过滤路由表和菜单后端动态路由,获取接口返回数据&am…

什么工程项目管理软件好用?

工程项目比较多,经常忘记项目的进度,想要可以查看项目进展的项目管理软件? 大多数时候,面对项目进度没有头绪,看不懂,无法把握;根本原因不在于题主所说的,是否缺少一张合适的项目进…

你必须知道的常用的足够简练的Python代码

许多程序员喜欢Python,因为它的语法简单简洁。下面提供的这些 Python 代码足够简练,可用于解决常见问题。 1.提取字典的键值对 dict1 {A:33, B:43, C:88, D:56} # 提取字典中值大于50的键值对 dict2 { key:value for key, value in dict1.items() if …

curl 命令-接口测试

curl 命令-接口测试 JUST DO IT 温暖春日 在linux/Unix 为代表的os上, 对后端进行测试, 模拟连接请求都会书写脚本 场景: 在Linux 上接口测试工具有ab, restClient, postman等, 最常用的方法是curl进行简单测试 curl是非常方便的Rest 客户端, 可以很方便的完成 Rest API测…

Hadoop教程第一章之Hadoop简介

1. Hadoop是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。 2. Hadoop的三大发行版本 Apache版本最原始&#xff08…

Python读取SD卡二进制数据

在我们使用 STM32 或者 FPGA 采集数据的时候,需要将数据存储到SD卡中,因为数据是按照地址存储的,并且没有文件结构,所以不能直接用电脑的文件管理器读取,下面是一种读取数据的办法 实验平台 正点原子STM32F407ZG探索…

现代化智能十防一体化智慧档案馆平台所具备的必要功能

现代化智能档案室的建设以物联网技术为支撑,包括智能密集架、恒温恒湿消毒净化设备、温湿度传感器、空气质量传感器、空气净化消毒设备、红外防盗设备、门禁设备、防火设备、漏水设备、预警设备、视频监控设备等,集中为一体的管理平台为智能档案室集成平…

金融行业机房监控4大难题?你中招了吗

信息化时代的今天,信息成为我们生活和工作中不可缺少的一部分,由金融行业系统承担,每天有大量的数据交换。 因此,近年来,银行系统对其机房的要求也越来越严格,同时也越来越向智能化、集约化方向发展。 金融…

opencv c++小笔记本(三)

opencv 一图像通道的分离和合并二.图像色彩改变三.简单形状识别1.灰度处理2.高斯滤波3.边缘检测4.膨胀 三.像素点统计四.多边形的绘制和填充五.鼠标操作与响应(截图)六.图像的像素转换和归一化七.视频文件摄像头使用八.视频的处理与保存九.图像直方图十.…

ESP32-C2开发板 Homekit程序示例

准备 1.1硬件ESP32 C2开发板,如图1-1所示 图1-1 ESP32 C2开发板 1.2软件 CozyLife APP可以在各大应用市场搜索下载,也可以扫描二维码下载如图1-2所示 HomeKit flash download tool 烧录工具 esp32c2 homkit演示固件 烧录教程 打开flash_download_to…

实用工具篇(一):JApiDocs

JApiDocs是一个无需额外注解、开箱即用的SpringBoot接口文档生成工具。 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后端代码都是自己写的,否则API…

redis哨兵模式原理

概述 为了实现redis集群的高可用,redis经历了好几次迭代,从最开始的主从模式,到哨兵模式,再到现在的集群模式,可以说架构的优化越来越好,那本篇文章就介绍一下redis的哨兵模式,不过我司其实使用…

阿里云服务器部署flask简单方法

记录如何在阿里云服务器上部署flask接口并实现公网访问。 文章目录 1. 简介2. 部署python3环境3. 生成requirement.txt4. 将项目打包上传5. 安装依赖库6. 查看防火墙7. 测试能否公网访问 1. 简介 因落地通话callback服务测试,需要我写一个测试demo,用于…

Unity Shader中使用GLSL创建材质

目录 Unity Shader格式Properties怎么在脚本中使用类似于glUniform()的功能呢? SubShaderTagsLODpasspass内的tags说明pass内的代码段(GLSL)GLSL与CG语言的差异1. GLSL不可在外部定义结构体2. 在UnityShader中Uniform可以写在vert frag外面 S…

如何处理图片排重(精准排重,相似排重)

图片相似度对比 1、需求 假如有一个图片池,存有1亿图片。给一张目标图片,在图片池中做匹配。 判断一张图片是否在图片池中出现过。(完全一样)判断有没有相似的出现过。比如两张图相似度90,两张图片是在描述一件事情。 …

请推荐几个github上的vue的pc端项目?

前言 这是github上一些高收藏的vue PC端的项目,花了一点时间做了一下vue2和vue3的资源分类整理,可以根据自己的学习进度以及需求来选择对应的项目来研究,希望对你有帮助~ Vue2 PC项目 1、 Elemen Star:53.4k 是一个基于Vue.js…

【Unity Optimize】使用图集(Sprite Atlas)优化项目

目录 1 图集(Sprite Atlas)介绍2 创建与配置Sprite Atlas2.1 创建Sprite Atlas2.1.1 Unity2D项目2.1.2 Unity3D项目 2.2 配置Sprite Atlas2.3 注意事项 3 Sprite Atlas的接口4 Sprite Atlas的优化建议 1 图集(Sprite Atlas)介绍 …

vue3+element plus+vite 引入本地静态资源图片require报错的原因和解决方案,以及如何在表格中展示图片

文章目录 一、vue3element plusvite 引入本地静态资源图片require报错的原因和解决方案二、vue 3element plusvite 项目中,在el-table中展示本地静态图片总结 一、vue3element plusvite 引入本地静态资源图片require报错的原因和解决方案 在写vue3vite项目的过程中…