毕业设计 单片机语音识别分类智能垃圾桶(STM32 ESP8266 LD3320)

一、电路设计

离线语音识别识别垃圾种类并且垃圾桶自动翻盖:
说出唤醒词“垃圾桶”后,再说一句垃圾名称,语音识别模块端识别到相应关键词,便会将结果通过串口发送到STM32端,STM32端接着会发送打开相应垃圾桶盖的指令,6s后,垃圾桶盖自动关闭。其中翻盖功能是通过STM32端控制舵机实现。

语音播报功能:
STM32端若判断到有人说出唤醒词了,通过串口发送指令给语音播报模块,外放喇叭便会播报“你好”的音频,若判断到相应的垃圾种类,便会播报相应的垃圾种类音频。

APP/网页端远程控制垃圾桶:
STM32端通过串口连接WIFI模块esp8266-01s,接入Onenet云平台,实现联网功能,通过云端下达指令给设备,从而控制垃圾桶实现翻盖及控制继电器通断。

OLED屏显示信息: OLED屏可以显示作者的相关信息、及每次语音播报也会显示相应文字信息。

硬件组成

智能垃圾桶的开发板用到的是STM32F103C8T6最小系统板,各个模块间都是通过串口和主控进行通信。硬件电路上的连接画一个PCB接口板即可,所有模块都可以通过排针或排母直接插上去。由于用到了4个舵机,所以整个系统的供电系统需要用5V2A的电源适配器。所用到的各个模块材料清单如下图:

二、原理图

