基于Leap Motion的智能灯光控制系统

事先声明,本文涉及到的所有代码都是我毕业设计的内容,请勿转载。

  1. 准备工作
    Arduino IDE、Processing、8*8 WS2812B、Leap Motion
    其中,Arduino需要安装Adafruit_NeoPixel.h,用来驱动WS2812B;Processing需要安装LeapForProcessing用于获取Leap Motion的手部信息;而Leap Motion需要从官网中获取SDK,我用到的SDK为最新版2.3.1.
  2. Processing
    为了能够与Arduino进行通信,我们需要在编程层次调用相应的库函数(?这个地方的名称不确定)
import processing.serial.*;
import de.voidplus.leapmotion.*;
  除此之外,我们需要定义其对应的变量名称:
Serial port;
LeapMotion leap;
接下来,进行一些简单的初始化设置:
void setup()
{
  port = new Serial(this,"COM3",9600); 
//这里是设置端口的地方,可以是蓝牙也可以是arduino的端口
  leap = new LeapMotion(this);
}
为了能够不断地获取手部信息或者手指信息,我们需要用到for循环:
for(Hand hand : leap.getHands())
  {
    for(Finger finger : leap.getFingers())
      {
      		//...
      }
  }
当然,我们需要调用函数创建我们的手指类型的变量,比如:
    Finger  fingerThumb        = hand.getThumb();
    Finger  fingerIndex        = hand.getIndexFinger();
    Finger  fingerMiddle       = hand.getMiddleFinger();
    Finger  fingerRing         = hand.getRingFinger();
    Finger  fingerPink         = hand.getPinkyFinger();
因为我需要用手做出不同的数字进而控制灯光,所以,我用到了`isExtended()`函数来判断单个拇指是否伸出,比如:
(fingerIndex.isExtended() == true)
最后,我们需要发送数据给Arduino,使之产生相应结果:
port.write("a");
到这里,Processing的编码就完成了。
  1. Arduino
    首先,我们需要进行一些简单的初始化、变量的创建、以及库函数的调用。
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> //16兆赫Adafruit饰品所需
#endif

// Arduino上的哪个插脚与NeoPixels相连?
#define PIN        6

// Arduino上有多少个LED?
#define NUMPIXELS 64

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 30 //像素之间暂停的时间(毫秒)
然后,需要设置串口通信的波特率:
void setup()
{
  #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);

  #endif
  Serial.begin(9600);  //比特率设置为一致方可通信
  pixels.begin();
  pixels.setBrightness(brightness);
}
并接收Processing发过来的数据:
getStr = Serial.read();
最后,我们通过**if语句**的判断方式  使之产生对应的输出。
需要注意的是,Leap Motion每秒能检测200帧的数据,意味着你哪怕将手放在leap的感应区,它会通过processing发送许多的数据,如果你在arduino的输出程序加入了延时,回答之实时性非常差,这个时候,可以通过while循环的方式解决,如下:
while(getStr != getStr1)
  {
	//...
	getStr1 = getStr;
  }
  1. 总结

写这篇文章是因为,我最开始做这个题目的时候网上相关的资料几乎没有,导致我不断的遇挫;希望我的这篇文章可以帮到需要的人

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值