一种钢琴按键动作自适应识别系统及方法与流程

文档序号:12474521阅读:240来源:国知局
一种钢琴按键动作自适应识别系统及方法与流程

本发明涉及音乐教育辅助领域。



背景技术:

随着人民的生活水平的不断提高,钢琴教育在越来越多的家庭中流行起来,市场上出现很多的钢琴教育辅助产品。几乎所有的钢琴教育辅助产品都需要提示用户按键,以及检测按键动作产生的音符是否为正确的音符。

按键动作检测的方法有很多,如采用拾音器采集音频然后分析音频频率从而识别音符,识别单音比较准确,但在识别和弦音时准确率较低;采用机械开关式触碰按键,按键动作时带动开关动作从而检测按键动作,稳定可靠,但是需要调节开关高度及设备高度,使用极其不方便;也可采用光电式开关,使用光电开关检测按键和开关的距离,按键动作时光电开关输出电压变化,通过识别电压的变化检测按键的动作,但是每次设备放置到琴键上时,开关和琴键的距离都不一样,以及光照条件的不同使得光电开关输出电压的初始值每次都不一样,这样就很难设定开关电压的阈值,造成设备的误触发,使得音符识别的准确率很低。

它们的不足之处在于:由于外部影响,如工频干扰,大功率射频干扰等,反射光电管输出电压会叠加一定的噪声电压,这样在琴键按下或抬起的过程中会多次达到触发条件,导致误发多次抬起或按下的信号,影响正常使用。



技术实现要素:

本发明的目的是提供一种识别的准备率较高的钢琴按键动作自适应识别系统及方法。

本发明主要包括有按键检测单元和主控单元。

其中,在钢琴的88个琴键中,最低的3个音符和最高的1个音符一般很少触碰到,本发明包括七个检测板组成的84个按键检测单元,以及由蓝牙模块、供电模块组成的主控单元。按键检测单元与主控单元之间采用四根线连接,分别为电源VCC、电源GND、通信发送TX及通信接收RX。每个按键检测单元包括一个检测用MCU、5个黑键对射检测光电管和7个白键检测反射光电管,黑键检测用对射光电管的电压输出直接和检测用MCU的IO口相连,检测用MCU通过判断IO口的高低电平来判断按键按下或抬起的状态,白键检测用反射光电管输出接单片机ADC输入口,通过不断扫描光电管输出电压来判断按键状态,12个高灌电流IO口驱动LED用于提示按键位置。主控单位包括一个主控MCU、一个蓝牙通信模块和一个供电模块组成,供电模块用以降低电压,主控模块和蓝牙模块相连,用来接收上位机通过蓝牙发出的指示命令并转发送给检测板上的提示模块,主控模块和检测板相连,接收检测板发来的按键状态并通过蓝牙转交给上位机。

基于钢琴按键动作自适应识别系统,钢琴按键动作自适应识别方法具体步骤如下:

(1)申请数组BOT[7],用于存储白键在未按下时反射光电管输出的电压;申请数组TOP[7],用于保存白键在按下时反射光电管输出电压,申请数组VH[7],用于保存上升门限电压;申请数组VL[7],用于保存下降门限电压;

(2)初始外围设备,将系统时钟配置为内部RC时钟,频率16MHz;串口波特率配置为115200;所有LED驱动IO设备为灌电流输入,将所有反射光电管输入的IO口设置为模拟输入,内部ADC初始化;

(3)扫描一次ADC值,将数值赋给数组BOT[i],其中i的范围为0~6,表示第(i+1)个白键在未按下时反射光电管输出电压,同时将BOT[i]+6赋给TOP[i]作为初始值,将BOT[i]+4赋给VH[i]作为初始值,将BOT[i]+2赋给VH[i]作为初始值;

(4)将所有LED逐渐点亮并关闭,提示设备已经准备好,并且防止设备开机时IO状态不稳,LED被误点亮;

(5)设备进入工作状态,即循环扫描5个黑键的状态,以及7个白键的状态,扫描黑键时,检测5个光电管输出电平的高低,即MCU对应IO口的电平,即可确定黑键状态,如果检测到黑键被按下,就通过UART串口发出给主控MCU,再通过蓝牙上传到上位机;

