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

想要更多项目私wo!!!

一、电路设计

        离线语音识别识别垃圾种类并且垃圾桶自动翻盖:说出唤醒词“垃圾桶”后,再说一句垃圾名称,语音识别模块端识别到相应关键词,便会将结果通过串口发送到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 <string.h>
#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;

		}
		
		
	}
}

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值