三、部分代码



    //单片机头文件
    #include "stm32f10x.h"
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    //网络协议层
    #include "onenet.h"
    //网络设备
    #include "esp8266.h"
    //硬件驱动
    #include "delay.h"
    #include "usart.h"
    //C库
    #include 
    #include "PWM.h"
    #include "jidianqi.h"
    
    #include "YuYin.h"
    #include "MP3.h"
    #include "SysTick.h"
    #include "oled.h" 


    char T[5]={0,0,0};
    char H[5]={0,0,0};
    u16 temperature=0,humidity=0;
    char ret; 
    u8 hump_temp[10];


    unsigned short timeCount = 0;	//发送间隔变量
    
    unsigned char *dataPtr = NULL;
    
    short flag = 0;
    
    u8 Target1=0;
    u8 Target2=0;
    u8 Target3=0;
    u8 Target4=0;
    
    u8 all_staus = 0;
    
    u8 Open_JumpEdge=0;
    u8 WakeUp_Flag=0;


    /功能函数
    
    /*
    ************************************************************
    *	函数名称:	Hardware_Init
    *
    *	函数功能:	硬件初始化
    *
    *	入口参数:	无
    *
    *	返回参数:	无
    *
    *	说明:		初始化单片机功能以及外接设备
    ************************************************************
    */
    void Hardware_Init(void)
    {
    	
    		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//中断控制器分组设置
    	
    		delay_init();									//systick初始化
    	  Usart3_Init(115200);				  //串口3,驱动ESP8266用
     		PWM_Init();                   //初始化PWM
    	  ESP8266_Init();					      //初始化ESP8266
    		LED_Config();									//初始化LED指示灯或者说是继电器
    		
    		YuYin_Init();									//语音识别初始化
    		MP3_Init();										//播放模块初始化
    		SysTick_Init();								//公共定时器初始化
    	
    		OLED_Init();									//OLED屏初始化


    }


    /*
    ************************************************************
    *	函数名称:	 Keep_Connet_Esp8266
    *
    *	函数功能:	不断上传数据,使之保持接入物联网平台
    *
    *	入口参数:	无
    *
    *	返回参数:	无
    *
    *	说明:		一旦停止数据上传,物联网平台会断开
    ************************************************************
    */
    void Keep_Connet_Esp8266 (void)
    {
    	
    			if(++timeCount >= 2000)									//发送间隔20s
    				{
    					OneNet_SendData();									//发送数据		
    					timeCount = 0;
    					ESP8266_Clear();
    				}
    				
    				dataPtr = ESP8266_GetIPD(0);
    				if(dataPtr != NULL)
    					OneNet_RevPro(dataPtr);
    				
    				delay_ms(10);
    				
    }


    /*
    ************************************************************
    *	函数名称:	main
    *
    *	函数功能:	
    *
    *	入口参数:	无
    *
    *	返回参数:	0
    *
    *	说明:		
    ***
    *********************************************************
    */
    int main(void)
    {


    	Hardware_Init();				//初始化外围硬件
    
    	while(OneNet_DevLink())			//接入OneNET
    		delay_ms(500);
    
    	OLED_CLS();
    	ShowSmartTrash();				//显示“智能垃圾桶”
    	Show_Author();					//显示“设计·作者名“
    	//ShowTemperature();			//显示”温湿度”
	

    	while(1)
    	{

    				Keep_Connet_Esp8266();
	

    				if(YuYin_RX_STA == 1)
    				{
    					if(MP3_State() == 0)
    					{
    						if(YuYin_RX_CMD==49 || YuYin_RX_CMD==50)
    						{
    							WakeUp_Flag = 1;
    							MP3_Star(5);
    						}
    						else if(WakeUp_Flag == 1)
    						{
    							WakeUp_Flag=0;
    							
    							if(YuYin_RX_CMD%4 == 1)
    							{
    								MP3_Star(1);
    								Target1 = 1;
    								Show_chiyu();
    							}
    							else if(YuYin_RX_CMD%4 == 2)
    							{
    								MP3_Star(2);
    								Target2 = 1;
    								Show_qita();
    							}
    							else if(YuYin_RX_CMD%4 == 3)
    							{
    								MP3_Star(3);
    								Target3 = 1;
    								Show_youhai();
    							}
    							else
    							{
    								MP3_Star(4);
    								Target4 = 1;
    								Show_kehuishou();
    							}
    						}
    					}
    					
    					YuYin_RX_STA = 0;
    				}
    		
    		if(SysTick_JumpEdge(&Open;_JumpEdge, &SysTickBit.Time1s;)==1)
    		{
    		  if(Target1 != 0)
    			{
    			  Target1++;
    				TIM_SetCompare1(TIM4,700);
    				if(Target1>6)
    				{					
    					TIM_SetCompare1(TIM4,500);					
    				  Target1 = 0;
    					ShowTrashNoPeople();
    				}					
    			}
    			if(Target2 != 0)
    			{
    				Target2++;
    				TIM_SetCompare2(TIM4,900);
    				if(Target2>6)
    				{
    					TIM_SetCompare2(TIM4,600);
    					ShowTrashNoPeople();
    					Target2 = 0;
    				}	
    			}	
    			if(Target3 != 0)
    			{
    				Target3++;
    				TIM_SetCompare4(TIM4,900);			//有害
    				if(Target3>6)
    				{
    					TIM_SetCompare4(TIM4,500);
    					ShowTrashNoPeople();
    					Target3 = 0;
    				}	
    			}
    			if(Target4 != 0)
    			{
    				Target4++;
    				TIM_SetCompare3(TIM4,900);			//可回收
    				if(Target4>6)
    				{
    					TIM_SetCompare3(TIM4,550);
    					ShowTrashNoPeople();
    					Target4 = 0;
    				}	
    			}
    		}
    		
    		switch( flag )
    		{
    			case 1 :GPIO_SetBits(GPIOA,GPIO_Pin_1); break;
    			case 2 :GPIO_ResetBits(GPIOA, GPIO_Pin_1); break; 
    			case 3 :TIM_SetCompare1(TIM4,700);break;
    			case 4 :TIM_SetCompare1(TIM4,500);break;
    			case 5 :TIM_SetCompare2(TIM4,900);break;
    			case 6 :TIM_SetCompare2(TIM4,600);break;
    			case 7 :TIM_SetCompare4(TIM4,900);break;
    			case 8 :TIM_SetCompare4(TIM4,500);break;
    			case 9 :TIM_SetCompare3(TIM4,900);break;
    			case 10:TIM_SetCompare3(TIM4,550);break;
    
    		}


    	}
    }


