基于体感算法的多功能蓝牙遥控器的设计
扫描二维码
随时随地手机看文章
随着三网融合[1]的推进,多功能电视机顶盒已经进入了千家万户。电视除了能够收看电视节目外,视频点播、浏览网页、多媒体游戏、视频通话等功能也已经或即将被引入现代电视(或电视机顶盒)中。因此,仅具有按键功能的红外线遥控器已经无法满足如此众多的功能需求。为此,本文在普通遥控器的按键功能上增加了体感模块和语音模块,引入了体感控制算法,并以蓝牙协议作为通信方式,设计了一款具有体感控制功能的多功能遥控器。
1 系统总体设计
系统总体设计框图如图1所示。系统以HL1010芯片为控制核心,数字加速度传感器、数字陀螺仪和地磁计的数据通过I2C总线传至HL1010的8051微控制器,经过滤波和体感算法的处理,转化为主机服务端可用的数据,由HL1010的蓝牙控制器传至主机服务端。8051微控制器对键盘模块进行键盘扫描,将键值通过蓝牙发送至主机服务端外,还可以进行简单的音频压缩和解码,并通过蓝牙控制器和语音模块,完成遥控器和主机服务端的语音传输。遥控器中加入了E2PROM,用以存储程序和初始化数据以及蓝牙通信所需的重连信息。电源管理模块用以管理各个模块之间的电源,达到节能和延长电池使用寿命的作用。此外,串口接口为HL1010烧录程序的接口。
2 硬件设计
2.1 HL1010接口及外围电路
HL1010为蓝牙控制芯片,其特点是:除了具有独立的蓝牙控制核心外,还集成了一颗8051微控制器核心;具有28个独立的GPIO,两路语音输入输出通道;集成了I2C和SPI控制器,便于外围设备的扩展;内部固化了键盘扫描固件,可以通过简单的寄存器读写完成键盘扫描。
利用HL1010的外围电路,其中,GPIO10~GPIO17作为键盘行扫描,GPIO30~GPI-O37作为键盘列扫描;GPIO20~GPIO27为电源管理GPIO,分别通过软件来控制加速度传感器、数字陀螺仪、地磁计、E2PROM、扬声器、振动电机等模块的开关,以达到节能的作用;Pin44、45、48、49、50为语音模块接口,pin23、24为I2C接口。其余引脚为芯片的供电和射频匹配电路。HL1010的外围电路可参考文献[2]。
2.2 传感器模块
表1为本设计中传感器的部分参数,三个传感器都通过I2C总线与主控芯片进行交互,电路设计较为简单。
3 软件设计
3.1 体感算法
体感功能中最常用的是空中鼠标,即通过遥控器在空中的挥舞来控制屏幕中鼠标的运动,同时通过遥控器按键实现鼠标按键的操作,从而使用户能在远距离的三维空间中获得鼠标的操作功能。为了实现空中鼠标的功能,本文采用陀螺仪和加速度传感器。通过对陀螺仪得到的角速度数据分析得出遥控器的运动状态,作为空中鼠标的主要数据;通过对加速度传感器提供的加速度(主要是判断重力加速度的方向)数据进行分析,得到遥控器所处的姿态,从而对陀螺仪的数据进行坐标转换。陀螺仪所得数据中与重力加速度平行的方向为Y轴,与重力加速度垂直的为X轴,使最终空中鼠标的Y轴与重力加速度的平行方向始终一致、X轴与重力加速度的垂直方向始终一致。其数学方法如下[3-4]:
遥控器的加速度为as,大地系加速度为ai,两者的转化关系为:
ai=asRis(1)
其中,Ris为遥控器相对于大地系的余弦阵,其表达式为:
经过坐标转换后,无论使用者如何将遥控器握在手中(正握,反握,竖立,倒立等),空中鼠标的运动仅与使用者手臂的运动方向有关,而与遥控器的运动方向无关。
算法的主要流程为:(1)对角速度进行采样,并进行数字滤波;(2)对加速度进行采样,并进行数字滤波;(3)通过加速度传感器数据对陀螺仪的坐标轴进行旋转;(4)计算鼠标两个轴的偏移量;(5)通过键盘扫描得到鼠标按键键值;(6)通过HID协议将键值发送给服务端。数据流程如图2所示。
3.2 状态机
软件通过状态机控制遥控器处于不同的工作状态。该状态机包括配对状态、重连状态、连接状态和休眠状态。遥控器状态示意图如图3所示。
(1)睡眠状态。系统开机首先进入睡眠模式,当按下任意按键(配对键除外)或者摇动遥控器时,遥控器被唤醒,如果遥控器中已经存有重连信息(最近一次与之配对的主机信息,包括BD Address和Pin Code)并且电量足够则进入重连状态,否则继续停留在睡眠状态。在睡眠状态中,遥控器将关闭8051微控制器、蓝牙控制器、加速度传感器、地磁传感器、E2PROM、语音模块以及所有LED,键盘和数字陀螺仪仍保持工作,但会降低采样频率,用作唤醒系统之用。
(2)重连状态。进入重连状态后,遥控器读取重连信息并尝试与最近一次配对的主机进行重连。如果重连成功则进入工作状态,如果多次重连失败则重新进入睡眠状态。在重连状态中,加速度传感器、地磁传感器、数字陀螺仪和语音模块将被关闭。
(3)配对状态。在任意状态下,如果用户按下配对键(工作模式下需要长按配对键),则遥控器清除重连信息并进入可发现状态。这时主机可以发现遥控器,并进行配对操作。在可发现状态中,加速度传感器、地磁传感器、数字陀螺仪和语音模块将被关闭。
(4)连接状态。进入工作状态后,如果用户长时间不使用遥控器,系统会增长sniff的间隔来降低功耗,最后会使系统进入睡眠状态。如果主机主动断开,连接系统则进入睡眠状态,如果连接意外断开,则系统会进入重连状态。在工作状态中,遥控器会根据不同的报文格式来选择所需的传感器和模块并控制是否给其供电,而且选择不同的sniff间隔以减少功耗。
通过样机的使用和测试,本设计方案中的遥控器解决了一般体感遥控器存在的主要问题[5]:(1)做到了高性能与低成本的平衡:HL1010中的8051微控制器不仅满足了遥控器的性能要求,与一般的蓝牙控制芯片比较,不需要在外部另加微控制器,大大降低了成本;(2)有良好的抗环境干扰:方案中选用的蓝牙通信技术具有高速、高带宽和高保真等特点,并且运用调频技术可有效地防干扰;(3)功耗低:遥控器通过电源管理模块、状态机控制和连接时的长短sniff状态切换,有效降低了功耗,睡眠状态时电流在100 ?滋A以下,空中鼠标状态下,短sniff时电流为5 mA左右,长sniff时电流为1 mA左右;(4)良好的用户体验:空中鼠标中加入了体感算法后,用户无论以什么姿势握住遥控器都可以轻松地控制鼠标,加入了防抖程序后空中鼠标可以过滤掉用户手部的细微抖动,增加了控制的精确度,在缩短sniff间隔后遥控器可以做到每1000帧/s以上的报告速率,可以完成某些高要求的体感游戏的控制。遥控器中的键盘功能和语音功能实现比较简单,并且与体感算法无关。