本帖最后由 jinglixixi 于 2025-9-15 22:34 编辑
申请原创
@21小跑堂
在以往的人机交互中,多是集中在按键和显示屏的组合上。后来随着触摸技术的发展,各种触摸键及触摸屏也加入到交互形式中,使得操作起来更舒适和更便捷。 如今,伴随着AI技术的成熟及应用,已经可以通过语音指令来操控对象和目标。与之配套的则是将数字识读技术也纳入到人机交互中。 相较于传统的以视觉的方式来传递信息,通过语音来传递信息会更具主动性。 这里就介绍一种在RA4M2-SENSOR 开发板上实现数字识读的方法,其实现的思路就是在给定数据的情况下,通过相应的功能函数来自动提取各数据位的值及权重,进而通过串口向语音模块发送指令来实现数据到语音的转换。期间,还可以有效处理零值读音问题。 为了确保准确地播报数据,需事先将录制好的语音片段存入语音模块读取的TF卡中。并依序对语音片段加以相应的命名,以确保读取的正确性。 在硬件构成方面,它由RA4M2-SENSOR 开发板和语音模块所构成。 在软件实现方面,它是通过RASC来配置所用引脚。 为了测试的方便,是使用UART9来进行调试,其电路如图1所示。 图1 转换电路
由图可知,该串口所用引脚为P110和P109,为此在RASC中需按图2所示来启用它。 图2 启用UART9
随后,在栈中按图3所示进行添加,并按图4所示来设置其参数。 图3 添加UART9
图4 参数设置
以串口进行功能测试的主程序为: - void hal_entry(void)
- {
- uint8_t p,f,w,z;
- uint16_t k,u;
- err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
- assert(FSP_SUCCESS == err);
- err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3);
- assert(FSP_SUCCESS == err);
- printf("RA4M2-SENSOR test : \r\n");
- k=1024;
- printf("k= %d\r\n",k);
- if(k>10)
- {
- u=10;
- w=1;
- }
- if(k>100)
- {
- u=100;
- w=2;
- }
- if(k>1000)
- {
- u=1000;
- w=3;
- }
-
- while(w>0)
- {
- p=k/u;
- if(p>0)
- {
- printf("p= %d\r\n",p);
- if(w==3)
- {
- printf("k \r\n");
- }
- if(w==2)
- {
- printf("b \r\n");
- }
- if(w==1)
- {
- printf("s \r\n");
- }
- f=1;
- }
- else
- {
- if(f==1)
- {
- printf("0 \r\n");
- }
- f=0;
- }
- k=k%u;
- if(w>0)
- {
- w=w-1;
- u=u/10;
- }
- }
- printf("p= %d\r\n",k%10);
- while(1);
- }
经程序的编译和下载,其测试结果如图5所示,说明功能正确。
图5 测试结果
由于串口9所用的引脚并为引出 ,故只好改用串口0来控制语音模块,其使用的引脚为P100和P101。为此,需要使用RASC重新加以配置,并按语音模块的要求将串口通信的波特率设置位9600 bps。
发送控制指令实现数据识读的主程序为: - void hal_entry(void)
- {
- uint8_t p,f,w,z;
- uint16_t k,u;
- err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
- assert(FSP_SUCCESS == err);
- err = R_SCI_UART_Read(&g_uart0_ctrl, uart_rx_buffer, 3);
- assert(FSP_SUCCESS == err);
- k=1024;
- if(k>10)
- {
- u=10;
- w=1;
- }
- if(k>100)
- {
- u=100;
- w=2;
- }
- if(k>1000)
- {
- u=1000;
- w=3;
- }
- while(w>0)
- {
- p=k/u;
- if(p>0)
- {
- playn(p);
- _write(cmd3,10);
- R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
- if(w==3)
- {
- playn(12);
- }
- if(w==2)
- {
- playn(11);
- }
- if(w==1)
- {
- playn(10);
- }
- _write(cmd3,10);
- f=1;
- R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
- }
- else
- {
- if(f==1)
- {
- playn(14);
- _write(cmd3,10);
- R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
- }
- f=0;
- }
- k=k%u;
- if(w>0)
- {
- w=w-1;
- u=u/10;
- }
- }
- playn(k%10);
- _write(cmd3,10);
- R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
- playn(13);
- _write(cmd3,10);
- R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
- while(1);
- }
经程序的编译和下载,其测试结果如图6所示,说明功能正确。 图6 指令输出测试
输出的指令作用为: 7E FF 06 03 00 00 01 FE F7 EF (一) 7E FF 06 03 00 00 0D FE EB EF (千) 7E FF 06 03 00 00 0A FE EE EF (零) 7E FF 06 03 00 00 02 FE F6 EF (二) 7E FF 06 03 00 00 0B FE ED EF (十) 7E FF 06 03 00 00 04 FE F4 EF (四) 7E FF 06 03 00 00 0E FE EA EF (MPa)
图7 器件连接
在连接语音模块的情况下,其测试效果视频所示。 至此,就实现数据识读功能,如果与传感器相配合,则可以将检测到的环境状态自主的播报出来。后续还可以将它与语音指令控制结合起来以实现家用电器的管控,从而进一步丰富人机交互的方式。
演示视频:
|