找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2401|回复: 5
收起左侧

STM32单片机语音识别分类垃圾桶代码

[复制链接]
ID:778907 发表于 2022-7-31 11:32 | 显示全部楼层 |阅读模式
有干、湿、有害、可回收四个分类
电路原理图如下:
51hei.png

单片机源程序如下:
  1. #include "sys.h"

  2. u8 Target1=0;//舵机控制时间
  3. u8 Target2=0;
  4. u8 Target3=0;
  5. u8 Target4=0;

  6. u8 Open_Time=0;//开垃圾桶单位时间
  7. u8 WakeUp_Flag=0;//唤醒标志位
  8. int main(void)
  9. {       
  10.         SystemInit();        //参数为向量表的偏移地址
  11.   delay_init();

  12.         gpio_Init();
  13.         MP3_Init();//初始化MP3语音播报模块
  14.         Voice_Init(); //初始化语音识别模块
  15.         SysTick_Init();//初始化多功能定时器
  16.         PWM_Init();//初始化PWM

  17.   YHGUI_Config();
  18.   YHGUI_DispString(0,0,"厨余垃圾",16,1);
  19.         YHGUI_DispString(0,16,"其它垃圾",16,1);               
  20.   YHGUI_DispString(0,32,"有害垃圾",16,1);
  21.   YHGUI_DispString(0,48,"可回收物",16,1);       
  22.          
  23.         while(1)
  24.         {
  25.                 if((Infrared1 == 0)||(Infrared2 == 0)||(Infrared3 == 0)||(Infrared4 == 0))
  26.                 {
  27.                         delay_ms(1);
  28.                         if((Infrared1 == 0)||(Infrared2 == 0)||(Infrared3 == 0)||(Infrared4 == 0))
  29.                         {
  30.                                         if(Infrared1 == 0)
  31.                                         {
  32.                                                 BEEP = 1;
  33.                                                 YHGUI_DispString(106,0,"满",16,1);
  34.                                         }
  35.                                         else
  36.                                         {
  37.                                                 YHGUI_DispString(106,0,"  ",16,1);                       
  38.                                         }
  39.                                        
  40.                                         if(Infrared2 == 0)
  41.                                         {
  42.                                                 BEEP = 1;
  43.                                                 YHGUI_DispString(106,16,"满",16,1);                       
  44.                                         }
  45.                                         else
  46.                                         {
  47.                                                 YHGUI_DispString(106,16,"  ",16,1);
  48.                                         }
  49.                                        
  50.                                         if(Infrared3 == 0)
  51.                                         {
  52.                                                 BEEP = 1;
  53.                                                 YHGUI_DispString(106,32,"满",16,1);                               
  54.                                         }
  55.                                         else
  56.                                         {
  57.                                                 YHGUI_DispString(106,32,"  ",16,1);                       
  58.                                         }
  59.                                        
  60.                                         if(Infrared4 == 0)
  61.                                         {
  62.                                                 BEEP = 1;
  63.                                                 YHGUI_DispString(106,48,"满",16,1);                                       
  64.                                         }
  65.                                         else
  66.                                         {
  67.                                                 YHGUI_DispString(106,48,"  ",16,1);                                               
  68.                                         }
  69.                         }               
  70.                 }       
  71.                 else
  72.                 {
  73.                         BEEP = 0;       
  74.                        
  75.                 }
  76.                 if(Voice_RX_STA == 1)//收到语音指令
  77.                 {
  78.                         if(MP3_State() == 0)
  79.                         {
  80.                                 if(Voice_RX_CMD==49 || Voice_RX_CMD==50)//唤醒
  81.                                 {
  82.                                         WakeUp_Flag = 1;//唤醒词标志位置位
  83.                                         MP3_Star(5);
  84.                                 }
  85.                                 else if(WakeUp_Flag == 1)
  86.                                 {
  87.                                        
  88.                                         if(Voice_RX_CMD%4 == 1)//厨余垃圾
  89.                                         {
  90.                                                 MP3_Star(1);
  91.                                                 Target1 = 1;
  92.                                         }
  93.                                         else if(Voice_RX_CMD%4 == 2)//其他垃圾
  94.                                         {
  95.                                                 MP3_Star(2);
  96.                                                 Target2 = 1;
  97.                                         }
  98.                                         else if(Voice_RX_CMD%4 == 3)//有害垃圾
  99.                                         {
  100.                                                 MP3_Star(3);
  101.                                                 Target3 = 1;
  102.                                         }
  103.                                         else//可回收物
  104.                                         {
  105.                                                 MP3_Star(4);
  106.                                                 Target4 = 1;
  107.                                         }
  108.                                 }
  109.                         }               
  110.                         Voice_RX_STA = 0;
  111.                 }
  112.        
  113.                 if(SysTick_JumpEdge(&Open_Time, &SysTickBit.Time1s)==1)//开垃圾桶单位时间到
  114.                 {
  115.                   if(Target1 != 0)//厨余垃圾桶打开
  116.                         {         

  117.                                 YHGUI_DispString(0,0,"厨余垃圾 开启",16,1);
  118.                                        
  119.                           Target1++;
  120.                                 TIM_SetCompare1(TIM4,1000);//打开
  121.                                 if(Target1>6)
  122.                                 {
  123.                                         TIM_SetCompare1(TIM4,400);//时间到关闭
  124.                                   Target1 = 0;
  125.                                         YHGUI_DispString(0,0,"厨余垃圾     ",16,1);
  126.                                 }                                       
  127.                         }
  128.                         if(Target2 != 0)//其他垃圾桶打开
  129.                         {

  130.                                 YHGUI_DispString(0,16,"其它垃圾 开启",16,1);               
  131.                        
  132.                                 Target2++;
  133.                                 TIM_SetCompare2(TIM4,1000);//打开
  134.                                 if(Target2>6)
  135.                                 {
  136.                                         TIM_SetCompare2(TIM4,400);//时间到关闭
  137.                                         Target2 = 0;
  138.                                         YHGUI_DispString(0,16,"其它垃圾     ",16,1);       
  139.                                 }       
  140.                         }       
  141.                         if(Target3 != 0)//有害垃圾桶打开
  142.                         {

  143.                                 YHGUI_DispString(0,32,"有害垃圾 开启",16,1);
  144.                                
  145.                                 Target3++;
  146.                                 TIM_SetCompare3(TIM4,1000);//打开
  147.                                 if(Target3>6)
  148.                                 {
  149.                                         TIM_SetCompare3(TIM4,400);//时间到关闭
  150.                                         Target3 = 0;
  151.                                         YHGUI_DispString(0,32,"有害垃圾     ",16,1);
  152.                                 }       
  153.                         }
  154.                         if(Target4 != 0)//可回收物桶打开
  155.                         {

  156.                                 YHGUI_DispString(0,48,"可回收物 开启",16,1);       
  157.                                
  158.                                 Target4++;
  159.                                 TIM_SetCompare4(TIM4,1000);//打开
  160.                                 if(Target4>6)
  161.                                 {
  162.                                         TIM_SetCompare4(TIM4,400);//时间到关闭
  163.                                         Target4 = 0;
  164.                                         YHGUI_DispString(0,48,"可回收物     ",16,1);
  165.                                 }       
  166.                         }
  167.                 }
  168.                
  169.         }       
  170. }
