获得3500万美元A轮融资后,迪普科技如果不做“中间平台”怎么办?
06-17
简介 手机、MP3播放器、硬盘播放器、数码相机、PDA等设备都是通过导航键控制的。
目前比较流行的导航键控制方式有四维键和摇杆,这是最常见的两种导航键。
另外,在一些手机上也有非常新颖的导航键设计,比如:LG-KG70的滚轮键、LG-KE的转盘设计、索尼爱立信W的触摸屏、多普达D的飞梭轮等。
这里我们使用一个加速键传感器设计了隐形导航键来取代四维按键的功能。
这一解决方案能够更好地满足消费者的好奇心,满足他们追逐时尚的需求。
手势识别控制原理 本系统利用三轴加速度的值来确定物体运动的六种预定义姿势。
首先,三个轴分别采样,每个轴得到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,这些数据大于90,对于图2,这些数据小于90。
因此,这些数据至少相差60%,并且可以很容易地区分左右两个动作。
本系统就是基于这个原理来实现的。
首先,分别设置左右摇动时的阈值和两个计数器;然后,将50个新采样的值存储在y_data[N]中,将每个值与静止时的值y_init进行比较。
如果数据超过一定阈值,则累加到相应的计数器上,直到比较完所有50个数字;最后根据计数器值的大小判断是否执行了动作。
。
同理,利用Z轴的采样值来判断是上摇还是下摇,利用X轴和Y轴来判断图像是向左还是向右翻转,这里不再赘述。
系统描述 系统组成及功能 系统由三部分组成:CT-单片机控制部分、MM-加速度传感器部分、演示终端。
系统框图如图3所示。
CT-MCU控制部分主要负责传感器数据的A/D转换、运动检测以及与演示终端的数据通信。
MM-加速度传感器部分负责测量加速度值并将其转换为电压值。
演示终端负责处理单片机传来的动作类型并执行相应的动作,同时向单片机返回进入和退出二级菜单的指令。
下一节将介绍CT-MCU系统的更详细设计。
这里首先介绍一下本系统设计的动作姿势和代码,以及与演示系统交互的说明。
预定义动作 系统设计了六个动作,分别是左摇、右摇、下摇、上摇、左转图片、右转图片。
图 4 中的图直观地说明了其中两个操作,其他操作类似。
系统还为每个动作定义了对应的动作代码,见表1。
当单片机检测到一个动作时,会将相应的值赋给变量type_action,然后将type_action的值发送到演示终端通过SCI。
如果用户执行的动作不属于这六个动作,则将NO_ACTION分配给type_action,表示演示终端不执行任何动作。
系统还定义了单片机与演示终端交互的指令,用于系统在主菜单和二级菜单之间进行界面切换。
演示系统通过SCI向单片机发送指令,单片机收到指令后进入或退出二级菜单。
菜单,见表2。
这里只定义了一个二级菜单,即图片菜单。
系统还可以定义更多的二级菜单和三级菜单。
另外需要说明的是,MOVE_TURN_LEFT 和 MOVE_TURN_RIGHT 动作用于图片翻转,仅在图片菜单中可用,在主菜单中不可用。
向下摇动为切换到下一张图片,向上摇动为退出图片菜单。
演示终端 该系统面向便携式消费电子产品,因此软件应用必须选择具有广泛基础的应用平台。
由于近年来J2ME在便携式终端中得到广泛应用,本系统也采用J2ME平台进行开发。
通过比较,我们选择了J2ME的WTK开发包,它是专门为移动无线设备设计的开发包,提供统一的平台。
在WTK框架下开发的Java程序可以被许多移动设备支持,因此可以有效解决兼容性问题。
在WTK下,我们使用手机原型的默认模拟器DefaultColorPhone进行开发。
DefaultColorPhone 看起来如图 6 所示。
该模拟器的外观和操作类似于手机,但它并不代表特定设备,而是提供其支持的 API 的正确实现。
每个命令按钮都对应相应的API函数。
如图6所示,手机的导航键发生了变化。
我们更改了导航键的API函数,将其从鼠标点击触发转换为串口动作代码控制。
首先,我们编写了一个J2ME串口接收程序,用于接收单片机传过来的单字节type_action值;然后将type_action以参数的形式传递给API,手机根据不同的type_action值执行不同的动作,包括菜单上下滚动、进入和退出二级子菜单、翻转图片等。
手机之间的对应关系actions和type_action如表3所示。
根据type_action的值,在手机界面生成对应的action,手机界面发送不同的变化。
下面详细介绍演示终端的具体实现。
硬件说明 系统硬件分为两部分:CT-和MM-。
CT-是一款由MC9S08QG微控制器组成、由USB总线电源供电的小型评估板。
CT-配备有按钮开关、LED灯、蜂鸣器等作为开发的输入输出设备。
同时USB-COM转换电路采用FTDI公司生产的FTR,允许单片机与计算机通过USB接口进行串行通信。
BDM用于代码编程和系统调试。
MM-是包含飞思卡尔制造的MMAQ三轴小量程加速度传感器的模块。
可直接安装在CT-专用插座上。
MM-的供电由CT-上MC9S08QG8单片机的PTB5端口控制。
当PTB5端口为L时,电源打开。
另外,g-SELECT开关是用于选择传感器灵敏度的开关。
使用时只需将MM-插入CT-接口即可。
本系统中使用的加速度传感器的灵敏度为mV/g。
软件说明 单片机主程序流程如图7所示。
系统上电后,首先要对单片机的硬件系统进行初始化,配置寄存器等操作,然后可进行数据采集,并将加速度值进行A/D转换,得到量化值。
图片菜单是二级菜单。
如果演示系统没有向单片机发出进入二级菜单的指令,单片机将一直运行在主程序中,不断采集A/D值,进行动作判断,并向演示系统发送type_action。
操作说明。
演示系统可以根据收到的type_action的类型采取相应的动作。
如果单片机接收到进入二级菜单的命令,则进入图片菜单,同时还执行与主程序类似的动作判断程序,不断更新A/D采样值,发送type_action,直到接收到才退出退出二级菜单的指令。
。

