设为首页收藏本站

[项目] [Hack 上海] Tinter手势控制

cbd_focus 发表于 2015-11-9 11:15:10 | 显示全部楼层 [复制链接]
7 3863
本帖最后由 cbd_focus 于 2015-11-9 17:05 编辑

事物

事物


这个小工具是参加上海纽约大学举办的"Hack上海" 活动时现场制作的.
我们组原本计划做3D 打印巧克力,机器出了点儿问题,所以临时赶制了这个小工具,丑陋之处欢迎吐槽 : )

工具的使用场景是这样的:
1.当我们边吃薯片边看漫画,手指上沾满油渍也不方便控制键鼠的时候,能不能有一个踏板,脚一踏就翻页!
2.在放映ppt/Keynote 的时候, 能不能通过演讲者的手势来控制播放流程.

考虑到需要在比赛所剩不多的时间里迅速完成这个工具,我们选用的是 Arduino micro 做中控,DFRobot 的按钮模块和一个基本的三轴加速度模块.

选 arduino micro 的原因是它板载 USB接口而且支持虚拟串口,也有基本的数字和模拟口.
文档参考: https://www.arduino.cc/en/Main/ArduinoBoardMicro?setlang=cn


踏板的按钮式 DFRobot 的数字按钮.三根线,一个给电一个接地,一个读数字信号,简单好用.
模块链接=> http://www.dfrobot.com.cn/goods-78.html


三轴是基础xyz三轴加速度传感器, GY-61-adxl335.
五个口, 一个给电一个接地, XYZ输出模拟信号各一个.
EM: 这个片是隔壁桌小伙伴送我们的,非常感谢!
文档参考: http://www.analog.com/media/en/t ... -sheets/ADXL335.pdf


## 翻页按钮
单独的按钮翻页功能非常简单,只要在数字口读按钮的信号然后发控制指令即可.记得消抖.
我把按钮接到9号数字口上了.
```
#include <Keyboard.h>

int mBtn = 9;
int btnMsg = digitalRead(mBtn);

void setup() {
  pinMode(mBtn,INPUT);
  Keyboard.begin();
}

void loop() {
  btnMsg = digitalRead(mBtn);

  if(btnMsg == HIGH){
    Serial.println("HIGH_Begin");

    if(btnMsg == HIGH){
        Keyboard.print(" ");

        delay(500);
    }else{
      Serial.println("LOW");
      delay(2000);
    }
    //btnMsg = digitalRead(mBtn);
  }
}

```

可以打开一个多页的PDF 文件来试一下效果.

## 手势识别:
从 XYZ 读到加速度的模拟量之后,我们做了一组实验来构建模型.

acc

acc

从数据里可以清楚看出,如果只做左右移动的手势识别,检测 Y 值足矣.
```
#include <Mouse.h>

int xPin = 1;
int yPin = 2;
int zPin = 3;

int x=0;
int y=0;
int z=0;

int xDelta =0;
int yDelta =0;
int zDelta =0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Mouse.begin();
}

int yBegin=0;
int yUp =0;
int yDown= 0;
void loop() {
  yBegin = analogRead(yPin);
  Serial.println(y);
  delay(100);
  yDelta = analogRead(yPin) -yBegin;
  yUp = analogRead(yPin);

  if(yDelta > 80){//go right
    delay(400);
    yDelta = analogRead(yPin) -yUp ;
    if(yDelta < -30){
      //right click
      Mouse.click(MOUSE_RIGHT);
      Serial.println("MOUSE_RIGHT");

      //y = analogRead(yPin);
      delay(200);
    }
  }else if(yDelta < -80){//go left
    delay(400);
    yDelta = analogRead(yPin) -yDown ;
    if(yDelta > 30){
      //left click
      Mouse.click(MOUSE_LEFT);
      Serial.println("MOUSE_LEFT");

      //y = analogRead(yPin);
      delay(200);
    }
  }

  y = analogRead(yPin);

}

```
大家可以根据自己的挥手习惯来调整参数.

