手势识别器终端的设计
手机、MP3播放器、硬盘播放器、数码相机、PDA等设备都是通过导航键对其进行控制的。目前比较流行的导航键控制方式有四维键、摇杆,这是最常见的两种导航键,此外还有一些手机上有很新颖的导航键设计,例如:LG-KG70的滚轴键、LG-KE608的转盘设计、索爱W830的触摸式、多普达D802的飞梭滚轮等等。这里,我们用加速度传感器设计一种看不见的导航键来代替四维键的功能,这种方案更能满足消费者的好奇心,满足消费者追逐时尚的需求。
手势识别的控制原理
本系统利用三轴加速度的值来判定对物体运动预定义的六种姿势。首先,分别对三个轴采样,每个轴各获得50个数据;然后,分别对每个轴上的数据进行处理来判定是否发生了预定义的动作。动作定义在下面的部分说明,这里仅用Y轴来说明判定的原理。
获得Y轴上的50个数据存放到数组y_data[N]中,将这50个数求和取平均值。若y_data[N]中数据最大值与最小值之差在一个设定的阈值之内,则认为物体在Y轴向上是没有动作的、静止的,此时更新y_init值为y_data[N]求得的平均值;否则,y_data[N]中数据最大值与最小值之差超出一个设定的阈值,则认为物体是运动的,y_init值不变,仍然为上一次静止状态时的值。
图1和图2是Y轴分别向左、向右摇动时采样得到的加速度抽样值y_data[N]。图中红线代表上一次静止时的采样值,蓝线代表运动时的采样值。图1为向左摇动时的值,可以明显看出加速度的值较静止时有明显的变化,向着增大的方向变。
从图1和图2中可以看出,两条黑线之间的数据很难断定是哪个动作产生的,因为两个动作都可能产生这样的值。所以,利用黑线之外的数据来判定是向右还是向左摇。因为对于这两个动作,黑线之外的数据有明显的差异,数据相差很多。对于图1这些数据大于150,图2中这些数据小于90。因此这些数据至少相差60,可以很容易地将向左、向右的两个动作区分开。
本系统就是根据这样的原理来实现的,首先分别设定向左、向右摇时的阈值和两个计数器;然后,将新采样得到的50个值存放在y_data[N]中,将每个值与静止时的值y_init比较,如果数据超出某个阈值,则在相应的计数器上累加,直到所有50个数全部比较完毕;最后,根据计数器值的大小来判定执行了某个动作。
同理,利用Z轴的采样值来判定向上、向下摇,利用X、Y两个轴来判定执行图片向左翻转还是向右翻转,这里略去。
系统描述
系统组成及功能
系统由三个部分组成:CT-298单片机控制部分、 MM-2860加速度传感器部分、演示终端,系统框图如图3所示。
CT-298单片机控制部分主要负责传感器数据的A/D变换、动作检测、与演示终端进行数据通信。MM-2860加速度传感器部分负责加速度值的测量并将其转换为电压值。演示终端负责处理从单片机传来的动作类型并执行相应的动作,同时向单片机返回进出二级菜单的指令。对于CT-298单片机系统更详细的设计将在下面的部分介绍,这里首先介绍一下本系统设计的动作姿势及代码,以及与演示系统交互的指令。
预定义的动作
系统设计了六种动作,他们分别是左摇、右摇、下摇、上摇、图片左转、图片右转。图4中的图形象地说明了其中的两个动作,其它的动作与此类似。
系统还为每个动作定义了相应的动作代码,见表1。
当单片机检测到某个动作时会将相应的值赋给变量type_action,之后通过SCI将type_action的值发送到演示终端。如果用户执行的动作不在这六个动作之中,则将NO_ACTION赋给type_action,表示演示终端不执行任何动作。
系统还定义了单片机与演示终端交互的指令,用于系统在主菜单和二级菜单之间的界面切换,指令从演示系统通过SCI传给单片机,单片机接收到之后进入或退出二级菜单,见表2。
这里仅定义了一个二级菜单,即图片菜单,系统还可以定义更多的二级菜单和三级菜单。此外,需要说明动作MOVE_TURN_LEFT、MOVE_TURN_RIGHT用于图片翻转,仅在图片菜单中可用,在主菜单不可用。动作下摇执行的是换下一幅图片,动作上摇执行的是退出图片菜单。
演示终端
本系统目标定位在便携式消费类电子产品上,因此在软件应用程序上必须选择具有广泛基础的应用平台。由于近年来J2ME在便携式终端中的应用非常广泛,因此本系统也采用了J2ME平台进行开发。通过比较,选择了J2ME的WTK开发包,它是专门针对移动无线设备而设计的开发包,并提供了一个统一的平台。在WTK的框架下开发出来的java程序可以被众多的移动设备所支持,所以能够有效解决兼容性的问题。
在WTK下我们利用默认的一个手机样机的仿真器DefaultColorPhone进行开发,DefaultColorPhone的样子如图6。
仿真器的外观