9987浏览
查看: 9987|回复: 6

[进阶] 给电脑增加个手势快捷键

[复制链接]
最近在DFRobot上看到一款手势传感器,感觉挺有趣。先上个图:
给电脑增加个手势快捷键图4
据说可以检测到人手从上面滑过的时候所经过的方向。比如从上往下滑动,从左往右滑动,或者从远到近。

好奇之下有了个新点子,就拿来测试测试了。

用过标题大概也都猜到了,我就是想用他来控制电脑,给电脑增加一点快捷键。快速的打开电脑里的应用程序等一些功能。

先用UNO连接上传感器。
给电脑增加个手势快捷键图3
接下来就是见证奇迹的时刻了(并不是。。随口一说),下载好sparkfun的库,在uno中打开库中的例程,gestureTest,这个例程功能非常简单,当你有手势的时候从串口输出你的手势,例如你从上到下则输出DOWN,从左到右则输出RIGHT等等。去掉一些测试用的输出,程序简化成如下:

[mw_shl_code=applescript,true]#include <Wire.h>
#include <SparkFun_APDS9960.h>

#define APDS9960_INT    2 // Needs to be an interrupt pin
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {
// Initialize Serial port
Serial.begin(115200);
// Initialize interrupt service routine
attachInterrupt(0, interruptRoutine, FALLING);
apds.init();
apds.enableGestureSensor(true);
}

void loop() {
if( isr_flag == 1 ) {
     handleGesture();
     if(digitalRead(APDS9960_INT) == 0){
     apds.init();
     apds.enableGestureSensor(true);
   }
   isr_flag = 0;
}
}

void interruptRoutine() {
isr_flag = 1;
}

void handleGesture() {
   if ( apds.isGestureAvailable() ) {
   switch ( apds.readGesture() ) {
     case DIR_UP:
       Serial.println("UP");
       break;
     case DIR_DOWN:
       Serial.println("DOWN");
       break;
     case DIR_LEFT:
       Serial.println("LEFT");
       break;
     case DIR_RIGHT:
       Serial.println("RIGHT");
       break;
     case DIR_NEAR:
       Serial.println("NEAR");
       break;
     case DIR_FAR:
       Serial.println("FAR");
       break;
     default:
       Serial.println("NONE");
   }
}
}
[/mw_shl_code]
打开串口助手 大概显示是这样的
给电脑增加个手势快捷键图2
可以看出显示了很多的NONE(未识别),说明这个模块的识别率实在是堪忧。。不过如果降低移动速度,并对传感器进行良好的固定,貌似是可以增加识别率的。

接下来就是电脑端的程序了。电脑端同样还是使用Python(毕竟比较简单啊。。)读取串口数据,判断字符,执行命令。
先想想我要做什么吧。。
苦思冥想30s,就做个锁屏再做个快捷打开计算器(嵌入式工程师太常用了)吧。程序如下:
[mw_shl_code=applescript,true]# -*- coding:utf-8 -*-#
from ctypes import *
import serial
from time import sleep
import os
user32 = windll.LoadLibrary('user32.dll')
S1=serial.Serial(port='COM7',baudrate=115200,bytesize=8,parity='N',stopbits=1,timeout=5)
print "serial.isOpen() =", S1.isOpen()
temp=""
while True:
    sleep(0.2)
    while S1.inWaiting() > 0:
        temp+= S1.read()
        #读取数据
    if temp:
        if "FAR" in temp:
            user32.LockWorkStation()
        elif "LEFT" in temp:
            os.system('calc')
        print temp
        temp=""
S1.close()[/mw_shl_code]
左划是打开计算器,远离是锁屏。嗯,看看效果。
给电脑增加个手势快捷键图1
嗯。。完全停不下来。。

liudaosixway



dsweiliang  初级技神

发表于 2016-1-8 16:50:46

帅气,如果有视频就更帅气
回复

使用道具 举报

何处不江南  初级技匠
 楼主|

发表于 2016-1-8 17:48:49

dsweiliang 发表于 2016-1-8 16:50
帅气,如果有视频就更帅气

读书人的事  拍什么视频
回复

使用道具 举报

hnyzcj  版主

发表于 2016-1-8 18:25:49

就一个调用,不过很有新意。
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2016-1-10 20:07:57

手势传感器,哈哈哈
回复

使用道具 举报

M_E  初级技师

发表于 2016-6-20 12:23:21

Leonardo能用这个传感器吗?我自己尝试用leonardo没成功..
回复

使用道具 举报

20060606  高级技匠

发表于 2020-8-16 07:30:24

哈哈哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail