手势识别器的设计
时间:07-01
来源:中电网
点击:
仿真器的外观和操作类似一部移动电话,但是并不代表某个特定的设备,而是提供对其所支持的API 的正确实现,每个命令按钮对应着相应的API函数。从图6中可以看到手机的导航键,我们更改了导航键的API函数,使其从鼠标单击触发的方式转换为串口动作代码控制。首先,我们编写了J2ME的串口接收程序,用于接收从单片机传来的单字节的type_action值;然后将type_action以参数的形式传给API,手机根据不同的type_action值执行不同的动作,包括菜单上下翻、进出二级子菜单、图片翻转等。手机动作与type_action的对应关系如表3。
根据type_action的值,在手机界面上产生相应的动作,手机界面发送不同的变化。演示终端的具体实现在下面的内容详细介绍。
硬件描述
系统硬件分为两个部分:CT-298和MM-2860。
CT-298是由MC9S08QG单片机构成、由USB总线电源供电的小型评估板。CT-298上安装有按钮开关、LED灯、蜂鸣器等作为 开发的输入输出器件。同时,USB-COM转换电路采用了FTDI公司制造的FT232R,容许单片机与电脑之间通过USB接口进行串行通信。BDM用于代码的烧写及系统的调试。
MM-2860是含有Freescale公司制造的MMA7260Q型三轴小量程加速度传感器的模块,它可以直接安装在CT-298为其设计的插口上。MM-2860的电源是由CT-298上的MC9S08QG8单片机的PTB5端口来控制的,当PTB5端口为L时电源接通。此外,g-SELECT开关是选择传感器灵敏度的开关,使用时将MM-2860插入到CT-298的接口中即可。本系统采用加速度传感器的灵敏度选择为800 mV/g。
软件描述
单片机主程序的流程如图7所示。
系统上电后,首先要对单片机的硬件系统进行初始化、配置寄存器等操作,之后才可以进行数据采集,将加速度的值进行A/D转换,得到量化的值。图片菜单是二级菜单,如果没有接到演示系统传给单片机进入二级菜单的指令,则单片机一直在主程序运行,不断地采集A/D值、进行动作判定,并向演示系统发送type_action的指令。演示系统可根据接收到的type_action的类型采取相应的动作。如果单片机接收到进入二级菜单的命令,则进入图片菜单,同时也执行类似于主程序的动作判定程序,并不断更新A/D采样值,发送type_action,直到接收到退出二级菜单指令才退出。下面详细介绍一下各个功能模块的具体设置。
单片机硬件初始化
单片机系统主要的工作有:将加速度传感器的模拟数据进行A/D转换、向演示系统发送type_action的动作类型、接收演示系统发来的进出二级菜单的指令、设置采样值,除此之外还需要对系统时钟、外部设备(灯,buzzer)进行配置。根据单片机的主要工作内容选择单片机内部的功能设备,包括A/D转换器、模定时器、串行通信模块(SCI)、内部时钟源模块。
数据采集
系统设置的采样频率为200Hz,每秒钟分别对X、Y、Z 三轴采样200个数据,因此定义了三个大小为N的数组对数据进行缓存,他们是:
char x_data[N];
char y_data[N];
char z_data[N];
这里N取50,每0.25s存取一次,1s钟可以存取4次,保证采样率为200。函数void acce_meas(void) 负责将采样的数据分别放到这三个数组中,下面是程序的具体实现:
for(j=0;j<N;j++) //采集N个数据
{
for(i=0;i<3;i++)
{
if(i==0)
{
adc_go(0); //选择A/D信道0
x_data[j]= ADC_val_L; //X轴
}
else if(i==1 )
{
adc_go(6); //选择A/D信道6
y_data[j]= ADC_val_L; //Y轴
}
else
{
adc_go(7); //选择A/D信道7
z_data[j]= ADC_val_L; //Z轴
}
}
delay(); //延时函数,用来设定采样率
}
动作检测
动作检测主要是用获得的三组数据值x_data[N]、y_data[N]、z_data[N]来判定当前动作是系统设定动作中的哪一个,如果符合,则发送这个动作对应的预定义值给演示终端,否则发送NO_ACTION。type_dectction()用来实现动作检测,其中type_move为函数内部变量,用于记录动作代码。type_dectction()进行动作检测的流程如图8所示。
根据type_action的值,在手机界面上产生相应的动作,手机界面发送不同的变化。演示终端的具体实现在下面的内容详细介绍。
硬件描述
系统硬件分为两个部分:CT-298和MM-2860。
CT-298是由MC9S08QG单片机构成、由USB总线电源供电的小型评估板。CT-298上安装有按钮开关、LED灯、蜂鸣器等作为 开发的输入输出器件。同时,USB-COM转换电路采用了FTDI公司制造的FT232R,容许单片机与电脑之间通过USB接口进行串行通信。BDM用于代码的烧写及系统的调试。
MM-2860是含有Freescale公司制造的MMA7260Q型三轴小量程加速度传感器的模块,它可以直接安装在CT-298为其设计的插口上。MM-2860的电源是由CT-298上的MC9S08QG8单片机的PTB5端口来控制的,当PTB5端口为L时电源接通。此外,g-SELECT开关是选择传感器灵敏度的开关,使用时将MM-2860插入到CT-298的接口中即可。本系统采用加速度传感器的灵敏度选择为800 mV/g。
软件描述
单片机主程序的流程如图7所示。
系统上电后,首先要对单片机的硬件系统进行初始化、配置寄存器等操作,之后才可以进行数据采集,将加速度的值进行A/D转换,得到量化的值。图片菜单是二级菜单,如果没有接到演示系统传给单片机进入二级菜单的指令,则单片机一直在主程序运行,不断地采集A/D值、进行动作判定,并向演示系统发送type_action的指令。演示系统可根据接收到的type_action的类型采取相应的动作。如果单片机接收到进入二级菜单的命令,则进入图片菜单,同时也执行类似于主程序的动作判定程序,并不断更新A/D采样值,发送type_action,直到接收到退出二级菜单指令才退出。下面详细介绍一下各个功能模块的具体设置。
单片机硬件初始化
单片机系统主要的工作有:将加速度传感器的模拟数据进行A/D转换、向演示系统发送type_action的动作类型、接收演示系统发来的进出二级菜单的指令、设置采样值,除此之外还需要对系统时钟、外部设备(灯,buzzer)进行配置。根据单片机的主要工作内容选择单片机内部的功能设备,包括A/D转换器、模定时器、串行通信模块(SCI)、内部时钟源模块。
数据采集
系统设置的采样频率为200Hz,每秒钟分别对X、Y、Z 三轴采样200个数据,因此定义了三个大小为N的数组对数据进行缓存,他们是:
char x_data[N];
char y_data[N];
char z_data[N];
这里N取50,每0.25s存取一次,1s钟可以存取4次,保证采样率为200。函数void acce_meas(void) 负责将采样的数据分别放到这三个数组中,下面是程序的具体实现:
for(j=0;j<N;j++) //采集N个数据
{
for(i=0;i<3;i++)
{
if(i==0)
{
adc_go(0); //选择A/D信道0
x_data[j]= ADC_val_L; //X轴
}
else if(i==1 )
{
adc_go(6); //选择A/D信道6
y_data[j]= ADC_val_L; //Y轴
}
else
{
adc_go(7); //选择A/D信道7
z_data[j]= ADC_val_L; //Z轴
}
}
delay(); //延时函数,用来设定采样率
}
动作检测
动作检测主要是用获得的三组数据值x_data[N]、y_data[N]、z_data[N]来判定当前动作是系统设定动作中的哪一个,如果符合,则发送这个动作对应的预定义值给演示终端,否则发送NO_ACTION。type_dectction()用来实现动作检测,其中type_move为函数内部变量,用于记录动作代码。type_dectction()进行动作检测的流程如图8所示。
演示终端
J2ME平台开发环境配置
进行J2ME的开发需要从网络上下载免费的开发环境。运行Eclipse后进行最后的配置:Window->preferences->J2ME->Platform Component然后右键选择 Wireless Toolkil,再选择弹出菜单中的 Add Wireless Toolkil,选择刚刚安装的J2ME Toolkit的安装路径: C:WTK22,这样基本配置就完成了。
J2ME的WTK开发包是专门针对移动无线设备而设计的开发包,并提供了一个统一的平台。在WTK的框架下开发出来的java程序可以被众多的移动设备所支持,能够有效解决兼容性的问题。