程序編譯器:keil4/keil 5
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):Y001
資料下載鏈接
設(shè)計(jì)說(shuō)明
課題主要研究語(yǔ)音識(shí)別、按鍵識(shí)別、PWM波調(diào)節(jié)亮度、OLED屏幕顯示四個(gè)模塊。
目前市面上語(yǔ)音識(shí)別的臺(tái)燈大多僅是控制燈的亮滅,采用的是普通LED節(jié)能燈進(jìn)行照明。相比較于市場(chǎng)上已有的產(chǎn)品,本課題所研究設(shè)計(jì)的臺(tái)燈采用的主控芯片是性能較高的STM32F103C8T6單片機(jī)芯片,采用中斷方式對(duì)臺(tái)燈進(jìn)行按鍵控制,并通過(guò)基于LD332O語(yǔ)音識(shí)別模塊,利用非特定人語(yǔ)音識(shí)別技術(shù)對(duì)臺(tái)燈的工作狀態(tài)進(jìn)行語(yǔ)音控制,同時(shí)實(shí)現(xiàn)了語(yǔ)音控制和按鍵控制臺(tái)燈的工作狀態(tài)。
采用輸出波形比較輸出PWM波,利用PWM波來(lái)控制光照的亮度及達(dá)到柔光照射的目的。并采用OLED屏幕顯示臺(tái)燈的工作狀態(tài)燈信息,因此使用者可以快速的指導(dǎo)臺(tái)燈目前的工作狀態(tài),根據(jù)自身的實(shí)際需求通過(guò)語(yǔ)音或者按鍵對(duì)臺(tái)燈的工作狀態(tài)進(jìn)行調(diào)節(jié),這樣就能夠更好的幫助這些弱勢(shì)群體,如老人、兒童、孕婦等行動(dòng)不便的人。
由于采用的是柔光臺(tái)燈照明,在一定程度上減緩青少年近視發(fā)病率持續(xù)上升的趨勢(shì),并且LED燈能夠緩解資源消耗過(guò)大、污染物排放量的現(xiàn)狀。
實(shí)現(xiàn)功能如下:
1、語(yǔ)音識(shí)別部分:采用市面上流行的基于LD3320語(yǔ)音識(shí)別模塊,利用非特定人語(yǔ)音識(shí)別(ASR)技術(shù),調(diào)試語(yǔ)音模塊使其滿(mǎn)足臺(tái)燈所需要的特定詞匯。詞匯包括:?jiǎn)拘言~、開(kāi)燈、關(guān)燈、亮一點(diǎn)、變暗等。采用主控芯片STM32F103C8T6與LD3320語(yǔ)音識(shí)別模塊進(jìn)行串口通信,主控芯片接收數(shù)據(jù)后處理該消息命令。
2、按鍵控制部分:利用按鍵中斷機(jī)制來(lái)控制燈的亮度,以及控制燈的開(kāi)和關(guān)。
3、PWM波控制LED柔光燈亮度部分:采用STM32F103C8T6內(nèi)部自帶定時(shí)器輸出PWM功能,接上外圍電路,控制多個(gè)LED燈。
4、顯示模塊部分:主控芯片通過(guò)SPI協(xié)議驅(qū)動(dòng)0.96寸OLED屏幕,在128*64個(gè)像素點(diǎn)的屏幕上顯示燈的亮度級(jí)數(shù)及其他信息。
原理圖
系統(tǒng)各模塊器件介紹
整個(gè)設(shè)計(jì)包括STM32F103C8T6主控芯片模塊、0.96寸OLED顯示模塊、LD3320語(yǔ)音模塊、按鍵模塊、LED燈組模塊等組成,如下圖 2.1所示:
主要用到的元器件有STM32F103C8T6單片機(jī)、OLED顯示屏幕和其驅(qū)動(dòng)芯片SSD1306、LD3320語(yǔ)音識(shí)別芯片和內(nèi)部的增強(qiáng)型51單片機(jī)等,這些元器件將會(huì)在本章中進(jìn)行介紹。
LD3320語(yǔ)音識(shí)別模塊
? LD3320語(yǔ)音識(shí)別常用的芯片,該芯片組成的語(yǔ)音模塊識(shí)別的靈敏度高,采用的是非特定人語(yǔ)音識(shí)別(ARS)技術(shù),這種技術(shù)是能夠識(shí)別漢字小寫(xiě)拼音內(nèi)容的,本課題的語(yǔ)音識(shí)別模塊由LD3320與STC11L08XE單片機(jī)組成識(shí)別系統(tǒng),如圖 2.4所示:
? 語(yǔ)音識(shí)別芯片能夠?qū)?a class="article-link" target="_blank" href="/baike/484367.html">咪頭輸入的語(yǔ)音信息內(nèi)容進(jìn)行頻譜分析之后再提取出該信息內(nèi)容的特征,再將識(shí)別出來(lái)的內(nèi)容傳輸至語(yǔ)音識(shí)別器中與先前所設(shè)定好的關(guān)鍵詞進(jìn)行比對(duì),然后找出與識(shí)別出的信息最為相似的關(guān)鍵詞,并進(jìn)行輸出。使用者只需要將識(shí)別出來(lái)的關(guān)鍵詞語(yǔ)內(nèi)容以漢字拼音字符串的形式傳輸至語(yǔ)音芯片當(dāng)中,即可識(shí)別生效。本課題語(yǔ)音識(shí)別模塊每次識(shí)別完成將通過(guò)中斷方式請(qǐng)求主控模塊進(jìn)行處理,通過(guò)SPI協(xié)議從語(yǔ)音識(shí)別芯片讀取信息,并根據(jù)識(shí)別的信息通過(guò)串口通信的方式將識(shí)別出來(lái)的信息發(fā)送給STM32F103C8T6單片機(jī)。
OLED顯示模塊
OLED顯示屏,是一種有機(jī)的發(fā)光二極管,它能夠自發(fā)光,并且擁有反應(yīng)靈敏、極薄厚度、能夠適應(yīng)的溫度范圍大、對(duì)比度相對(duì)較高,還有不需要背光源、結(jié)構(gòu)簡(jiǎn)單、分辨率高等優(yōu)勢(shì),同時(shí)也存在著難以大型化的不足。
本課題采用的OLED顯示屏為中景園電子的顯示屏,該模塊有藍(lán)色、黃藍(lán)色、白色三種顏色可供選擇,但是每一個(gè)OLED顯示屏只能顯示這三種顏色中的其中一種顏色,模塊尺寸為2.7CM2.6CM,顯示尺寸為0.96寸,屏幕的分辨率達(dá)12864,工作電壓為3.3V。其結(jié)構(gòu)圖如下圖 2.6所示:
PCB圖
源程序
程序設(shè)計(jì)框架
整個(gè)程序的設(shè)計(jì)主要分為STM32F103C8T6單片機(jī)IO的初始化程序設(shè)計(jì)、OLED顯示程序設(shè)計(jì)、PWM波輸出程序設(shè)計(jì)、LD3320語(yǔ)音識(shí)別程序設(shè)計(jì)等,設(shè)計(jì)的框架如下圖 4.1所示:
程序流程圖
在主程序里,先直接調(diào)用各個(gè)模塊初始化程序,完成OLED初始化、定時(shí)器初始化、串口初始化等,然后不斷掃描執(zhí)行switch case函數(shù),調(diào)用PWM波輸出控制LED燈程序和OLED顯示屏顯示函數(shù)。串口中斷和按鍵外部中斷會(huì)改變工switch控制參數(shù),以此達(dá)到改變PWM波和OLED不同的顯示界面。其主函數(shù)程序如下
主函數(shù)
int main(void)
{
delay_init(); //延時(shí)函數(shù)初始化
NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí) LED_Init(); //LED端口初始化
OLED_Init(); //初始化OLED
OLED_Clear();
TIM1_PWM_Init(); //TIM1 PWM波輸出初始化,并使能TIM1 PWM輸出
usart2_Init(9600); //初始化串口2
EXTIX_Init();
int j;
show_name();
My_USART2_SendData("123");
while(1)
{
j=ld3320_uart_receive(); //得到接受函數(shù)的字符串buff
pwm_led_out_test(lighter);
switch(j)
{
case 1: show_name(); break; //小陳
case 2: //亮一點(diǎn)
My_USART2_SendData("ligther ");
if(lighter<5) //如果亮度還不滿(mǎn)5
{ lighter++; show_light(lighter); } //顯示亮度
else
{ show_zuida(); } break; //屏幕提示已達(dá)最大亮度
case 3: //變暗
if(lighter>0)
{ lighter--; show_light(lighter); } //顯示亮度
else
{ show_zuidi(); } break; //屏幕提示已達(dá)最低亮度
case 4: lighter = 3; show_light(lighter); break; //開(kāi)燈,默認(rèn)亮度等級(jí)3,60%
case 5: lighter = 0; show_ling(); break; //關(guān)燈
case 6: lighter = 1; show_ershi(); break; //亮度20
case 7: lighter = 3; show_liushi(); break; //亮度60
case 8: lighter = 5; show_yibai(); break; //亮度100
case 9: show_chongfa(); break; //顯示請(qǐng)重新發(fā)口令
case 10: show_chongfa(); break; //顯示請(qǐng)重新發(fā)口令
default:break;
}
}
}
OLED程序
在液晶顯示屏程序里,先配置SPI協(xié)議四個(gè)GPIO口和SSD1306復(fù)位引腳為推挽輸出,然后輸出復(fù)位電平復(fù)位SSD1306芯片。接下來(lái)是調(diào)用寫(xiě)命令函數(shù)來(lái)設(shè)置SSD1306工作參數(shù),最后關(guān)閉顯示,復(fù)位坐標(biāo)點(diǎn)到原點(diǎn),
/初始化SSD1306通信引腳
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能A端口時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能A端口時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8);
OLED_RST_Set();
delay_ms(100);
OLED_RST_Clr();
delay_ms(200);
OLED_RST_Set(); //復(fù)位過(guò)程
LD3320驅(qū)動(dòng)代碼
void ProcessInt0(void)
{
uint8 nAsrResCount=0;
EX0=0; //外部中斷0允許位:不允許
ucRegVal = LD_ReadReg(0x2B);
LD_WriteReg(0x29,0) ; //中斷允許寄存器
LD_WriteReg(0x02,0) ; //FIFO中斷允許位
if((ucRegVal & 0x10) && LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35)
// b2:DSP忙閑狀態(tài),0x21表閑,可以進(jìn)行下一步ASR動(dòng)作;bf:ASR狀態(tài)報(bào)告寄存器,確定一次語(yǔ)音識(shí)別流程正常結(jié)束,識(shí)別成功
{
nAsrResCount = LD_ReadReg(0xba);
if(nAsrResCount>0 && nAsrResCount<=4) //BA寄存器對(duì)內(nèi)容進(jìn)行評(píng)分
{
nAsrStatus=LD_ASR_FOUNDOK; //0x10 一次識(shí)別結(jié)束后有一個(gè)識(shí)別結(jié)果
}
else
{
nAsrStatus=LD_ASR_FOUNDZERO; //0x11一次識(shí)別結(jié)束后沒(méi)有識(shí)別結(jié)果
}
}
else //沒(méi)有識(shí)別結(jié)果
{
nAsrStatus=LD_ASR_FOUNDZERO;
}
LD_WriteReg(0x2b,0); //中斷請(qǐng)求編號(hào)寄存器
LD_WriteReg(0x1C,0); //ADC開(kāi)關(guān)控制,寫(xiě)0表示ADC不可用
LD_WriteReg(0x29,0) ; //中斷允許寄存器
LD_WriteReg(0x02,0) ; //FIF0中斷允許
LD_WriteReg(0x2B,0); //中斷請(qǐng)求編號(hào)寄存器
LD_WriteReg(0xBA,0); //中斷輔助信息寄存器
LD_WriteReg(0xBC,0); //識(shí)別過(guò)程強(qiáng)制結(jié)束,在ASR進(jìn)行過(guò)程中,可以設(shè)置本寄存器提前結(jié)束本次ASR過(guò)程
LD_WriteReg(0x08,1); //清除FIF0內(nèi)容(清除指定FIF0后再寫(xiě)入一次0x00),0x01為清除FIFO_DATA
LD_WriteReg(0x08,0); //清除FIFO_DATA后 再次寫(xiě)
EX0=1; //外部中斷允許位:允許中斷
}
設(shè)計(jì)說(shuō)明書(shū)
立論依據(jù)
(課題來(lái)源、選題依據(jù)和背景情況、課題研究目的、理論意義和實(shí)際應(yīng)用價(jià)值)
隨著社會(huì)的發(fā)展,人們對(duì)美好生活愈加的向往,智能產(chǎn)品成為時(shí)代的發(fā)展趨勢(shì)。我國(guó)語(yǔ)音識(shí)別研究在近年來(lái)發(fā)展迅速,研究的水平也從實(shí)驗(yàn)室逐步走向市場(chǎng),進(jìn)入消費(fèi)者的電子產(chǎn)品、工業(yè)、家電、通信、汽車(chē)電子、醫(yī)療、家庭服務(wù)等各個(gè)領(lǐng)域。
語(yǔ)音識(shí)別技術(shù)就是通過(guò)識(shí)別和理解把語(yǔ)音信號(hào)轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的高技術(shù),發(fā)展至今日,中小詞匯量非特定人語(yǔ)音識(shí)別系統(tǒng)識(shí)別精度已經(jīng)大于98%,對(duì)特定人語(yǔ)音識(shí)別系統(tǒng)的識(shí)別精度就更高,這已經(jīng)能夠滿(mǎn)足一般應(yīng)用的要求,于是大量的語(yǔ)音識(shí)別產(chǎn)品開(kāi)始進(jìn)入市場(chǎng)和服務(wù)領(lǐng)域。這些產(chǎn)品為人們的生活提供了很大的便利,例如語(yǔ)音識(shí)別的智能臺(tái)燈,改變了傳統(tǒng)只能通過(guò)手動(dòng)控制的方式,采用語(yǔ)音識(shí)別技術(shù),通過(guò)語(yǔ)音來(lái)控制臺(tái)燈的工作狀態(tài)。
現(xiàn)在大部分臺(tái)燈都是通過(guò)手動(dòng)控制,雖然目前已有語(yǔ)音控制的臺(tái)燈,但大多數(shù)語(yǔ)音控制臺(tái)燈的控制模式單一,主要是控制臺(tái)燈的開(kāi)和關(guān)。當(dāng)需要調(diào)節(jié)光照亮度時(shí)還需手動(dòng)調(diào)節(jié),因此使用起來(lái)很不方便,特別是對(duì)于老人、兒童和行動(dòng)不便者來(lái)講尤其困難。
設(shè)計(jì)這樣一款能夠通過(guò)語(yǔ)音識(shí)別控制亮滅以及亮度的臺(tái)燈,它可以根據(jù)使用者的需求來(lái)進(jìn)行調(diào)節(jié),這樣就能夠更好的幫助這些弱勢(shì)群體人群,以及在一定程度上減緩青少年近視發(fā)病率持續(xù)上升的趨勢(shì),并且能夠避免資源的不必要消耗。
文獻(xiàn)綜述
(國(guó)內(nèi)外研究現(xiàn)狀、發(fā)展動(dòng)態(tài))
隨著智能制造業(yè)的快速發(fā)展,語(yǔ)音識(shí)別開(kāi)始得到廣泛的應(yīng)用,在信息處理、通信、控制等領(lǐng)域也相繼出現(xiàn)了各種功能的語(yǔ)音識(shí)別系統(tǒng)。其中應(yīng)用相對(duì)廣泛的有IBM公司的Viavoice、Android系統(tǒng)的Voice Actions、蘋(píng)果的Siri以及國(guó)內(nèi)科大訊飛的語(yǔ)音識(shí)別產(chǎn)品等,這些軟件的共同點(diǎn)是文本轉(zhuǎn)語(yǔ)音的功能較為完善,而反過(guò)來(lái)語(yǔ)音轉(zhuǎn)文本的功能則較為差些。例如Voice Actions的識(shí)別能力超強(qiáng),但是前提是必須按照規(guī)定的格式和語(yǔ)法結(jié)構(gòu)表達(dá),否則就無(wú)法識(shí)別。
隨著語(yǔ)音識(shí)別的廣泛應(yīng)用,出現(xiàn)了許多不同用途的語(yǔ)音識(shí)別模塊,例如DFRobot的中文語(yǔ)音識(shí)別模塊,它的核心是國(guó)內(nèi)ICRoute公司的高性能LD3320語(yǔ)音識(shí)別芯片,是一顆基于非特定人語(yǔ)音識(shí)別(ASR)技術(shù)的語(yǔ)音識(shí)別/聲控芯片,上面集成了高精度的A/D和D/A接口,不再需要外界輔助的Flash和RAM,就可以實(shí)現(xiàn)語(yǔ)音識(shí)別、聲控、人機(jī)對(duì)話功能,不需要用戶(hù)進(jìn)行錄音訓(xùn)練,識(shí)別的關(guān)鍵詞語(yǔ)列表是可以動(dòng)態(tài)編輯的。
越來(lái)越多的語(yǔ)音識(shí)別模塊的出現(xiàn),更加刺激了語(yǔ)音識(shí)別類(lèi)產(chǎn)品的創(chuàng)新研發(fā),市面上出現(xiàn)各種功能的語(yǔ)音智能產(chǎn)品,產(chǎn)品以實(shí)用性、易用性和人性化為主,致力于為人們提供一個(gè)舒適、方便、高效和快捷的生活環(huán)境。
研究?jī)?nèi)容
畢業(yè)設(shè)計(jì)(論文)的主要研究?jī)?nèi)容、構(gòu)想與思路、可能出現(xiàn)的工作難點(diǎn)以及擬解決的方法)
主要研究?jī)?nèi)容:本課題是基于語(yǔ)音識(shí)別的智能LED柔光臺(tái)燈設(shè)計(jì),主要的研究?jī)?nèi)容包括語(yǔ)音識(shí)別模塊應(yīng)用,PWM波控制LED柔光燈的亮度,0.96寸OLED顯示當(dāng)前柔光LED臺(tái)燈的工作狀態(tài),軟件硬件的聯(lián)合調(diào)試。
構(gòu)想與思路:
1. 語(yǔ)音識(shí)別部分:采用市面上流行的非特定人語(yǔ)音識(shí)別(ASR)模塊,調(diào)試模塊可以滿(mǎn)足所需臺(tái)燈要的特定詞匯。詞匯包括:?jiǎn)拘言~、開(kāi)燈、關(guān)燈、亮一點(diǎn)、暗一點(diǎn)。采用主控芯片STM32F103C8T6與語(yǔ)音識(shí)別模塊進(jìn)行串口通信,主控芯片接收數(shù)據(jù)后處理該消息命令。
2. 按鍵控制部分:按鍵中斷機(jī)制控制燈的亮度,按鍵控制燈的開(kāi)光。
3. PWM波LED柔光燈亮度:采用STM32F103C8T6內(nèi)部自帶定時(shí)器輸出PWM功能,接上外圍電路,控制多個(gè)LED燈。
4. 顯示模塊:主控芯片通過(guò)SPI協(xié)議驅(qū)動(dòng)0.96寸OLED屏幕,在128*64個(gè)像素點(diǎn)的屏幕上顯示燈的亮度級(jí)數(shù)及其他信息
研究基礎(chǔ)
(所需研究條件和實(shí)驗(yàn)條件)
1. 設(shè)計(jì)需要的主要元器件: STM32F103C8T6單片機(jī)開(kāi)發(fā)板、LED燈、基于LD3320語(yǔ)音識(shí)別模塊、0.96寸OLED屏幕
2. 制作需要的實(shí)驗(yàn)條件:用于軟硬件設(shè)計(jì)的個(gè)人電腦、用于制作電路板的電子電工實(shí)驗(yàn)室相關(guān)設(shè)備、用于燒錄程序的ST-LINK下載器。
3. 調(diào)試需要的實(shí)驗(yàn)條件:直流穩(wěn)壓電壓源、萬(wàn)用表、示波器等。
4. 研究所需的理論基礎(chǔ):C語(yǔ)言程序設(shè)計(jì)、單片機(jī)原理及應(yīng)用、模擬電子技術(shù)基礎(chǔ)、數(shù)字電路與邏輯設(shè)計(jì)、電路分析基礎(chǔ)等。
資料清單
下載鏈接見(jiàn)文章開(kāi)頭
- 設(shè)計(jì)需要的主要元器件: STM32F103C8T6單片機(jī)開(kāi)發(fā)板、LED燈、基于LD3320語(yǔ)音識(shí)別模塊、0.96寸OLED屏幕
2. 制作需要的實(shí)驗(yàn)條件:用于軟硬件設(shè)計(jì)的個(gè)人電腦、用于制作電路板的電子電工實(shí)驗(yàn)室相關(guān)設(shè)備、用于燒錄程序的ST-LINK下載器。
3. 調(diào)試需要的實(shí)驗(yàn)條件:直流穩(wěn)壓電壓源、萬(wàn)用表、示波器等。
4. 研究所需的理論基礎(chǔ):C語(yǔ)言程序設(shè)計(jì)、單片機(jī)原理及應(yīng)用、模擬電子技術(shù)基礎(chǔ)、數(shù)字電路與邏輯設(shè)計(jì)、電路分析基礎(chǔ)等。
資料清單
下載鏈接見(jiàn)文章開(kāi)頭