李文浩
低學(xué)齡孩子寫作業(yè)往往是一件令家長頭疼的事。孩子們寫一會兒作業(yè)就喊著要吃東西、喝水或是上廁所,不能高效安靜地完成作業(yè),家長們看著只能干著急。孩子小,注意力不集中是其中的原因之一。那么,怎樣訓(xùn)練孩子的注意力,使其能夠?qū)W⒌貙懽鳂I(yè)呢?筆者設(shè)計了一款培養(yǎng)孩子專注力的作品,現(xiàn)分享如下。
● 設(shè)計思路
具體的設(shè)計思路是:①在孩子準備寫作業(yè)前,提醒孩子做好準備。②孩子寫作業(yè)過程中,若有交互需求,給3次機會和孩子交流,并溫馨提醒孩子專心寫作業(yè)。③倒計時。默認給孩子20分鐘時間專心寫作業(yè),倒計時時間到了,詢問作業(yè)寫好了沒有,若孩子作業(yè)寫完了,給予孩子表揚,鼓勵孩子的進步;若孩子作業(yè)沒有完成,也要用激勵性的語言給孩子加油,同時提醒孩子休息10分鐘,為下一段學(xué)習(xí)時間做好準備。④其他簡單的語音交互功能。⑤簡單娛樂功能,如語音點播歌曲。
● 系統(tǒng)硬件設(shè)計
1.硬件準備
(1)Arduino主控板
筆者選擇了Arduino平臺的Nano板作為主控板。Nano是一款基于ATmega328P的開發(fā)板,它有14路數(shù)字輸入輸出口,6路模擬輸入口,支持串口、I2C接口和SPI接口三種通信方式,方便外接各種傳感器,小巧而又便宜,適合編程造物。為了方便調(diào)試和使用,系統(tǒng)還選配了一塊擴展板(如圖1)。
(2)語音識別模塊
自動語音識別技術(shù)(Automatic Speech Recognition)是一種將人的語音轉(zhuǎn)換為文本的技術(shù),簡稱ASR。本作品大量使用了語音識別功能,筆者選擇了圖2這款語音識別模塊,它是一款非特定人語音識別模塊,只需要在主控MCU的程序中設(shè)定好要識別的關(guān)鍵詞語列表,并動態(tài)地把這些關(guān)鍵詞語以字符的形式傳送到芯片內(nèi)部,就可以對用戶說出的關(guān)鍵詞語進行識別。它具有不需要用戶事先訓(xùn)練和錄音、不需要聯(lián)網(wǎng)就可實現(xiàn)離線語音識別、響應(yīng)速度快等優(yōu)點。該模塊可以設(shè)置50個詞條,每個詞條可以是單字、詞組或短句,長度不超過10個漢字或者79個字母。該語音識別模塊集成了LD3320芯片以實現(xiàn)漢語語音識別,有循環(huán)檢測模式、口令檢測模式和按鈕檢測模式三大識別檢測模式,適應(yīng)不同的應(yīng)用場景。它采用了I2C總線接口,節(jié)省了主控板的IO口,能夠方便地與主控芯片進行通信。
(3)DS1302時鐘模塊
作品需要為孩子實時呈現(xiàn)時間,還需要經(jīng)常使用倒計時功能,所以選用了一款非常實用的時鐘模塊DS1302(如圖3),它可以對年、月、日、周、時、分、秒進行計時,具有閏年補償功能,采用三線接口與主控板進行同步通信,可以為系統(tǒng)提供準確的時間信息,而且斷電不掉時。
(4)TM1650四位數(shù)碼管(帶冒號)
為方便顯示實時時間,系統(tǒng)選用了數(shù)碼管(如圖4),而TM1650四位數(shù)碼管采用I2C總線接口,只占用單片機兩個IO口,減少了主控板IO口的占用。
(5)MP3語音模塊及TF卡
語音輸出是語音交互必不可少的,為節(jié)約成本,作品中選用了如圖5所示的MP3語音模塊,使用前將需要輸出的語音內(nèi)容列出清單,使用語音合成工具軟件生成MP3文件,需要播放語音時用主控板按文件名的方式控制本模塊播放TF卡中對應(yīng)的MP3文件。
(6)微型數(shù)字功放模塊
MP3模塊播放的聲音較小,只能供耳機使用,不能驅(qū)動喇叭,為驅(qū)動小喇叭播放交互的語音,系統(tǒng)中使用了如圖6所示的微型數(shù)字功放模塊。它是D類功放,效率極高,可配4-8歐姆2-8瓦的喇叭。
(7)小喇叭
如下圖頁7所示是4Ω3W的小喇叭。
2.硬件連接
硬件連接如下頁圖8所示。為方便各功能模塊的連接與調(diào)試,筆者選配了Nano擴展板,步驟如下:①將Nano主控板插到擴展板中;②將各功能模塊接入擴展板的引腳上;③將DS1302時鐘模塊的CLK、DAT和RST引腳分別接入擴展板數(shù)字接口11、10和9引腳;④將MP3語音模塊RX、TX引腳分別接入擴展板串口的TX、RX引腳;⑤將MP3語音模塊的L、R引腳分別接入微型數(shù)字功放的L、R引腳;⑥將各模塊中的5V、VCC引腳接入擴展板中對應(yīng)的5V引腳;⑦將各模塊中的GND引腳接入擴展板中的GND引腳。
由于擴展板只有一個I2C通信接口,但TM1650四位數(shù)碼管模塊和語音識別模塊都使用了I2C通信方式,經(jīng)查閱資料后筆者發(fā)現(xiàn),擴展板上I2C接口的SDA、SCL引腳實際上是和A4、A5引腳連通的,所以將TM1650模塊的SDA和SCL引腳分別接入擴展板的A4、A5引腳,將語音識別模塊的SCL、SDA引腳分別接入擴展板的對應(yīng)SCL、SDA引腳,主控板依據(jù)它們的地址訪問這兩個模塊,互不干擾。
由于Nano板上傳程序是通過串口與電腦通信的,而系統(tǒng)中MP3模塊也是通過串口通信,在上傳程序時會出現(xiàn)沖突。在上傳程序時,將MP3模塊的電源線暫時從擴展板上拔下即可解決串口通信沖突的問題。
3.造型設(shè)計
為使作品兼具美觀性、便攜性,作者還為作品設(shè)計了一個3D造型,并將造型3D打印出來。作者選用了3DONE這款軟件進行3D造型設(shè)計,3DONE是一款專為中小學(xué)素質(zhì)教育開發(fā)打造的3D設(shè)計軟件。該軟件實現(xiàn)了3D設(shè)計和3D打印軟件的直接連接,并提供豐富的案例庫包括本地磁盤和網(wǎng)絡(luò)云盤資源,為中小學(xué)生提供一個簡單易用、自由暢想的3D設(shè)計平臺。圖9是作品的3D造型設(shè)計效果圖,它是由寵物雞造型[注],六面體盒子和盒子后蓋三個部分組成的,其中六面體盒子用來安裝各種電子模塊,在設(shè)計時先用游標(biāo)卡尺精確測量各電子模塊的尺寸大小,再在盒子內(nèi)設(shè)計各種卡槽和孔眼,方便后期的模塊的安裝調(diào)試。
● 系統(tǒng)軟件設(shè)計
系統(tǒng)的軟件設(shè)計基于Arduino IDE軟件開發(fā)環(huán)境,使用C/C++編程語言。Arduino有豐富的庫文件以供開發(fā)使用,利用庫文件簡化了程序開發(fā)工作。整個系統(tǒng)的軟件設(shè)計可以分為五個部分:初始化模塊、主循環(huán)loop函數(shù)、語音識別(ASR)功能模塊、其他功能函數(shù)和其他功能模塊程序。下面對軟件系統(tǒng)的各個子模塊分別加以闡述。
1.初始化模塊
初始化模塊主要完成系統(tǒng)的初始化工作。各種標(biāo)準庫頭文件的引入、全局變量的定義、時鐘模塊等各種對象的實例化都是在此模塊中完成的。
需要注意的是,系統(tǒng)時間的設(shè)置和詞條的錄入也是在本模塊中完成的。但系統(tǒng)時間的設(shè)置和詞條的錄入不必每次都去編譯,因此筆者這里使用了條件編譯#if指令,預(yù)處理器可以在編譯前處理c程序,這樣的處理不會在目標(biāo)代碼中占用空間,減少程序運行時間。例如,要修改系統(tǒng)語音識別的關(guān)鍵字詞條,只需要將“#if 0”修改成“#if 1”,編譯時即可調(diào)用ASR對象的AddWords()方法將新的詞條燒錄進語音識別模塊。
2.主循環(huán)loop函數(shù)
主程序主要負責(zé)整個系統(tǒng)的時序流程。流程大致分三個部分:①調(diào)用displayTime函數(shù),更新數(shù)碼管,按“時:分”的模式顯示實時的時間信息;②調(diào)用isTime函數(shù),判斷是否有倒計時時間到了,若時間到了則語音提示“時間到”;③監(jiān)聽語音,并根據(jù)語音識別的結(jié)果執(zhí)行相應(yīng)的處理。圖10為系統(tǒng)主程序流程圖。
3.語音識別功能模塊
幻爾科技提供了語音識別模塊的Arduino參考例程,筆者將其改造成了語音識別模塊頭文件和語音識別模塊函數(shù)實現(xiàn)兩個子模塊,方便系統(tǒng)的使用。
(1)語音識別模塊頭文件(ASR.h)
語音識別模塊頭文件主要完成ASR類的聲明和宏定義,這里有語音識別模塊中需要的成員函數(shù)的聲明和各類地址、參數(shù)的宏定義。
(2)語音識別模塊函數(shù)實現(xiàn)部分(ASR.CPP)
本模塊單元的主要內(nèi)容是語音識別類(ASR)的成員函數(shù)的實現(xiàn)。增刪、修改語音識別關(guān)鍵字詞條的成員函數(shù)AddWords()就在此模塊中,當(dāng)需要修改關(guān)鍵字詞條時,只需先在此模塊中增刪、修改AddWords()中的詞條,然后將初始化模塊中的條件編譯“#if 0”修改成“#if1”,編譯時即可將新的詞條錄入語音識別模塊中。在函數(shù)ASRAddWords(unsigned char idNum,unsigned char *words)中,idNum是詞條對應(yīng)的識別號,1~255隨意設(shè)置。當(dāng)識別到該號碼對應(yīng)的詞條語音時,模塊會將識別號存放到ASR_RESULT_ADDR處,等待主機讀取,讀取后清0,words為要識別漢字詞條的拼音,漢字之間用空格隔開。
4.其他功能函數(shù)
為實現(xiàn)系統(tǒng)的功能,軟件系統(tǒng)中還設(shè)計了一些其他的功能函數(shù):①我要寫作業(yè)函數(shù)(iWanttoWork)實現(xiàn)寫作業(yè)的整個交互流程;②displayTime函數(shù)實現(xiàn)數(shù)碼管更新顯示實時時間功能;③倒計時函數(shù)(daoJiShi)和時間到了函數(shù)(isTime)實現(xiàn)設(shè)置倒計時時間和判斷倒計時時間是否到了的功能。下頁圖11為“iWanttoWork”功能函數(shù)的流程圖。
5.其他功能模塊程序
本系統(tǒng)中還使用了其他的功能模塊,諸如MP3音頻模塊、DS1302時鐘模塊、TM1650數(shù)碼管模塊。但由于在Arduino平臺上使用這些模塊很方便,相比語音識別模塊這些模塊的頭文件和范例程序在Arduino IDE中很容易獲取和使用,在此就不一一闡述了。
在Arduino IDE上獲取所需模塊的庫文件的方法:項目→加載庫→管理庫,在彈出的“庫管理器”窗口中輸入關(guān)鍵詞即可搜索到所需的庫文件。
● 結(jié)語
本文主要對基于Arduino和語音識別(ASR)的專注力提升神器的設(shè)計與實現(xiàn)進行了闡述。系統(tǒng)的設(shè)計工作主要包括系統(tǒng)硬件平臺的搭建和軟件的實現(xiàn)。經(jīng)過反復(fù)測試和修改,該系統(tǒng)在無噪或低噪環(huán)境下運行良好,可以實現(xiàn)非特定人聲語音識別和交互,識別精度非常高,系統(tǒng)各項功能運行正常,能實現(xiàn)陪伴孩子寫作業(yè)、提高孩子寫作業(yè)時的專注力、幫助孩子養(yǎng)成良好習(xí)慣的設(shè)定目標(biāo)。
參考文獻:
[1]Arduino Nano引腳分配圖及定義詳解DB/[EB/OL].https://blog.csdn.net/malcolm_110/article/details/95320094,2019-7-10.
[2]深圳市幻爾科技有限公司.語音識別模塊用戶手冊[EB/OL].https://pan.baidu.com/share/init?surl=lThpvkv6UdTjHB7iTE6fAQ,2020-5-14.
注:寵物雞的造型借鑒了網(wǎng)絡(luò)資源:http://www.aigei.com/s?q=%E5%8D%81%E4%BA%8C%E7%94%9F%E8%82%96%E5%AE%A0%E7%89%A9%E9%B8%A1&type=3d&detailTab=file