Kinect和Arduino打造体感遥控直升机

 

声明

这个项目其实是我在大二时业余时间做的,原本在2012年9月15号发表在果壳网,然而现在只能从果壳的全站搜索里找到连接,但对应的页面也已经被删掉了。

搜索结果页面

本文其实是从百度上搜索到的其他盗取我这篇文章的论坛上搬运来的(感谢一下当初未授权搬运这篇文章的人?)。自从我这片博文当年在果壳网发表之后,出现了无数搬运、剽窃的文章。甚至有人用我这篇文章里的内容经过洗稿之后成功发表过论文。时间已经过去很久,没有追责的动力(而且毕竟经过了洗稿,也不好说是直接抄袭),但今天搬运到这里,就是为了声明最早的原创性以正视听。

另外,这篇文章是我在大二时随笔所写,语言很口语化,如有语义不通处请见谅。

原始正文

一直说要出这个教程,懒了好多天,今天终于打算写出来了。。。。内容其实挺简单,请轻拍。。。

说说这个项目,其实就是利用Kinect采集人体的姿态信息,然后通过串口向Arduino发送消息。Arduino通过控制遥控器的电位来达到遥控直升飞机的目的。

然后我就分开说说每个部分是怎么搞得吧。

一、改造遥控器

这小破直升飞机是淘宝买的49块钱的便宜货。。。到货后果断拆掉遥控器。分析了一下控制原理。其实摇杆就是一个电位器,通过不同的电位来给直升飞机发送不同的信号。

也就是说我们可以把这种物理的电位器换成数控电位器啊神马的~然后通过电脑控制数控电位器的电阻值,来模拟原本的“摇杆”。

拆下来的就是这么个电位器组件:

然后把原来的触点用几个两孔的排母焊上去:

然后我们的遥控器就算改造完毕了~

二、制作控制板

由于这个遥控器有三个电位器(油门,前后,旋转),那么我们就用三个数控电位器来代替这三个普通的电位器。这里我用到的IC是X9313WP,8针的DIP直插(0-10K,32档,但是我们只用其中的0-5K,所以就是16档)。管脚图就是这个咯:

然后是功能表:

最早我们用面包板测试了一下这东西好不好使,因为管脚太多,输入输出也不少,所以接线就成了这个样子:

测试可用,然后就用洞洞板焊了一块板子。

背面(全都是飞线。。。这种带连接的洞洞板不好焊啊。。而且焊完了发现有明显设计失误TT):

正面:

然后控制电路就算搞定了。。。。

三、Arduino端写代码

话说Arduino的功能就是用来控制这块板子。通过PC上串口的数据来改变数控电位器的值。这里我写了一个X9313的驱动。放在了GitHub:friskit-china/X9313W-Arduino-Driver

四、Kinect端写代码

然后是Kinect端要写代码。主要原理就是通过获取到的骨骼数据中的关键点来决定现在数控电位器的值。(笔者写这文章的时候不在windows下啊。。。图就不上了)

五、系统组合

每个模块都算搞定了,然后就要把整个系统拼接在一起啦~

六、收尾工作

总觉的那块尺寸巨大的洞洞板不爽。然后就花了50大洋买了个DFRobot的Mega Protoshield。。。。这个直接一拼插,感觉好多了~下图是测试中。。。

七、效果

就是这么个视频,建议打开最高画质:)

以上代码(Arduino、Kinect)可以到这里下载: http://friskit.me/2012/09/kinect-contolled-helicopter/ (上面这个是我最早的博客地址,后来这个博客数据丢了,代码也丢了。目前只能从我的GitHub中找到Arduino部分的控制代码,放在了friskit-china/Arduino-Helicopter-Controller