下面是演示视频:



视频里使用的版本:
ps: 视频里的漫画网站是我写的, http://lookmanhua.com 欢迎吐槽

```
#include <Keyboard.h>
#include <Mouse.h>

int mBtn = 9;
int btnMsg = digitalRead(mBtn);

int xPin = 1;
int yPin = 2;
int zPin = 3;

int x=0;
int y=0;
int z=0;

int xDelta =0;
int yDelta =0;
int zDelta =0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Mouse.begin();

  pinMode(mBtn,INPUT);
  Keyboard.begin();
}

int yBegin=0;
int yUp =0;
int yDown= 0;
void loop() {
  yBegin = analogRead(yPin);
  Serial.println(y);
  delay(100);
  yDelta = analogRead(yPin) -yBegin;
  yUp = analogRead(yPin);

  if(yDelta > 60){//go right
    delay(400);
    yDelta = analogRead(yPin) -yUp ;
    if(yDelta < -25){
      //right click
      Mouse.click(MOUSE_RIGHT);
      Serial.println("MOUSE_RIGHT");

      //y = analogRead(yPin);
      delay(200);
    }
  }else if(yDelta < -80){//go left
    delay(400);
    yDelta = analogRead(yPin) -yDown ;
    if(yDelta > 30){
      //left click
      Mouse.click(MOUSE_LEFT);
      Serial.println("MOUSE_LEFT");

      //y = analogRead(yPin);
      delay(200);
    }
  }

  y = analogRead(yPin);

  /*---丑陋的分割线----*/
  btnMsg = digitalRead(mBtn);

  if(btnMsg == HIGH){
    Serial.println("HIGH_Begin");

    if(btnMsg == HIGH){
        Keyboard.print(" ");

        delay(500);
    }else{
      Serial.println("LOW");
      delay(2000);
    }
    //btnMsg = digitalRead(mBtn);
  }

}

```

我的改进想法是这样的:

把读到的xyz作为一个向量整体来处理,挥动手臂,捕捉向量变化轨迹,然后再识别向量的模式.
再进价一点希望是可以让用户 DIY 手势然后自动识别模型匹配模型.
再进阶一点是加上陀螺仪,读取更详细的手势信息.
有工业设计背景同学可以把它做成cool一点的手环.

vector

vector


现场时间有限,目前只是做了 Demo,我在这里抛砖引玉,大家感兴趣可以往上加高阶功能.

特别感谢:
     Hack Shanghai
     上海纽约大学
     DFRobot
     队友小伙伴

2015-11-09
     Focus

微信 18817311035,欢迎交流 : )
发表于 2015-11-9 11:41:07 来自手机 | 显示全部楼层
棒棒哒!!!作品现场有看到,非常赞!如果要报名nabi黑客马拉松的话要备注下,管理员才能看到喔!
回复 支持 反对

使用道具 举报

发表于 2015-11-9 23:07:34 | 显示全部楼层
niu B a
回复 支持 反对

使用道具 举报

发表于 2015-12-15 09:01:00 | 显示全部楼层
我是来点赞的——
回复 支持 反对

使用道具 举报

发表于 2016-1-5 10:39:42 | 显示全部楼层
创意无极限
回复 支持 反对

使用道具 举报

发表于 2016-1-11 14:43:17 | 显示全部楼层
路过………………
回复 支持 反对

使用道具 举报

发表于 2016-1-17 00:06:15 来自手机 | 显示全部楼层
控制方式还有很大的改进空间,加油!
回复 支持 反对

使用道具 举报

发表于 2016-8-1 13:32:08 | 显示全部楼层
需要挥手这么快没问题吗
回复 支持 反对

使用道具 举报

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

本版积分规则 允许回帖同步到新浪微博  

  • 学徒
  • 19
  • 1

楼主的其它帖子

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表