下面详细介绍各个功能模块的具体设置。
MCU硬件初始化 MCU系统的主要任务是:对加速度传感器的模拟数据进行A/D转换,将type_action的动作类型发送给演示系统,接收进入和退出次级的指令从演示系统菜单中,设置采样值。
另外,还需要配置系统时钟和外部设备(灯、蜂鸣器)。
根据单片机的主要工作内容选择单片机内部的功能设备,包括A/D转换器、模拟定时器、串行通信模块(SCI)、内部时钟源模块等。
数据采集 系统设定的采样频率为Hz,每秒在X、Y、Z轴上采样数据。
因此,定义了三个大小为N的数组来缓存数据。
分别是: char x_data[N]; char y_data[N]; char z_data[N]; 这里N为50,每0.25s访问一次,可以访问4次1秒内。
保证采样率。
函数void acce_meas(void)负责将采样数据分别放入这三个数组中。
下面是程序的具体实现: for(j=0;j { for(i=0; ipreferences->J2ME->Platform Component),然后右键选择Wireless Toolkil ,然后在弹出的菜单中选择Add Wireless Toolkil,选择刚刚安装的J2ME Toolkit的安装路径:C:WTK22,这样 J2ME开发包的基本配置就完成了。
专为移动无线设备设计并提供统一的平台。
在WTK框架下开发的Java程序可以得到很多移动设备的支持,可以有效解决兼容性问题。
软件应用 程序分为三个部分:主流程、串口监控模块和定制用户界面。
它们分别派生自不同的J2ME类库。
三部分通过消息机制互连,共同构成整个程序执行周期。
各模块具体实现的功能请参考下一节。
软件应用的组织结构 本软件应用是在WTK手机模拟器下设计的,分为两个包:Base和display。
基础包包含两个java文件,MainRoutine.java和RSPort.java; display包中有很多文件,主要实现UI和基本按键响应。
下面介绍软件部分的实现方法: ·MainRoutine类 MainRoutine是程序的入口类,集成了程序中的所有对象。
MainRoutine派生自MIDlet类,并重载MIDlet中的startApp、pauseApp、destroyApp等方法,并在构造函数中添加exitCommand命令,实现手机的关机功能。
可以看出MainRoutine实现了程序的进入和退出,同时也标志着程序的基本框架,为具体的功能应用打下了坚实的基础。
·vCanvas 类 vCanvas 继承了Canvas 类,并添加了externalMsg 方法。
之所以在其中添加externalMsg方法,是因为它的超类Canvas无法动态响应按键,而我们对Canvas的要求是能够通过从串口导入的数据(或按键)中获取到的keyCode来采取相应的动作端口,如图所示。
文本的翻转、滚动等。
因此,我们可以通过vCanvas派生出一系列的子类来实现我们的具体需求,为以后的开发提供方便。
·DisplayItem类 DisplayItem是一个基本类,提供通用的字符串数据组合。
该类的构造函数需要输入三个字符串参数:shortText、longText和extra。
这样保证了每个DisplayItem可以返回三种不同长度的文本信息,并且可以在不同的场合使用。
其中,shortText用于UI中的标题显示,longText是Item的主要内容,extra是Item的附加信息。
本系统中会实例化DisplayItem类来描述菜单和子功能的内容。
它是一个广泛使用的基础类。
·ImageCanvas类 ImageCanvas同样继承自基础类vCanvas。
它的主要功能是实现图像的浏览、旋转、镜像等基本操作。
考虑到使用手机浏览和拍照的多方向性,如果能够通过加速度传感器自动修正图片的方向,使其自动符合我们想要的方向,那么我们会省去很多不必要的麻烦麻烦。
所以我们在图片浏览功能模块中添加了向左或向右旋转90°的功能。
这样,用户就会惊喜地发现,无论手机如何放置,显示的画面始终保持与地面垂直。
·ListCanvas类 ListCanvas提供主屏的显示能力,并将用户操作导出给内部聚合成员。
具有特定功能的项目将包含在ListCanvas中。
每个 Item 都有一个显示在屏幕上的 ShortItem、一个显示在详细信息屏幕上的 LongText 以及一个不显示的 ExtraText。
当然,我们也可以获得它的信息。
在ListCanvas中,我们可以使用“右键”来显示Item的详细信息,也可以使用SELECT键来标记每个Item。
·ItemListCanvas类: ItemListCanvas同样继承了vCanvas类,实现了多项文本浏览的功能。
构造函数方法的输入是 Display、Displayable、Font、Title 和 ItemVector。
将多个 String 构造为 Vector 并将它们传递给 ItemListCanvas 后,此类可以提供由多个文本项实现的用户界面。
通过实例化该类获得本系统的“关于本系统”子功能。
结论 本系统采用飞思卡尔的微控制器MC9S08QG和加速度传感器MMAQ实现便携式手持设备的手势控制,并使用开放的J2ME平台实现终端应用。
系统完整、实用性强、成本低。
不仅满足了用户的基本操作需求,还增加了移动设备操作的乐趣和灵活性。
同时,加速度传感器MMAQ较小的尺寸和独特的省电模式使其在移动设备应用中具有巨大的优势。
可以预见,类似的手势识别功能将在未来的手持设备系统中得到广泛应用,因此具有广阔的市场应用前景。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-18
06-18
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现