返回列表 发新帖我要提问本帖赏金: 80.00元(功能说明)

[软件] 基于RA4M2-SENSOR 开发板的数字识读及实现

[复制链接]
2214|6
jinglixixi 发表于 2025-9-15 22:06 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2025-9-15 22:34 编辑

申请原创
@21小跑堂

在以往的人机交互中,多是集中在按键和显示屏的组合上。后来随着触摸技术的发展,各种触摸键及触摸屏也加入到交互形式中,使得操作起来更舒适和更便捷。
如今,伴随着AI技术的成熟及应用,已经可以通过语音指令来操控对象和目标。与之配套的则是将数字识读技术也纳入到人机交互中。
相较于传统的以视觉的方式来传递信息,通过语音来传递信息会更具主动性。
这里就介绍一种在RA4M2-SENSOR 开发板上实现数字识读的方法,其实现的思路就是在给定数据的情况下,通过相应的功能函数来自动提取各数据位的值及权重,进而通过串口向语音模块发送指令来实现数据到语音的转换。期间,还可以有效处理零值读音问题。
为了确保准确地播报数据,需事先将录制好的语音片段存入语音模块读取的TF卡中。并依序对语音片段加以相应的命名,以确保读取的正确性。
在硬件构成方面,它由RA4M2-SENSOR 开发板和语音模块所构成。
在软件实现方面,它是通过RASC来配置所用引脚。
为了测试的方便,是使用UART9来进行调试,其电路如图1所示。
A1.jpg
图1 转换电路

由图可知,该串口所用引脚为P110和P109,为此在RASC中需按图2所示来启用它。
A2.jpg
图2 启用UART9


随后,在栈中按图3所示进行添加,并按图4所示来设置其参数。

图3 添加UART9

A4.jpg
图4 参数设置


以串口进行功能测试的主程序为:
  1. void hal_entry(void)
  2. {
  3.         uint8_t p,f,w,z;
  4.         uint16_t k,u;
  5.         err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
  6.         assert(FSP_SUCCESS == err);        
  7.         err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3);
  8.         assert(FSP_SUCCESS == err);
  9.         printf("RA4M2-SENSOR test : \r\n");
  10.         k=1024;
  11.         printf("k= %d\r\n",k);
  12.         if(k>10)
  13.         {
  14.                 u=10;
  15.                 w=1;                        
  16.         }
  17.         if(k>100)
  18.         {
  19.                 u=100;
  20.                 w=2;                        
  21.         }
  22.         if(k>1000)
  23.         {
  24.                 u=1000;
  25.                 w=3;                        
  26.         }
  27.                         
  28.        while(w>0)
  29.        {
  30.                 p=k/u;
  31.                 if(p>0)
  32.                 {
  33.                         printf("p= %d\r\n",p);
  34.                         if(w==3)
  35.                         {
  36.                                   printf("k \r\n");
  37.                         }
  38.                         if(w==2)
  39.                         {
  40.                                   printf("b \r\n");
  41.                         }                                                                 
  42.                         if(w==1)
  43.                         {
  44.                                   printf("s \r\n");
  45.                         }
  46.                         f=1;
  47.                  }
  48.                  else
  49.                  {   
  50.                                 if(f==1)
  51.                                 {
  52.                                          printf("0 \r\n");
  53.                                 }
  54.                                 f=0;
  55.                  }
  56.                  k=k%u;                                         
  57.                  if(w>0)
  58.                  {
  59.                                 w=w-1;
  60.                                 u=u/10;
  61.                  }                                                
  62.         }                 
  63.         printf("p= %d\r\n",k%10);
  64.         while(1);
  65. }

经程序的编译和下载,其测试结果如图5所示,说明功能正确。
A5.jpg
图5 测试结果

由于串口9所用的引脚并为引出 ,故只好改用串口0来控制语音模块,其使用的引脚为P100和P101。为此,需要使用RASC重新加以配置,并按语音模块的要求将串口通信的波特率设置位9600 bps。

