[Hack 上海] Tinter手势控制

2015-11-092万
AI 快速预览详细 收起
这个项目是在Hack上海活动中制作的一个手势控制工具,使用了Arduino Micro作为中控,结合DFRobot的按钮模块和三轴加速度传感器。通过简单的代码实现了翻页和手势识别功能,适用于边吃薯片边看漫画或演讲时控制PPT播放。项目的核心在于通过检测Y轴加速度值来实现左右移动手势识别,并且参数可以根据个人习惯进行调整。


[Hack 上海] Tinter手势控制图3

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

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

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

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


踏板的按钮式 DFRobot 的数字按钮.三根线,一个给电一个接地,一个读数字信号,简单好用.
模块链接=> https://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 读到加速度的模拟量之后,我们做了一组实验来构建模型.
[Hack 上海] Tinter手势控制图1
从数据里可以清楚看出,如果只做左右移动的手势识别,检测 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一点的手环.
[Hack 上海] Tinter手势控制图2

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

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

2015-11-09
     Focus

微信 18817311035,欢迎交流 : )

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(7)
HMark
HMark
需要挥手这么快没问题吗
西海岸总督
西海岸总督
控制方式还有很大的改进空间,加油!
qq913622228180
qq913622228180
路过………………
qing1987
qing1987
创意无极限
刹那ZF清英
刹那ZF清英
:)我是来点赞的——
dsweiliang
dsweiliang
niu B a
Juice
Juice
棒棒哒!!!作品现场有看到,非常赞!如果要报名nabi黑客马拉松的话要备注下,管理员才能看到喔!
- 没有更多了 -