基于Arduino的手势识别控制装置

2017-10-21 07:50梁梓廷叶军郑树海陈雪松
电脑知识与技术 2017年18期
关键词:手势识别人机交互

梁梓廷 叶军 郑树海 陈雪松

摘要:人机交互技术逐步从以计算机为中心转移到以人为中心,其中手势识别技术已广泛应用于电脑、手机等电子设备。该文介绍了一种基于Arduino的手势识别控制装置,传感器通过12C总线与Arduino通信,然后将处理的结果传输给电脑对电脑加以控制。通过优化手势识别算法,提高手势识别效率。设备具有接线简单、操作简便的特点。

关键词:手势识别;人机交互;Arduino单片机;九轴手势传感器

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)18-0184-02

1概述

手势识别是人机进行交互的一种方式,它在人民的生活中逐渐运用与流行起来,计算机的发展给手势识别提供了强大的计算平台,使得人与计算机的交互活动越来越频繁。其目的是运用计算机通过某种手段分析出每个手势的具体含义,进而获知手势发起者的整个表达,以达到实现人机交互的目的。常用的是通过传感器采集数据,然后进行数据的处理,再做出相应的操作。传感器其方便与专用的特点使得操作起来较为方便。

2系统总体设计

手势识别控制装置如图1所示,其由九轴手势传感器(PAJ7620U2)与Arduino Leonardo组成,Leonardo可以模拟为鼠标或者键盘连接到其他的微控制器并进行通信。手势传感器可以识别9个手势,包括向上移动,向下移动,向左移动,向右移动,向前移动,向后移动,圆周顺时针,圆周逆时针和波动。系统的其工作原理是:手势信息通过简单的访问12C总线并与Arduino进行数据的交换,最后通过USB数据线来传输数据控制电脑。

3详细设计方案

要通过Arduino Leonardo来实现对电脑等设备的控制,可以将Arduino模拟为一个虚拟的鼠标和键盘。通过USB通信功能可以直接通过USB接口来与电脑进行通信,本文的思路是借鉴键盘的特点,通过算法控制Arduino来输出想要功能的ASCII码从而来模拟键盘。在不同的系统下输入键的ASCII碼值是一样的,因此这就使得此控制系统具有了跨平台的特性。目前常见的系统Windows、Linux、Unix、Mac 0S、Android等都可以进行支持,这使得该装置的通用性与实用性进一步的提高,因此它可以应用在汽车或者助残装置等领域。

3.1主程序

首先要定义识别时间、进入时间与退出时间,其单位均为ms。识别时间与进人时间越短,识别的速度越快,但是同样会使得识别的准确率降低。并且进入时间要小于识别时间,否则会出现识别不准确的现象。因此通过大量实验结合实际情况,在综合考虑识别的速度与准确性下,我们设定识别时间为500ms,进入时间为800ms,退出时间为1000ms,在实际的测试中发现有不错的体现。

程序首先进入Setupf)函数,目的是初始化键盘库、初始化串口并且将波特率设定为9600。Arduino与电脑之间的通信通过串口通信来进行的。Arduino IDE里面自带串口监视器,通过串口检测器我们可以清楚的看到传感器所识别到的手势。通过分析可以去除干扰的手势来提高控制端输出的准确率。

以上程序为loopO函数内的一部分,即初始化之后loop()让编写的程序循环地被执行,使用它来运转Arduino。Loop与set-up()函数也是Arduino编写的时候必须要有的函数,否则程序无法编译通过提示错误,Arduino自带循环函数。9轴的手势传感器必定会有九种输出,那么选择switch()选择语句是非常合适的。通过paj7620ReadReg函数来读取传感器返回来的值,paj7620ReadReg是在传感器头文件里面已经定义好的函数。

传感器库文件内部已经定义了相应的函数,其中最主要的为WriteReg函数与ReadReg函数其分别为读取与写入函数。在识别到“右”信号的时候,先进行进入延时,在800ms的延时之后,再次的检测传感器的数值如果是“靠近”信号那说明此时用户想输出的是“靠近”指令下的控制命令,如果是“远离”信号,则输出的“远离”指令下的控制命令。因为通过测试发现在执行“远离”与“靠近”的指令的时候用户可能会从传感器的右侧、左侧、上侧或者下侧进入来输入“远离”或者“靠近”的手势,因此需要去除一开始的错误信号。同样“左”、“上”、“下”手势都是如此,和“右”手势一样的思路。

3.2相关子程序

当Arduino通过分析后确认用户输人的顺时针手势后,会进入以下的子程序,在子程序里面就进行键盘的模拟。它既可以完成组合间的设计也可以进行,单独键盘的模拟。对于组合键,程序依次的输入相应的按键的ASCII值后,延时一段时间。延时的目的是让其能在一个时间段内稳定的同时输出,在完成一次操作后通过Keyboard.releaseAll()函数来释放所有的键盘值,即停止输出此组合键的ASCII码,单键盘的模拟就可以使用Keyboard.press()函数直接实现。延时一段时间后就可以进行键盘的释放,来实现相应的功能。

表1是本文通过模拟键盘的功能实现的对电脑的控制,对于手势设定的功能基本上符合日常生活中的使用情况。通过模拟可以实现对电脑键盘的模拟能够实现图片的切换与放大缩小、网页的浏览与方法缩小、视频的快进快退、退出确认等功能。

4总结

本文运用Arduino单片机与PAJ7620U2九轴手势传感器,编程实现了对电脑的控制。可以实现对应的图片的切换、网页的浏览、视频的快进快退、退出确认、放大缩小等功能。通过由于ASCII码的通用性,使得其在其他的平台上都可以使用,因此使得其通用性与实用性大大的提高。在兼顾识别速度的同时也保证了识别的准确率。但是反应速度不迅速,在要求不高的场合可以使用。endprint

猜你喜欢
手势识别人机交互
基于手势识别的工业机器人操作控制方法
人机交互课程创新实验