发送控制指令实现数据识读的主程序为:
  1. void hal_entry(void)
  2. {
  3.            uint8_t p,f,w,z;
  4.            uint16_t k,u;
  5.            err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
  6.            assert(FSP_SUCCESS == err);        
  7.            err = R_SCI_UART_Read(&g_uart0_ctrl, uart_rx_buffer, 3);
  8.            assert(FSP_SUCCESS == err);
  9.            k=1024;
  10.            if(k>10)
  11.            {
  12.                         u=10;
  13.                         w=1;                        
  14.            }
  15.            if(k>100)
  16.            {
  17.                         u=100;
  18.                         w=2;                        
  19.            }
  20.            if(k>1000)
  21.            {
  22.                         u=1000;
  23.                         w=3;                        
  24.            }                        
  25.            while(w>0)
  26.            {
  27.                    p=k/u;
  28.                    if(p>0)
  29.                    {
  30.                                  playn(p);
  31.                                  _write(cmd3,10);
  32.                                  R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  33.                                  if(w==3)
  34.                                  {
  35.                                                 playn(12);               
  36.                                  }
  37.                                  if(w==2)
  38.                                  {
  39.                                                 playn(11);
  40.                                  }                                                                 
  41.                                  if(w==1)
  42.                                  {
  43.                                                 playn(10);
  44.                                  }
  45.                                   _write(cmd3,10);                                                         
  46.                                   f=1;
  47.                                   R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  48.                           }
  49.                           else
  50.                           {   
  51.                                         if(f==1)
  52.                                         {
  53.                                                         playn(14);
  54.                                                         _write(cmd3,10);
  55.                                                         R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  56.                                         }
  57.                                         f=0;
  58.                           }                                         
  59.                           k=k%u;                                         
  60.                           if(w>0)
  61.                           {
  62.                                         w=w-1;
  63.                                         u=u/10;
  64.                          }                                                
  65.                 }                        
  66.                 playn(k%10);
  67.                 _write(cmd3,10);
  68.                 R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  69.                 playn(13);
  70.                 _write(cmd3,10);
  71.                 R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  72.                 while(1);
  73. }

经程序的编译和下载,其测试结果如图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

3349968c8238fbf6f9.png
图7 器件连接

在连接语音模块的情况下,其测试效果视频所示。
至此,就实现数据识读功能,如果与传感器相配合,则可以将检测到的环境状态自主的播报出来。后续还可以将它与语音指令控制结合起来以实现家用电器的管控,从而进一步丰富人机交互的方式。


演示视频:


打赏榜单

21小跑堂 打赏了 80.00 元 2025-09-25
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论

基于RA4M2-SENSOR 开发板实现数字识读测试,测试结果较好,识别效果较佳  发表于 2025-9-25 16:36
cooldog123pp 发表于 2025-9-27 10:42 | 显示全部楼层
RA是瑞萨家的MCU吧,以前是用过他们家的后来越来越少了,感觉车规的产品还是用的挺多的。
 楼主| jinglixixi 发表于 2025-9-27 15:01 | 显示全部楼层
cooldog123pp 发表于 2025-9-27 10:42
RA是瑞萨家的MCU吧,以前是用过他们家的后来越来越少了,感觉车规的产品还是用的挺多的。 ...

新品总还是会有一些新东西值得期待的吧
dffzh 发表于 2025-9-28 09:16 | 显示全部楼层
瑞萨在车规级芯片应用领域所占份额,现在怎么样?
 楼主| jinglixixi 发表于 2025-9-28 16:54 | 显示全部楼层
本帖最后由 jinglixixi 于 2025-9-28 21:43 编辑
dffzh 发表于 2025-9-28 09:16
瑞萨在车规级芯片应用领域所占份额,现在怎么样?

对这个没啥研究,个人对它是关注其产品的性能和易使用程度,若转化为产品还要关注其价格。

评论

好的呢。  发表于 2025-9-28 17:07
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部