一、電路設(shè)計
離線語音識別識別垃圾種類并且垃圾桶自動翻蓋:
說出喚醒詞“垃圾桶”后,再說一句垃圾名稱,語音識別模塊端識別到相應(yīng)關(guān)鍵詞,便會將結(jié)果通過串口發(fā)送到STM32端,STM32端接著會發(fā)送打開相應(yīng)垃圾桶蓋的指令,6s后,垃圾桶蓋自動關(guān)閉。其中翻蓋功能是通過STM32端控制舵機實現(xiàn)。
語音播報功能:
STM32端若判斷到有人說出喚醒詞了,通過串口發(fā)送指令給語音播報模塊,外放喇叭便會播報“你好”的音頻,若判斷到相應(yīng)的垃圾種類,便會播報相應(yīng)的垃圾種類音頻。
APP/網(wǎng)頁端遠(yuǎn)程控制垃圾桶:
STM32端通過串口連接WIFI模塊esp8266-01s,接入Onenet云平臺,實現(xiàn)聯(lián)網(wǎng)功能,通過云端下達指令給設(shè)備,從而控制垃圾桶實現(xiàn)翻蓋及控制繼電器通斷。
OLED屏顯示信息: OLED屏可以顯示作者的相關(guān)信息、及每次語音播報也會顯示相應(yīng)文字信息。
硬件組成
智能垃圾桶的開發(fā)板用到的是STM32F103C8T6最小系統(tǒng)板,各個模塊間都是通過串口和主控進行通信。硬件電路上的連接畫一個PCB接口板即可,所有模塊都可以通過排針或排母直接插上去。由于用到了4個舵機,所以整個系統(tǒng)的供電系統(tǒng)需要用5V2A的電源適配器。所用到的各個模塊材料清單如下圖:
二、原理圖
三、部分代碼
?文章來源:http://www.zghlxwxcb.cn/news/detail-858285.html
//單片機頭文件
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
//網(wǎng)絡(luò)協(xié)議層
#include "onenet.h"
//網(wǎng)絡(luò)設(shè)備
#include "esp8266.h"
//硬件驅(qū)動
#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; //發(fā)送間隔變量
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;
/功能函數(shù)
/*
************************************************************
* 函數(shù)名稱: Hardware_Init
*
* 函數(shù)功能: 硬件初始化
*
* 入口參數(shù): 無
*
* 返回參數(shù): 無
*
* 說明: 初始化單片機功能以及外接設(shè)備
************************************************************
*/
void Hardware_Init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷控制器分組設(shè)置
delay_init(); //systick初始化
Usart3_Init(115200); //串口3,驅(qū)動ESP8266用
PWM_Init(); //初始化PWM
ESP8266_Init(); //初始化ESP8266
LED_Config(); //初始化LED指示燈或者說是繼電器
YuYin_Init(); //語音識別初始化
MP3_Init(); //播放模塊初始化
SysTick_Init(); //公共定時器初始化
OLED_Init(); //OLED屏初始化
}
/*
************************************************************
* 函數(shù)名稱: Keep_Connet_Esp8266
*
* 函數(shù)功能: 不斷上傳數(shù)據(jù),使之保持接入物聯(lián)網(wǎng)平臺
*
* 入口參數(shù): 無
*
* 返回參數(shù): 無
*
* 說明: 一旦停止數(shù)據(jù)上傳,物聯(lián)網(wǎng)平臺會斷開
************************************************************
*/
void Keep_Connet_Esp8266 (void)
{
if(++timeCount >= 2000) //發(fā)送間隔20s
{
OneNet_SendData(); //發(fā)送數(shù)據(jù)
timeCount = 0;
ESP8266_Clear();
}
dataPtr = ESP8266_GetIPD(0);
if(dataPtr != NULL)
OneNet_RevPro(dataPtr);
delay_ms(10);
}
/*
************************************************************
* 函數(shù)名稱: main
*
* 函數(shù)功能:
*
* 入口參數(shù): 無
*
* 返回參數(shù): 0
*
* 說明:
***
*********************************************************
*/
int main(void)
{
Hardware_Init(); //初始化外圍硬件
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
OLED_CLS();
ShowSmartTrash(); //顯示“智能垃圾桶”
Show_Author(); //顯示“設(shè)計·作者名“
//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文章來源地址http://www.zghlxwxcb.cn/news/detail-858285.html
到了這里,關(guān)于畢業(yè)設(shè)計 單片機語音識別分類智能垃圾桶(STM32 ESP8266 LD3320)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!