查看原文
其他

项目分享| 仅79行代码完成创意无限的手势识别

妮mo 达尔闻说 2022-04-25

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我


2020年告别鼠标手妙招——

巧用手势识别!当你们手腕酸痛的时候,可曾想到过,如果能用手势识别来代替鼠标进行翻页浏览,该是一种多么美妙的体验呀!
今天的项目分享,就给大家介绍由工程师DimitrisPlatis带来的简单易上手的手势识别鼠标,所有的资料都是开源的,拿走不谢。(79行代码见下文,原理图PCB源文件在“达尔闻说”微信回复:鼠标,获得)

整个项目的完成只需3样东西,手势识别模块,USB模块和PCB连接器。我们将一一为大家介绍。

如图,这个小玩意叫Nevma(希腊语的“手势”),是一种易于搭建的设备,可方便的进行编程和使用,并且能轻松的将您的手势转换为键盘和鼠标输入。操作很简单:你只需将其插入USB端口,即可神奇梦幻般地浏览文稿,PPT,图片,播放歌曲等等
很多人可能觉得用鼠标更快也更顺手,的确手势识别不是操控电脑最快最舒适的方法,但是呢是最新颖的,同时性价比也很不错,功能还不少。比如,里面用到的APDS-9960手势识别模块只要14块钱!却可以识别向左、向右、向上、向下滑动、将手移近或移开传感器等多种手势。
手势识别模块 APDS-9960
而涉及与电脑通信的USB模块,Dimitris Platis采用了Mini SS Micro,它本质上是带有A型USB连接器的ATmega32U4芯片的模块。在提供与PC的兼容性的同时,使编程难度大大降低,因为它与Arduino完全兼容,且价格实惠(约4美元)。

USB 接口 Mini SS Micro
接下来的问题便是把USB模块和手势识别模块组合在一起,Dimitris Platis制作了一个微小的PCB用于上下组合两个模块,而PCB版图也在他的GitHub上完全开源,有需要的同学可以直接打板制作。

PCB连接器
就是这么简单!只需要三个组件(你甚至可以用杜邦线连接他们)就可以制作出属于你的手势识别鼠标啦!

3D打印的外壳

在软件方面,我们使用的是Sparkfun的APDS-9960库。通过编程来生成自己的自定义键盘或鼠标输入,就像对Arduino进行编程一样简单。此外,还可通过结合现有手势来扩展功能,从理论上讲,我们能够通过修改库检测出更多复杂的手势。
以上,更多是给大家提供一个手势识别模块的入门例程。最后,附上软件代码。期待你跟随达尔闻的步伐,做出属于自己的炫酷的手势识别鼠标!
#include <Keyboard.h>#include <Mouse.h>#include <SparkFun_APDS9960.h>
SparkFun_APDS9960 gestureSensor;const unsigned short GESTURE_INT_PIN = 1;
volatile boolean hasMovement = false;
/** The main business logic. Translates gestures to keyboard events.*/void handleGesture() { if (gestureSensor.isGestureAvailable()) { switch (gestureSensor.readGesture()) { case DIR_UP: Keyboard.press(KEY_LEFT_ARROW); break; case DIR_DOWN: Keyboard.press(KEY_RIGHT_ARROW); break; case DIR_LEFT: Mouse.move(0, 0, -10); break; case DIR_RIGHT: Mouse.move(0, 0, 10); break; case DIR_NEAR: Keyboard.press(' '); break; case DIR_FAR: Keyboard.press(KEY_ESC); break; default: break; } Keyboard.releaseAll(); }}
/** Gets called whenever the gesture module signals there are new data to be sent*/void transmissionReady() { hasMovement = true;}
/** Initializes gesture sensor @return whether gesture sensor initialization was successful*/boolean initializeGestureSensor() { return gestureSensor.init() && gestureSensor.enableGestureSensor(true);}
void setup() { Keyboard.begin(); Mouse.begin(); attachInterrupt(digitalPinToInterrupt(GESTURE_INT_PIN), transmissionReady, FALLING); boolean initializationSuccessful = initializeGestureSensor(); // If ADPS sensor failed to initialize, block and send error messages via Serial if (!initializationSuccessful) { Serial.begin(9600); while (!initializationSuccessful) { Serial.println("Error while initializing the gesture sensor"); delay(10000); } }}
void loop() { if (hasMovement) { handleGesture(); hasMovement = false; // Reinitialize as workaround for sensor hanging when gesturing too fast initializeGestureSensor(); }}
一点题外话:也许有人觉得我用鼠标一样很方便呀,手势识别很鸡肋?其实不然,深入挖掘手势识别模块的灵活性,我们可以创作出很多延伸功能和乐趣,比如:

打造基于手势识别的游戏,例如手势识别控制上下左右移动如贪吃蛇;

打造属于自己的手势锁,这个模块几乎可以移植到任何设备上,比如你的电脑;

利用手势进行电视换台,彻底解决找不到遥控器的烦恼;

搭配在车载系统上,快速帮助开车的你实现某种功能;

聋哑人怎么用小爱、小度呢,我们可以为他们打造基于手势识别的人工智能呀等等


与传统的键盘、鼠标等输入设备相比,手势感应控制技术目前还未被显著地应用,但是相信在未来人工智能的大环境下,结合VR、AR,手势识别作为新的人机接口必能创造出许多我们想不到也不敢想的发明应用。所以,何不从趁现在开始学起来,赢在起跑线上呢?快来获取原理图PCB源文件,在“达尔闻说”微信回复:鼠标。

达尔闻专属星级判定

实用系数:★★★★☆

难度系数:★★☆☆☆

创新系数:★★★★☆


END

达尔闻项目分享系列——聚焦物联网、嵌入式、AI、FPGA等热门应用技术,开源分享原理图、代码等项目方案,做你手边的知识库。

项目分享系列集锦:

STM32物联网智能家居项目

树莓派+计算棒2完成实时人脸识别项目

嵌入式开发板的云计算平台搭建

STM32实现最简单空中鼠标

Arduino魔方机器人

STM32版“AI灵魂画手”

STM32电子相册制作

STM32+DDS自制信号发生器

利用树莓派与Web界面远程控制家电

STM32“云”音乐播放器

树莓派远程监控

基于STM32实现辉光管时钟设计

自制FPGA最小系统板(PCB可直接打板)

树莓派4搭建NAS,让硬盘轻松联网

ESP32小车软硬实战分享


我们是妮mo,达尔闻创始人,只讲技术不撩汉的小姐姐。达尔闻在线教育平台旨在服务电子行业专业人士,提供技能培训视频,覆盖各细分领域热门话题,比如嵌入式,FPGA,人工智能等。并针对不同人群量身定制分层级学习内容,例如常用知识点,拆解评测,电赛/智能车/考研等,欢迎关注。

官网:www.darwinlearns.com

B站:达尔闻

QQ群:群1:786258064(已满)

          群2:1057755357


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存