(6)循环扫描7个白键的ADC值,存入本次扫描ADC数组,读取每个ADC值时都读取6次,然后做一次中值滤波,数值作为当次ADC值,如果本次ADC值大于按下状态的ADC极值BOT[i],就将本次ADC值赋给BOT[i],并且更新上升门限数组VH[i]=BOT[i]+(TOP[i]-BOT[i])*2/3;下降门限阈值VL[i]=BOT[i]+(TOP[i]-BOT[i])*1/3;这样每次按键按下时都会检查按键按下的深度是否达到更深,如果更深则更新识别参数,做到了越使用识别越准确;

(7)如果本次ADC数值仅大于上升门限VH[i],则通过UART发送按键按下信号,如果ADC值小于下降门限VL[i],则发送按键抬起信号。回到步骤5进行下轮扫描。

本发明与现有技术相比具有如下优点:采用滞回比较的方法,抬起按键和按下按键反射光电管输出电压差值的1/3和2/3作为比较值,有效的解决误触发问题,准确率较高,稳定可靠,使用方便。

附图说明

图1为本发明的钢琴按键动作检测系统的结构框图;

图2为本发明的钢琴按键动作自适应方法的流程图。

具体实施方式

在图1所示的本发明的示意简图中,本发明主要包括有按键检测单元和主控单元。

其中,在钢琴的88个琴键中,最低的3个音符和最高的1个音符一般很少触碰到,本发明包括七个检测板组成的84个按键检测单元,以及由蓝牙模块、供电模块组成的主控单元。按键检测单元与主控单元之间采用四根线连接,分别为电源VCC、电源GND、通信发送TX及通信接收RX。每个按键检测单元包括一个检测用MCU、5个黑键对射检测光电管和7个白键检测反射光电管,黑键检测用对射光电管的电压输出直接和检测用MCU的IO口相连,检测用MCU通过判断IO口的高低电平来判断按键按下或抬起的状态,白键检测用反射光电管输出接单片机ADC输入口,通过不断扫描光电管输出电压来判断按键状态,12个高灌电流IO口驱动LED用于提示按键位置。主控单位包括一个主控MCU、一个蓝牙通信模块和一个供电模块组成,供电模块用以降低电压,主控模块和蓝牙模块相连,用来接收上位机通过蓝牙发出的指示命令并转发送给检测板上的提示模块,主控模块和检测板相连,接收检测板发来的按键状态并通过蓝牙转交给上位机。

在图2所示的本发明的示意简图中,基于钢琴按键动作自适应识别系统,钢琴按键动作自适应识别方法具体步骤如下:

1、申请数组BOT[7],用于存储白键在未按下时反射光电管输出的电压;申请数组TOP[7],用于保存白键在按下时反射光电管输出电压,申请数组VH[7],用于保存上升门限电压;申请数组VL[7],用于保存下降门限电压;

2、初始外围设备,将系统时钟配置为内部RC时钟,频率16MHz;串口波特率配置为115200;所有LED驱动IO设备为灌电流输入,将所有反射光电管输入的IO口设置为模拟输入,内部ADC初始化;

步骤3,扫描一次ADC值,将数值赋给数组BOT[i],其中i的范围为0~6,表示第(i+1)个白键在未按下时反射光电管输出电压,同时将BOT[i]+6赋给TOP[i]作为初始值,将BOT[i]+4赋给VH[i]作为初始值,将BOT[i]+2赋给VH[i]作为初始值;

4、将所有LED逐渐点亮并关闭,提示设备已经准备好,并且防止设备开机时IO状态不稳,LED被误点亮;

5、设备进入工作状态,即循环扫描5个黑键的状态,以及7个白键的状态,扫描黑键时,检测5个光电管输出电平的高低,即MCU对应IO口的电平,即可确定黑键状态,如果检测到黑键被按下,就通过UART串口发出给主控MCU,再通过蓝牙上传到上位机;

步骤6,循环扫描7个白键的ADC值,存入本次扫描ADC数组,读取每个ADC值时都读取6次,然后做一次中值滤波,数值作为当次ADC值,如果本次ADC值大于按下状态的ADC极值BOT[i],就将本次ADC值赋给BOT[i],并且更新上升门限数组VH[i]=BOT[i]+(TOP[i]-BOT[i])*2/3;下降门限阈值VL[i]=BOT[i]+(TOP[i]-BOT[i])*1/3;这样每次按键按下时都会检查按键按下的深度是否达到更深,如果更深则更新识别参数,做到了越使用识别越准确;

步骤7,如果本次ADC数值仅大于上升门限VH[i],则通过UART发送按键按下信号,如果ADC值小于下降门限VL[i],则发送按键抬起信号。回到步骤5进行下轮扫描。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1