手势控制在移动设备上的应用越来越多,今天就来做一个范例,用手势遥控LED灯,透过手势动作进行灯光的Power on、Off以及亮度调节控制。
手势控制灯光的手势
我们希望能控制灯光的 1.亮度调节 2.关闭 3.直接开最亮三种动作,因此设计其手势动作如下:
手势控制灯光的流程
在动作流程方面,基本上用户的想法只有两个「我想要控制灯光」以及「我的命令是XXX」:
Step 1:用户告知系统我想要控制灯光:当使用者打算控制灯光时,需要把手放在镜头前,此时LED灯便会开始恒亮告知使用者从休眠状态醒来了,这时使用者便可把手放开。
Step 2. 系统进入控制模式等待手挥动作:在上一步使用者放开之后,会发现LED持续闪烁,表示系统目前正在等待手挥控制。使用在可在此时在镜头前进行各种手势动作以控制灯光。当系统发现持续了五秒镜没有任何手挥动作的话,便会再进入休眠状态,使用者若想要再次进行手挥控制,必须从第一步开始。
我们可以把上述的两个想法详细拆解如下:
材料准备及接线
以下分为手势控制端及灯具端两部份来说明。
手势控制端
手势控制端此装置可贴于墙壁或放置桌上,角度需方便一般人手部的上下左右挥动来控制远距的灯光设备。为了让用户知道目前系统可否开始进行手势挥动控制,因此加了一个LED灯for模式告知用途。
材料准备
开发板(UNO、Nano…皆可)
创客手势控制开发板EGAD-005
MUART0-S-1-1 无线串行端口传输模块(1对1) 的S0端
三色LED(共阴)
EGAD-005是一款简单好用的手挥控制板,它透过发出红外线来侦测手部的上下左右以及远近等动作,因此这款手挥模块比较适合于室内使用,尤其在黑暗环境中更能发挥其手挥辨识的效果哦,因此相当适合用于室内灯光的控制。
MUART0-S-1-1是与凌阳创新开发的RF UART模块,简简单单就能让我们将手挥控制接口无线化。
接线安装
灯具被控端
一般LED灯泡或灯具其使用的电压为12V或24V,而Arduino透过PWM pin最大的输出仅为5V,因此需要使用TIP 120晶体管来放大电流。(TIP120最大可接至60V/5A)。如下图,左侧原本直接用pwm pin来控制小电流LED,若改用大电流时须改接如右图。(注意这不能用于交流只能用在直流电哦)
材料
Arduino开发板(UNO、Nano…皆可)
MUART0-S-1-1 无线串行端口传输模块(1对1) 的S1端
TIP120 三极管
12V LED灯泡
升压模块 5V to 12V
接线安装
接线示范
手势控制端的程序中,EGAD_005.get_distance()是读取前方手部的距离,这个距离不太长,回传的值会介于18~63之间,如果超过了侦测距离library就会认定手部已离开,此时虽然使用者还举着手以为正在距离侦测模式。因此,有个明显的灯号提醒用户是必要的,程序中使用红灯让表示目前正在距离侦测中(即调光的动作)。
当使用EGAD_005.get_distance()读取前方手部距离时,library会不断的传回目前的距离值,当使用者移动到某距离确定了亮度离开时,注意此时library所回传的距离不会固定在最终那个值,而会持续减少下去;由于使用者有在移动手部调整距离时,回传的距离值会是多组介于18~63的相同数字数值排列,因此,在灯具控制端程序中,可用判断前后两次的距离值是否相同来解决手部离开时,回传的距离值会持续减少的问题。
您还可以改良一下灯具控制端,把输出到TIP 120的PWM讯号接到MUART0-S-1-1的Input port,并且读取手势控制端Output port,就可以判断远程的灯具在使用者手挥控制后,是否被正确的开启或关闭了。
3D打印外壳及组装
下载3D模型,打印
stand.stl:手挥座,lampcase.stl:灯具基座,lamptop.stl:灯具外罩
安装好就可以开始操作了。
作者:Cheng Hsun Tsen