楊沛聰 余漢泉 謝依依 相 釗 李政樂
(佛山科學(xué)技術(shù)學(xué)院,廣東 佛山 528231)
根據(jù)第7次人口普查數(shù)據(jù),我國65歲以上人口比重達(dá)到13.50%,已高于世界平均水平,而針對衍生出的老年人的健康問題引發(fā)了很多社會關(guān)注。其中部分老人長期為疾病困擾需要長期服藥,但由于記憶力 的衰退會忘服、錯服、漏服藥,造成疾病的惡性循環(huán)。為了解決這一難題,設(shè)計了一款智能語音控制藥箱,能通過語音控制實現(xiàn)開關(guān)取藥,并配有手機(jī)App設(shè)置提醒時間和數(shù)據(jù)云端實時上傳服藥數(shù)據(jù)功能,方便監(jiān)護(hù)人照看老人并解決服藥問題。
該藥箱采用模塊化設(shè)計,主要包括主控模塊、語言識別模塊、Wi-Fi模塊、舵機(jī)控制模塊和光敏傳感器模塊??傮w功能框架如圖1所示。
圖1 藥箱設(shè)計框架圖
藥箱可通過Wi-Fi模塊連接服務(wù)器,與手機(jī)App建立連接,能夠通過手機(jī)App設(shè)置提醒老人服藥時間,定時提醒老人按時服藥。通過光敏傳感器識別藥盒是否打開過,進(jìn)而確認(rèn)老人是否按時服藥,并將服藥情況發(fā)送給手機(jī)App,手機(jī)App上會記錄藥箱使用情況。藥箱能夠通過語言識別模塊識別所需藥品,并通過舵機(jī)控制模塊控制舵機(jī)打開對應(yīng)藥盒,老人可以直接取藥服藥。監(jiān)護(hù)人可通過手機(jī)App了解老人服藥情況。
STM32F4-ARM Cortex-M4作為主控模塊,并連接以下幾大硬件模塊:語音識別模塊ICLD3320、Wi-Fi模塊ATKESP8266、舵機(jī)控制模塊和光敏傳感器模塊。
主控模塊與Wi-Fi模塊之間通過串口建立雙向通信,主控模塊可以向Wi-Fi模塊發(fā)送數(shù)據(jù),并通過Wi-Fi模塊發(fā)送數(shù)據(jù)到云平臺。Wi-Fi模塊可以接收云平臺的數(shù)據(jù),并發(fā)送給主控模塊。
主控模塊與語言識別模塊之間通過串口建立單向通信,語言識別模塊識別語音后,向主控模塊發(fā)送識別到的語音對應(yīng)的信號。主控模塊接收信號并進(jìn)行相應(yīng)操作。
主控模塊與光敏傳感器之間通過IO口建立連接,主控模塊識別IO口電平高、低判斷藥盒的開、關(guān)。在藥箱未打開的情況下,藥箱內(nèi)部是無光環(huán)境或光強(qiáng)達(dá)不到設(shè)定值,此時光敏傳感器模塊輸出高電平,由此判斷用戶未打開藥箱取藥;當(dāng)用戶打開藥箱后,藥箱內(nèi)部光照強(qiáng)度超過設(shè)定值,光敏傳感器模塊會輸出低電平。
主控模塊與舵機(jī)控制模塊之間通過IIC協(xié)議進(jìn)行通信,主控模塊通過IIC協(xié)議設(shè)置舵機(jī)模塊各路PWM輸出的占空比大小,進(jìn)而控制舵機(jī)轉(zhuǎn)動,控制藥盒的開、關(guān)。
藥箱設(shè)計流程圖如圖2所示。
圖2 程序流程圖
語音信號的采集和識別功能主要由基于LD3320芯片的語音識別模塊實現(xiàn)。該芯片內(nèi)部設(shè)計有專門的語音信號處理器,最多支持50條關(guān)鍵詞的輸入;LD3320是非特定人語音識別芯片,即語音聲控芯片。
工作模式如下。普通模式:直接說話,模塊直接識別;按鍵模式:按鍵觸發(fā)開始ASR進(jìn)程。口令模式:需要一級喚醒詞。
使用前需要在模塊的程序代碼中添加識別的關(guān)鍵詞。識別語音后語音識別模塊以JSON格式發(fā)送數(shù)據(jù)至串口,主控模塊接收并解析相應(yīng)數(shù)據(jù),然后執(zhí)行對應(yīng)動作。
其中的語音識別的操作順序是:通用初始化→語音識別初始化→寫入識別列表→開始識別,并準(zhǔn)備好中斷響應(yīng)函數(shù),打開中斷允許位。
該藥箱采用的是ATK-ESP8266的UART-Wi-Fi模塊,ATK-ESP8266模塊采用串口(LVTTL)與 MCU(或其他串口設(shè)備)通信,內(nèi)置TCP/IP協(xié)議棧,能夠?qū)崿F(xiàn)串口與Wi-Fi之間的轉(zhuǎn)換。通過ATK-ESP8266模塊,傳統(tǒng)的串口設(shè)備只是需要簡單的串口配置,即可通過網(wǎng)絡(luò)(Wi-Fi)傳輸自己的數(shù)據(jù)。利用TCP/IP協(xié)議線能夠?qū)崿F(xiàn)串口和Wi-Fi的轉(zhuǎn)換。利用AT指令配置網(wǎng)絡(luò)參數(shù),使用STA模式即可通過路由器連接互聯(lián)網(wǎng),手機(jī)App則可實現(xiàn)對設(shè)備的遠(yuǎn)程控制。通過STM32單片機(jī)程序設(shè)計,將ESP8266接入路由器或者電腦熱點(diǎn),再將ESP8266配置成TCP客戶端模式,將自己的云服務(wù)器設(shè)置成TCP服務(wù)端模式,ESP8266就能夠?qū)?shù)據(jù)發(fā)送給服務(wù)端,手機(jī)App端也接入云服務(wù)器,就能夠?qū)崿F(xiàn)手機(jī)與藥箱的遠(yuǎn)程通信。藥箱物聯(lián)網(wǎng)部分設(shè)計框架如圖3所示。
圖3 物聯(lián)網(wǎng)遠(yuǎn)程控制功能設(shè)計框架
該藥箱的設(shè)計采用的舵機(jī)控制模塊的驅(qū)動板使用PCA9685芯片,是16通道12bit PWM舵機(jī)驅(qū)動,用2個引腳通過I2C就可以驅(qū)動16個舵機(jī)。
模塊參數(shù)如下。
電壓:舵機(jī)供電5 V~7 V,接受高一點(diǎn)的電壓;邏輯電路電壓:3 V~5 V;通信接口:使用i2c通信,及SCL、SDA引腳;OE反使能腳:引腳低電平為使能,不接時模塊內(nèi)部默認(rèn)已接地使能;工作頻率:40 Hz~1000 Hz。
通過控制主控模塊向16路舵機(jī)控制模塊的特定PWM輸出路輸入特定占空比的PWM信號,就可以使其對應(yīng)的舵機(jī)旋轉(zhuǎn)特定的角度,進(jìn)而旋轉(zhuǎn)到指定的位置,實現(xiàn)對藥箱的開啟與關(guān)閉。使用16路舵機(jī)控制模塊最多可以同時控制16個舵機(jī)的不同旋轉(zhuǎn)角度,即最多可以控制16個藥盒的開、關(guān)。
該藥箱采用的光敏傳感器模塊為光敏電阻模塊,光敏電阻模塊對環(huán)境光線最敏感,用來檢測周圍環(huán)境的光線的亮度,進(jìn)而觸發(fā)STM32單片機(jī)。該模塊在環(huán)境光線亮度達(dá)不到設(shè)定閾值時,DO端輸出高電平,當(dāng)外界環(huán)境光線亮度超過設(shè)定閾值時,DO端輸出低電平。STM32通過識別D0端的電平高、低能夠判斷藥盒是否打開,進(jìn)而確定是否已服藥。
軟件設(shè)計主要分為STM32單片機(jī)編程和手機(jī)端App編程。
STM32單片機(jī)設(shè)計是通過keil5軟件對STM32F4-ARM Cortex-M4芯片進(jìn)行編程,分別對芯片串口2和串口3初始化,配置其波特率都為9600,使其分別與基于LD3320芯片的語音識別模塊和ATK-ESP8266 WiFi模塊建立連接,進(jìn)而實現(xiàn)與它們的數(shù)據(jù)傳輸,同時初始化IIC,通過IIC協(xié)議,編寫pca9685 16路舵機(jī)控制模塊的控制函數(shù),實現(xiàn)16路舵機(jī)控制模塊各路PWM輸出的控制,并且實時識別連接光敏傳感器的IO口的電平高、低,判斷藥盒的開、關(guān)情況。通過編寫程序,STM32F4-ARM Cortex-M4芯片主控芯片能夠通過各串口、IO口和IIC協(xié)議,實現(xiàn)對各模塊的控制以及模塊間的數(shù)據(jù)傳輸,實現(xiàn)藥箱所需功能。
手機(jī)端App編寫是通過Eclipse開發(fā)環(huán)境進(jìn)行編程,利用Activity完成操作可視化界面,使用線性布局對頁面控件分布實現(xiàn)自適應(yīng)。手機(jī)端通過HTTP協(xié)議以POST方式連接指定IP服務(wù)器,通過JavaScript Object Notation(JSON)格式獲取服務(wù)器傳輸?shù)陌ㄋ幭錉顟B(tài)、定時狀態(tài)的加密信息,在手機(jī)端完成解密并顯示在手機(jī)上,同時可通過發(fā)送JSON格式指令向服務(wù)器發(fā)起藥箱操作命令。
STM32單片機(jī)編程主要是通過STM32主控模塊對其他各模塊進(jìn)行初始化和調(diào)用。初始化藥箱,主控模塊通過串口通信IO口連接Wi-Fi模塊和語音識別模塊,通過IIC端口連接舵機(jī)控制模塊,并對各模塊進(jìn)行初始化和調(diào)用。
藥箱串口與Wi-Fi模塊建立雙向通信,并通過編寫程序,使用AT指令初始化Wi-Fi模塊,配置其模式為STA模式以及TCP客戶端模式,再通過TCP/IP協(xié)議連接到云服務(wù)器。然后STM32接收Wi-Fi模塊通過TCP/IP協(xié)議在云服務(wù)器讀取到的數(shù)據(jù),并進(jìn)行數(shù)據(jù)解析處理,然后執(zhí)行相應(yīng)的操作。
Wi-Fi模塊配置部分相關(guān)函數(shù)如下。
ESP8266_Clear();
UsartPrintf(USART_DEBUG, "0.AT ");
while(ESP8266_SendCmd("AT ", "OK"))
delay_ms(500);
UsartPrintf(USART_DEBUG, "1.RST ");
ESP8266_SendCmd("AT+RST ", "");
delay_ms(500);
ESP8266_SendCmd("AT+CIPCLOSE ", ""); //關(guān)閉TCP或UDP
delay_ms(500);
UsartPrintf(USART_DEBUG, "2.CWMODE ");
while(ESP8266_SendCmd("AT+CWMODE=1 ","OK")) //sta模式
delay_ms(500);
UsartPrintf(USART_DEBUG, "3.AT+CWDHCP ");
while(ESP8266_SendCmd("AT+CWDHCP=1,1 ","OK"))
delay_ms(500);
UsartPrintf(USART_DEBUG, "4.CWJAP ");
while(ESP8266_SendCmd(ESP8266_WIFI_INFO,"GOT IP")) //wifi名和密碼
delay_ms(500);
UsartPrintf(USART_DEBUG, "5.CIPSTART ");
while(ESP8266_SendCmd(ESP8266_ONENET_INFO,"CONNECT")) ////服務(wù)器名和服務(wù)器號
delay_ms(500);
UsartPrintf(USART_DEBUG, "6.ESP8266 Init OK ");
語言識別模塊使用前需先修改模塊的程序代碼中識別的關(guān)鍵詞,如“gan mao yao”“fa shao yao”和“chang yong yao”等,并設(shè)置其為口令模式,即需要通過“xiao ying”喚醒語音識別功能,然后再進(jìn)行語音識別對應(yīng)語句。STM32通過串口與語音識別模塊建立單向連接,數(shù)據(jù)只能從語音識別模塊發(fā)送給STM32主控模塊。語音識別模塊識別語音信號,并將識別到的信息通過串口發(fā)送給STM32主控模塊,STM32主控模塊接收數(shù)據(jù)后,進(jìn)行數(shù)據(jù)解析,通過解析結(jié)果執(zhí)行相應(yīng)的操作。
STM32通過IIC通信及SCL、SDA這2個引腳與舵機(jī)控制模塊進(jìn)行通信,通過使用IIC協(xié)議的C語言函數(shù)對舵機(jī)控制模塊進(jìn)行初始化以及控制各路PWM輸出口的輸出PWM的占空比,從而實現(xiàn)單個或多個舵機(jī)的轉(zhuǎn)動,進(jìn)而實現(xiàn)對藥盒開關(guān)的控制。STM32主控模塊通過WiFi模塊接收到打開藥盒的信號或者通過語音識別模塊接收到打開藥盒的信號后,控制舵機(jī)控制模塊輸出打開或關(guān)閉對應(yīng)藥盒的PWM信號,實現(xiàn)對應(yīng)藥盒的開啟和關(guān)閉。
手機(jī)終端的設(shè)計使用Java語言完成,分別設(shè)計編寫安卓的頁面布局文件和Activity類文件。該設(shè)計中手機(jī)端有3個功能。使用http類連接后臺系統(tǒng),云服務(wù)器會自動向App發(fā)送數(shù)據(jù),App每隔1 s自動接收云服務(wù)器發(fā)來的藥箱數(shù)據(jù);通過對接收到的數(shù)據(jù)進(jìn)行解密,解析出藥箱的打開和關(guān)閉情況,以及是否按時開啟過藥箱;實時監(jiān)控服藥情況,如出現(xiàn)異常則立即在手機(jī)App界面上彈出提示;軟件能夠獲取藥箱操作的歷史記錄,并在軟件界面中顯示,實現(xiàn)對老人服藥情況的監(jiān)控。
App端能夠獲取云服務(wù)器端發(fā)送過來的數(shù)據(jù),同時也可以對藥箱發(fā)送請求指令或數(shù)據(jù)。App的設(shè)計采用騰訊云服務(wù)器,云服務(wù)器后端采用Linux+Nginx+Php+Mysql架構(gòu),藥箱和手機(jī)App發(fā)送和接收的數(shù)據(jù)均由云服務(wù)器進(jìn)行存儲和轉(zhuǎn)發(fā),進(jìn)而實現(xiàn)數(shù)據(jù)和指令的遠(yuǎn)距離傳輸以及保存。
該智能語音控制藥箱具有App遠(yuǎn)程控制及實時監(jiān)測功能,語言識別功能,提醒按時服藥及未及時服藥提醒功能,能夠幫助老人按時按量服藥,對保障老人身體健康有極其重要的作用。藥箱能夠?qū)⑺幭涞氖褂们闆r實時發(fā)送到手機(jī)端App,監(jiān)護(hù)人能夠通過手機(jī)端App實時獲取老人的服藥情況,關(guān)注老人的身體健康,也可以為老人設(shè)置服藥提醒時間,降低老人不按時服藥的風(fēng)險。該藥箱滿足有需要服藥的老人的家庭的需求,能夠讓子女對家長老人身體情況的了解,防止意外的發(fā)送。隨著我國人口老齡化加重,該產(chǎn)品的市場前景廣闊。