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