风筝
发表于: 2018-5-8 22:34:55 | 显示全部楼层

在本篇文章中,我们主要介绍了如何使用Arduino开发板制作一个手势遥控器。本项目采用了APDS-9960 RGB和手势传感器扩展板。通过将手滑过传感器,您可以控制不同的电子设备,例如电脑、微控制器、机器人等。 采用APDS-9960极大方便了连接,并且它采用I2C接口进行通信。您可以将其用作电视的遥控器,像我们一样,但也可以将其用于控制其他使用红外线(IR)的设备。在本文中,我们会依次介绍项目制作的过程,包括电子电路设计、代码、3D打印部件以及组装。


手势遥控器的电路原理图

circuito-circuit-hand-gesture-remote.jpg


主要组件

●    SparkFun APDS-9960 - RGB和手势传感器

●    红外(IR)LED 950nm

●    红外接收器二极管 - TSOP38238

●    倾斜开关(可选)

●    锂聚合物电池 - 3.7v 1000mAh(3.5cmx5cm)

●    USB迷你B电缆

●    Arduino Pro Mini 328 - 3.3V / 8MHz

components-for-hand-gesture-remote-e1522714189632-1024x572.jpg


其他次要组件

●    220欧姆电阻

●    晶体管 - NPN BC337

●    SparkFun FTDI扩展板

●    面包板

●    跳线

●    原型PCB(3厘米x 7厘米)


硬件

●    M2钣金十字螺丝x 8

●    烙铁

●    3D打印机


将这些组件添加到面包板后,我们获得了完整的组件列表,并根据接线说明连接电路。


手势遥控器有四个主要部分:APDS-9960传感器实际上是四个不同的传感器!它可以用作环境光线传感器、RGB传感器、接近传感器,当然也可以用作非接触式手势传感器。

我们还使用红外LED将红外代码传输到电视机。Arduino pro mini 3.3v微控制器控制红外发光二极管和传感器,并且使用3.7伏锂聚合物电池为整个电路供电。

circuit-hand-gesture-sensor.jpg


代码

本文使用的代码基于Ken Shirriff针对IR LED的IR遥控库和Sparkfun手势传感器库。

install-irremote-library-hand-gesture-remote.png


install-apd-library-hand-gesture-remote.png


我们合并了这两个基本代码示例,一方面发送IR原始代码,另一方面感测不同的手势。该代码可在Github Repo上获得。确保安装上面的两个库以保证其正常工作。

Include-libraries-hand-gesture-remote.png


设置功能

正如你在代码中看到的,我们用不同的手势设置了6个不同的功能:

●    向左或向右挥动,让你在不同的频道之间切换

●    上下挥动控制音量

●    将手靠近传感器可使电视机静音

●    以及将手从传感器上移开即可打开和关闭电视机


查找红外信号

在我们实际制作遥控器电视之前,我们需要弄清楚发送给它的红外信号。为此,我们将红外接收器连接到另一个Arduino开发板,并上传IR远程库中的红外接收代码示例。


通过打开Arduino IDE上的串行监视器并单击电视遥控器按钮,我们可以确定为每个遥控功能使用哪个IR代码。


我们点击了我们想要使用的所有遥控按钮,并将数据复制到代码里面,然后我们将每个数组重命名为其实际的功能名称,并删除了我们不需要的所有部分。接下来,我们将所有红外数组复制到我们以前的手势代码中,并添加红外“send raw”函数,为每个手势使用正确的红外数组。例如,当感测到向上方向手势时,它发送VolUp的IR代码,等等。此时,我们使用FTDI Breakout上传代码进行一些测试。


降低功耗

我们在这个项目中处理的另一个问题是功耗。由于我们希望电池能够持续很长时间,因此我们在代码中添加了“深度睡眠”功能。这意味着除非手势传感器接收到信号,否则Arduino实际上会休眠。该信号通过其中断引脚唤醒Arduino。只有这时,Arduino才能执行解密不同手势并通过IR LED发送IR信号的任务。


一些最终的调整

为了使电路更小一些,我们使用焊接电路代替面包板。这次我们将这些元件直接焊接到了Arduino上。我们还使用了一块原型PCB,将其切割成3cm x 5cm以连接不同的地线和电源线,以及焊接IR LED晶体管和电阻。

image-of-circuit-wih-component-names-hand-gesture-remote.jpg

我们添加了一个电池插头和2个接头,使我们能够轻松连接IR LED。

最后,我们增加了一个很酷的调整来节省更多的电池电量:我们在电池接地线和Arduino之间焊接了一个倾斜开关。这意味着你可以翻转电路来切断Arduino的电源,类似于电源开关。


组装

我们测量了所有组件并建模了一个可以容纳所有组件的3D塑料外壳。你可以在这里找到.stl文件。

然后,我们打印机箱,拧入手势传感器,将LED安装到其孔中,拧入PCB中,将电池装入机箱盖,然后将机箱盖拧紧到机箱上。

casing-for-gesture-remote-control.jpg


现在手势遥控器已经做好了!我们希望你能喜欢这个项目,并找到它的一些不错的用途。如果您对如何改进此项目有任何想法、意见或疑问,欢迎您在下面进行回复。如果您根据本文制作了这个项目,我们也很乐意听到!

跳转到指定楼层
ldy
发表于: 2018-10-24 12:33:42 | 显示全部楼层

请问,能给这个手势传感器的链接吗?因为老师说手势传感器有时候不够灵敏。 怕买回来不能用。
回复

使用道具 举报

风筝
发表于: 2018-10-24 22:13:58 | 显示全部楼层

ldy 发表于 2018-10-24 12:33
请问,能给这个手势传感器的链接吗?因为老师说手势传感器有时候不够灵敏。 怕买回来不能用。 ...

我们使用的是SparkFun的APDS-9960 - RGB和手势传感器,官网链接地址:https://www.sparkfun.com/products/12787
回复

使用道具 举报

1153635534
发表于: 2018-11-1 11:06:21 | 显示全部楼层

能给下代码吗
回复

使用道具 举报

1153635534
发表于: 2018-11-1 20:26:22 | 显示全部楼层

楼主,可以给下代码吗
回复

使用道具 举报

风筝
发表于: 2018-11-1 21:44:11 | 显示全部楼层

1153635534 发表于 2018-11-1 20:26
楼主,可以给下代码吗

本文的代码已经上传到Github上,文章中已经提到了。代码: gesture-remote-master.zip (2.32 KB, 下载次数: 20)

回复

使用道具 举报

ldy
发表于: 2018-11-20 11:36:50 | 显示全部楼层

你好,无法查找到红外信号,请问怎么可以解决?
回复

使用道具 举报

ldy
发表于: 2018-11-20 11:57:18 | 显示全部楼层

ldy 发表于 2018-11-20 11:36
你好,无法查找到红外信号,请问怎么可以解决?

已经解决啦
回复

使用道具 举报

ldy
发表于: 2018-11-26 21:02:06 | 显示全部楼层

你好,请问这个还可以加哪些模块,扩充一下功能?
回复

使用道具 举报

ldy
发表于: 2018-11-27 17:45:31 | 显示全部楼层

你好,串口监视器出现Something went wrong during APDS-9960 init!

这个该怎么解决呢?
回复

使用道具 举报

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

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-22 17:42 , Processed in 0.049948 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表