复制代码

Keil代码下载:
代码.7z (269.06 KB, 下载次数: 54)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1002058 发表于 2022-8-1 11:47 | 显示全部楼层
语音识别,不需要专门的芯片吗?光用stm32能实现语音识别嘛。
回复

使用道具 举报

ID:778907 发表于 2022-8-3 15:57 | 显示全部楼层
tzh_123 发表于 2022-8-1 11:47
语音识别,不需要专门的芯片吗?光用stm32能实现语音识别嘛。

有啊,如图AD上的语音识别,买识别模块的时候店家会附送源代码,改改关键词就好
回复

使用道具 举报

ID:778907 发表于 2022-8-3 16:00 | 显示全部楼层
tzh_123 发表于 2022-8-1 11:47
语音识别,不需要专门的芯片吗?光用stm32能实现语音识别嘛。

我是用LD3320,核心是STC11的那个模块
回复

使用道具 举报

ID:933456 发表于 2022-11-10 16:44 | 显示全部楼层
2422518914 发表于 2022-8-3 15:57
有啊,如图AD上的语音识别,买识别模块的时候店家会附送源代码,改改关键词就好

你好,ld3320具体改什么。还是说改改识别的拼音,然后烧入stc11,连接stm32就可以使用吗
回复

使用道具 举报

ID:13282 发表于 2022-11-25 00:35 | 显示全部楼层
STM32是可以做简单的语音识别的,DTW+傅立叶算法处理即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表