项目获取:

https://gitee.com/feifei1122/simulation-project

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当前核心板更新为第二版,修改如下:修改FPC(间距0.5mm)封装; 修改焊盘封装,使得方便串口选择下载固件还是与STM32串口通信; 改进Wifi下载方式,改为贴片拨动开关(核心板右侧),相比跳帽,更为简洁方便; 增加esp8266按键,用于机智云代码远程控制开发时,进入wifi自动配对路由器或无线热点; 增加龟仔贴片按键(核心板下侧背面)。用于esp8266复位; 底板核心资源: 两路USB+继电器+KF301 一路NTC二分法测温 MP3控制与播放WIFI远程控制 软件核心思路: stm32-usb-fatfs-spi_flash ld3320-语音识别-QJ004 mp3数据输入解码 && LD3320本身mp3解码 stm32--串口--esp8266-对接机智云-手机app远程控制 整个软件框架采用 动态链表+任务方式实现管理,类似嵌入式操作系统的任务管理部分。 特点(详细远程控制和语音控制功能介绍见附件): 基于LD3320语音识别; 基于LD3320的mp3播放(实测128kbps无压力,更高的没测了,应该也没问题); 基于STM32和SPI FLash芯片的虚拟U盘修改语音识别词条; 基于ESP8266和机智云(采用eclipse开发,文档对linux下和eclipse下开发均有详细介绍)的远程控制 FPC接口引出了剩余的MCU引脚到底板。 底板接串口模块,系统会实时输出当前一些信息,细节见底下开发文档。 增加了四路输出控制接口(目前提供了四路的简单控制) 支持U盘拖入固件在线升级并自动重启(2019/01/12) 固件拖入升级思路如下,详细实现,见提供的源码即可: keil中修改中断向量位置,主程序中修改中断向量起始地址; app程序承担固件接收处理; BootLoader程序负责写入并自动重启进入新app中; 具体使用方法: firmware文件夹若不存在,则自动生成,bin文件升级完成后,将自动删除; 将app程序生成的bin文件放入虚拟U盘firmware文件夹,重上电,闪烁3次后即自动进行固件更新; 说明: 误识别无法避免,我们做了两个方面努力尽量减少其发生的概率: 添加了垃圾词汇,见虚拟U盘一图,xiao xing 对应多个垃圾词语,买家不要删除 唤醒词尽量避免了使用常见的短语 使用方法(见附件): 只通电,上电准备就绪后,喇叭播放 “系统正在运行中”语音; 先说唤醒词 “小星”,识别正确,则回复“小星在”; 随后可以说出setup.ini配置文件中对应的词条,识别成功,则闪烁一次,回答“好的”,串口输出指定格式的数据帧“AT+??+END\r\n”,四路控制接口中指定接口执行相应命令; 有一个mp3歌曲播放范例,说“音乐”,则开始播放mp3歌曲,播放完才能回到正常的语音识别; 只需要开机说一次唤醒词,后面直接说出命令即可。容易增加误识别现象; 若识别失败,LED闪烁两次,提示需要注意发音/环境嘈杂等; 注意: 若需要修改词条,通过USB接口接入电脑,打开setup.ini配置文件,修改词条即可,前面5条不 要轻易动,最好从第6条开始修改相应的识别句子。此外,CH1~CH4四路控制接口的高低电平可 以自行更改,这样,识别成功则取反相应的输出电平。(wifi默认使能); 当前第二版本的词条内容如下,由买家根据实际情况自行设计(音乐在播放时,ld3320不可进行语音识别): 当前支持ini格式配置文件,软件目前支持20条语音控制命令(音乐相关,控制相关,最多支持50条) 代码上经过几次升级,目前软件支持以下扩展用的功能(底板预留IO可扩展的功能): OLED 128*32屏幕 XN297无线模块 完整功能演示(wifi的见文档即可):视频链接地址: https://pan.baidu.com/s/1mHhrHqAfB5fW7N8HnGbTfQ

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值