肖培+胡天立+曹源+祝蓓+李璇



摘 要:以STM32F407ZGT6為主控制器,利用原子鏡的半透效果,設(shè)計(jì)了一種可實(shí)現(xiàn)查看天氣、穿衣建議、語音識別、語音播報(bào)、音樂播放、鬧鐘提醒、火災(zāi)報(bào)警、室內(nèi)溫濕度檢測以及自動調(diào)光等功能的智能鏡子。鏡子移植了UCOS-II嵌入式操作系統(tǒng),同時(shí)設(shè)置了看門狗,能夠保證系統(tǒng)的正常運(yùn)行;鏡子的顯示部分則是由一塊60cm×45cm的原子鏡和兩塊7寸LCD顯示屏組成。
關(guān)鍵詞:智能鏡子;STM32F407ZGT6;UCOS-II;語音識別;語音合成
當(dāng)今社會時(shí)代發(fā)展迅速,而快節(jié)奏的生活讓大多數(shù)人都無法享受屬于自己的信息世界。為此設(shè)計(jì)了一種可以在洗漱過程中獲取當(dāng)天信息的智能鏡子,通過鏡子我們可以查看當(dāng)天的天氣情況以及對應(yīng)的穿衣建議,除此之外,該鏡子還具有語音識別、語音播報(bào)、音樂播放、鬧鐘提醒、自動調(diào)光等功能。同時(shí)利用鏡子獲取信息也為人們提供了一種全新而又便捷獲取信息的方法。
1 系統(tǒng)結(jié)構(gòu)及相關(guān)功能
圖1為系統(tǒng)的總體框圖,系統(tǒng)的主控制器為STM32F407ZGT6,系統(tǒng)的顯示部分由兩塊7寸LCD顯示屏組成。利用人體紅外感應(yīng)模塊可以判斷鏡子前是否有人,從而控制顯示器的亮滅;利用溫濕度模塊可以獲取室內(nèi)溫濕度;把光照強(qiáng)度傳感器采集到的數(shù)據(jù)通過轉(zhuǎn)換公式可以用來控制LED燈組的亮暗;而煙霧傳感器用于實(shí)現(xiàn)火災(zāi)報(bào)警的功能。系統(tǒng)的人機(jī)交互部分除了LCD顯示屏外,還有用來實(shí)現(xiàn)對系統(tǒng)進(jìn)行相關(guān)操作的電容按鍵模塊,用來進(jìn)行語音識別和語音播報(bào)的語音識別模塊和語音合成模塊。最后的WIFI模塊則是用連接服務(wù)器進(jìn)行信息交換。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 STM32F407ZGT6控制器介紹
STM32F407ZGT6采用Cortex_M4內(nèi)核,具有192KB SRAM、1024KB FLASH、3個12位ADC、2個12位DAC、1個RTC(帶日歷功能)、以及112個通用IO口等。通過查閱資料,該控制器能夠很好的完成系統(tǒng)的各項(xiàng)功能。
2.2 ASR M08-A語音識別模塊
ASR M08-A支持5~á8V的外置電壓供電,模塊通過串口與主控制器相連,同時(shí)模塊自帶功放電路輸入,可直接連接8歐姆0.5瓦(8?贅 0.5W)的揚(yáng)聲器。
該模塊具有兩種檢測模式,即普通檢測模式和口令檢測模式。口令檢測模式需要先驗(yàn)證對應(yīng)口令,才能進(jìn)行語音識別,因此每響應(yīng)一個動作需要講兩個關(guān)鍵詞,這兩個模式的切換主要是通過一句指令來完成,所以我們通過軟件可以實(shí)現(xiàn)只需要第一次驗(yàn)證口令,之后就進(jìn)入普通檢測模式。
2.3 SYN6658語音合成模塊
SYN6658中文語音合成芯片是北京宇音天下科技有限公司于2012年最新推出的一款性/價(jià)比更高,效果更自然的一款高端語音合成芯片。SYN6658通過UART接口或SPI接口通訊方式,接收待合成的文本數(shù)據(jù),實(shí)現(xiàn)文本到語音(或TTS語音)的轉(zhuǎn)換。
2.4 其他模塊介紹
除了以上幾個主要模塊之外,整個系統(tǒng)還由以下幾個模塊協(xié)同工作,從而實(shí)現(xiàn)相關(guān)功能:
(1)ATK-ESP8266WIFI模塊:該模塊是一款高性能的UART-WiFi(串口-無線)模塊,模塊支持STA/AP/STA+AP三種工作模式。
(2)ATK-7' LCD顯示屏:該模塊屏幕分辨率為800*480,16位真彩顯示,模塊自帶LCD控制器,擁有多達(dá)8MB的顯存,能提供8頁的顯存,并支持任意點(diǎn)顏色讀取。
(3)HC-SR501人體紅外感應(yīng)模塊:具有不可重復(fù)和可重復(fù)兩種觸發(fā)方式。
(4)MQ-2煙霧氣體傳感器模塊:通過采集其輸出模擬信號可以檢測是否發(fā)生火災(zāi)。
(5)光敏電阻傳感器模塊:采用靈敏型光敏電阻傳感器,具有DO數(shù)字開關(guān)量輸出(0和1)和AO模擬電壓輸出兩種輸出模式。
(6)DHT-11溫濕度模塊:該模塊采用單總線通信模式,溫度檢測范圍為0℃-50℃,濕度檢測范圍為20%-95%(0℃-50℃環(huán)境下)。
(7)電容按鍵模塊:該模塊是一個基于觸摸檢測IC(TTP223B)的電容式點(diǎn)動型觸摸開關(guān)模塊。
(8)LED燈組:利用PWM來調(diào)節(jié)LED燈的明暗情況。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 UCOS-II操作系統(tǒng)移植
UCOS-II是一個可以基于ROM運(yùn)行的、可裁減的、搶占式、實(shí)時(shí)多任務(wù)內(nèi)核,它的性能能和很多商業(yè)操作系統(tǒng)相媲美,它具有高度可移植性,特別適合于微處理器和控制器,為了提供最好的移植性能,UCOSII最大程度上使用ANSI C語言進(jìn)行開發(fā),并且已經(jīng)移植到近40多種處理器體系上,涵蓋了從8位到64位各種CPU(包括DSP)。
從圖2可以看出,UCOSII的移植,我們只需要修改:os_cpu.h、os_cpu_a.asm 和os_cpu.c 等三個文件即可,其中:os_cpu.h,進(jìn)行數(shù)據(jù)類型的定義,以及處理器相關(guān)代碼和幾個函數(shù)原型;os_cpu_a.asm,是移植過程中需要匯編完成的一些函數(shù),主要就是任務(wù)切換函數(shù);os_cpu.c,定義一些用戶HOOK函數(shù)。
3.2 相關(guān)初始化函數(shù)
主控制器與各個模塊進(jìn)行通信,需要對各個IO口進(jìn)行配置,通過調(diào)用對應(yīng)初始化函數(shù)可以對通信IO口進(jìn)行配置。以下是主函數(shù)相關(guān)設(shè)置:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級
delay_init(168); //初始化延時(shí)函數(shù)
uart_init(9600); //初始化串口1波特率為9600
usart3_init(9600); //初始化串口3波特率為9600
LED_Init(); //LED燈組初始化
LCD_Init(); //LCD顯示器初始化
Adc_Init(); //ADC初始化
KEY_Init(); //電容按鍵初始化
My_RTC_Init(); //初始化RTC
TIM3_Int_Init(100-1,8400-1);//10Khz計(jì)數(shù)頻率,計(jì)數(shù)100次為10ms
RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,());//配置中斷1m一次
my_mem_init(SRAMIN); //初始化內(nèi)部內(nèi)存池
my_mem_init(SRAMCCM); //初始化CCM內(nèi)存池
exfuns_init(); //為fatfs相關(guān)變量申請內(nèi)存
f_mount(fs[0],"0:",1); //掛載SD卡
f_mount(fs[1],"1:",1); //掛載FLASH
while(font_init()){}
ucos_load_main_ui(); //加載主界面
OSInit(); //初始化UCOSII
OSTaskCreate(start_task,(void*)0,(OS_STK *)&START_TASK_ST
K[START_STK_SIZE-1],START_TASK_PRIO );//創(chuàng)建起始任務(wù)
OSStart(); //系統(tǒng)開始運(yùn)行
在起始任務(wù)中,我們創(chuàng)建了以下幾個任務(wù):
OS_CPU_SR cpu_sr=0;
OSStatInit(); //初始化統(tǒng)計(jì)任務(wù),會延時(shí)1m左右
OS_ENTER_CRITICAL();// 進(jìn)入臨界區(qū)(無法被中斷打斷)
OSTaskCreate(main_task,(void*)0,(OS_STK*)&MAIN_TASK_ST
K[MAIN_STK_SIZE-1],MAIN_TASK_PRIO); //創(chuàng)建主任務(wù)
OSTaskCreate(wifi_task,(void*)0,(OS_STK*)&WIFI_TASK_STK[WIFI_TASK_SIZE-1],WIFI_TASK_PRIO); //創(chuàng)建WIFI任務(wù)
OSTaskCreate(light_task,(void*)0,(OS_STK*)&LIGHT_TASK_ST
K[LIGHT_TASK_SIZE-1],LIGHT_TASK_PRIO); //創(chuàng)建燈光調(diào)控任務(wù)
OSTaskCreate(iwdog_task,(void*)0,(OS_STK*)&IWDOG_TASK_
STK[IWDOG_STK_SIZE-1],IWDOG_TASK_PRIO);//創(chuàng)建看門狗任務(wù)
OSTaskCreate(screen_task,(void*)0,(OS_STK*)&SCREEN_TAS
K_STK[SCREEN_STK_SIZE-1],SCREEN_TASK_PRIO);//創(chuàng)建屏幕亮滅任務(wù)
OS_EXIT_CRITICAL(); //退出臨界區(qū)(可以被中斷打斷)
在主任務(wù)中創(chuàng)建了tmr1(1秒觸發(fā)一次)、tmr2(一秒觸發(fā)一次)、tmr3(一小時(shí)觸發(fā)一次)三個定時(shí)器,分別用來顯示時(shí)間、采集傳感器數(shù)據(jù)、獲取天氣信息。
4 實(shí)物功能及測試結(jié)果
4.1 實(shí)物功能介紹
圖3一共有三張圖片,第一張圖片是無人在鏡子面前的拍攝圖,第二張是有人在鏡子面前,同時(shí)光線較暗,系統(tǒng)自動調(diào)節(jié)LED燈組亮度的拍攝圖,最后一張是界面效果圖。從最后一張圖片可以看出該作品具有時(shí)間顯示、室內(nèi)室外溫濕度顯示、天氣狀況以及穿衣指數(shù)顯示,界面右上角的圖標(biāo)分別表示備忘、鬧鐘、聯(lián)網(wǎng)狀態(tài);除了LCD顯示的功能外,系統(tǒng)還具有自動調(diào)光功能,它會根據(jù)室內(nèi)光線強(qiáng)弱調(diào)節(jié)LED燈組亮度;語音識別功能,能夠識別一些簡單的語音口令,例如現(xiàn)在時(shí)間、現(xiàn)在天氣情況、播放音樂、打開菜單、設(shè)置鬧鐘、關(guān)閉自動調(diào)光等50條相關(guān)語音指令;語音播報(bào)功能,例如準(zhǔn)點(diǎn)報(bào)時(shí),播報(bào)天氣情況等;人體紅外感應(yīng)功能,當(dāng)鏡子檢測到鏡子面前一段時(shí)間內(nèi)無人時(shí),會關(guān)閉LCD顯示屏,該時(shí)間可以設(shè)置;音樂播放功能,可以播放用戶存儲在SD卡中的音樂,播放音樂時(shí),不具備語音識別功能,此時(shí)只能通過電容按鍵進(jìn)行操作。
4.2 實(shí)物測試結(jié)果
在測試中,我們利用筆記本電腦搭建服務(wù)器,開啟對應(yīng)熱點(diǎn),系統(tǒng)通過熱點(diǎn)連接該測試服務(wù)器,通過服務(wù)器上的Python腳本可以獲取到對應(yīng)的天氣信息;經(jīng)過各項(xiàng)測試,該作品也能夠完美的實(shí)現(xiàn)上述各項(xiàng)功能。同時(shí)為了保證系統(tǒng)的穩(wěn)定性,我們在室內(nèi)溫度為20攝氏度左右的環(huán)境下進(jìn)行了24h的“拷機(jī)”測試,測試結(jié)果表明,整套系統(tǒng)能夠長時(shí)間的穩(wěn)定運(yùn)行。
5 結(jié)束語
通過查閱各項(xiàng)資料,此作品還是具有很大的應(yīng)用以及開發(fā)前景,因此可以進(jìn)行下一步的改進(jìn)。首先是系統(tǒng)的主控制器可以進(jìn)行升級,我們可以選用更高級的基于ARM的微型電腦主板,搭載Linux系統(tǒng);接下來鏡子的顯示器可以改為大屏液晶顯示器,同時(shí)配以紅外觸屏;最后則是語音識別以及語音播報(bào)功能可以調(diào)用訊飛或者百度的語音識別以及語音合成接口,從而能夠讓智能鏡子更智能。
參考文獻(xiàn)
[1]曹振民,陳年生,馬強(qiáng),等.基于ESP8266的無線控制電路設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2017(1):68-69.
[2]莫琦,趙俊峰,黃耿洪.基于嵌入式的多功能家庭管理助手[J].數(shù)字技術(shù)與應(yīng)用,2015(12):66+68.
[3]鄧中祚.智能家居控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.
[4]王怡,鄂旭.基于物聯(lián)網(wǎng)無線傳感的智能家居研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2015(2):234-237.
[5]肖宛昂,蘇高民,陸廷,等.一種由WiFi智能插座構(gòu)成的智能家居[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(5):46-48.
[6]楊威,高文華.基于Android的智能家居終端設(shè)計(jì)與研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013(07):245-248.
[7]申斌,張桂青,汪明,等.基于物聯(lián)網(wǎng)的智能家居設(shè)計(jì)與實(shí)現(xiàn)[J].自動化與儀表,2013(2):6-10.
[8]楊堤.基于物聯(lián)網(wǎng)的智能家居控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子世界,2012(21):16-17.
[9]郭穩(wěn)濤,何怡剛.智能家居遠(yuǎn)程監(jiān)控系統(tǒng)的研究與設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2011(9):2109-2112.
[10]童曉渝,房秉毅,張?jiān)朴?物聯(lián)網(wǎng)智能家居發(fā)展分析[J].移動通信,2010(9):16-20.
作者簡介:肖培(1996-),男,漢族,湖南邵陽,在讀本科生,研究方向:嵌入式開發(fā)。