楊沛聰 余漢泉 謝依依 相 釗 李政樂
(佛山科學技術學院,廣東 佛山 528231)
根據第7次人口普查數據,我國65歲以上人口比重達到13.50%,已高于世界平均水平,而針對衍生出的老年人的健康問題引發了很多社會關注。其中部分老人長期為疾病困擾需要長期服藥,但由于記憶力 的衰退會忘服、錯服、漏服藥,造成疾病的惡性循環。為了解決這一難題,設計了一款智能語音控制藥箱,能通過語音控制實現開關取藥,并配有手機App設置提醒時間和數據云端實時上傳服藥數據功能,方便監護人照看老人并解決服藥問題。
該藥箱采用模塊化設計,主要包括主控模塊、語言識別模塊、Wi-Fi模塊、舵機控制模塊和光敏傳感器模塊。總體功能框架如圖1所示。

圖1 藥箱設計框架圖
藥箱可通過Wi-Fi模塊連接服務器,與手機App建立連接,能夠通過手機App設置提醒老人服藥時間,定時提醒老人按時服藥。通過光敏傳感器識別藥盒是否打開過,進而確認老人是否按時服藥,并將服藥情況發送給手機App,手機App上會記錄藥箱使用情況。藥箱能夠通過語言識別模塊識別所需藥品,并通過舵機控制模塊控制舵機打開對應藥盒,老人可以直接取藥服藥。監護人可通過手機App了解老人服藥情況。
STM32F4-ARM Cortex-M4作為主控模塊,并連接以下幾大硬件模塊:語音識別模塊ICLD3320、Wi-Fi模塊ATKESP8266、舵機控制模塊和光敏傳感器模塊。
主控模塊與Wi-Fi模塊之間通過串口建立雙向通信,主控模塊可以向Wi-Fi模塊發送數據,并通過Wi-Fi模塊發送數據到云平臺。Wi-Fi模塊可以接收云平臺的數據,并發送給主控模塊。
主控模塊與語言識別模塊之間通過串口建立單向通信,語言識別模塊識別語音后,向主控模塊發送識別到的語音對應的信號。主控模塊接收信號并進行相應操作。
主控模塊與光敏傳感器之間通過IO口建立連接,主控模塊識別IO口電平高、低判斷藥盒的開、關。在藥箱未打開的情況下,藥箱內部是無光環境或光強達不到設定值,此時光敏傳感器模塊輸出高電平,由此判斷用戶未打開藥箱取藥;當用戶打開藥箱后,藥箱內部光照強度超過設定值,光敏傳感器模塊會輸出低電平。
主控模塊與舵機控制模塊之間通過IIC協議進行通信,主控模塊通過IIC協議設置舵機模塊各路PWM輸出的占空比大小,進而控制舵機轉動,控制藥盒的開、關。
藥箱設計流程圖如圖2所示。

圖2 程序流程圖
語音信號的采集和識別功能主要由基于LD3320芯片的語音識別模塊實現。該芯片內部設計有專門的語音信號處理器,最多支持50條關鍵詞的輸入;LD3320是非特定人語音識別芯片,即語音聲控芯片。
工作模式如下。普通模式:直接說話,模塊直接識別;按鍵模式:按鍵觸發開始ASR進程。口令模式:需要一級喚醒詞。
使用前需要在模塊的程序代碼中添加識別的關鍵詞。識別語音后語音識別模塊以JSON格式發送數據至串口,主控模塊接收并解析相應數據,然后執行對應動作。
其中的語音識別的操作順序是:通用初始化→語音識別初始化→寫入識別列表→開始識別,并準備好中斷響應函數,打開中斷允許位。
該藥箱采用的是ATK-ESP8266的UART-Wi-Fi模塊,ATK-ESP8266模塊采用串口(LVTTL)與 MCU(或其他串口設備)通信,內置TCP/IP協議棧,能夠實現串口與Wi-Fi之間的轉換。通過ATK-ESP8266模塊,傳統的串口設備只是需要簡單的串口配置,即可通過網絡(Wi-Fi)傳輸自己的數據。利用TCP/IP協議線能夠實現串口和Wi-Fi的轉換。利用AT指令配置網絡參數,使用STA模式即可通過路由器連接互聯網,手機App則可實現對設備的遠程控制。通過STM32單片機程序設計,將ESP8266接入路由器或者電腦熱點,再將ESP8266配置成TCP客戶端模式,將自己的云服務器設置成TCP服務端模式,ESP8266就能夠將數據發送給服務端,手機App端也接入云服務器,就能夠實現手機與藥箱的遠程通信。藥箱物聯網部分設計框架如圖3所示。

圖3 物聯網遠程控制功能設計框架
該藥箱的設計采用的舵機控制模塊的驅動板使用PCA9685芯片,是16通道12bit PWM舵機驅動,用2個引腳通過I2C就可以驅動16個舵機。
模塊參數如下。
電壓:舵機供電5 V~7 V,接受高一點的電壓;邏輯電路電壓:3 V~5 V;通信接口:使用i2c通信,及SCL、SDA引腳;OE反使能腳:引腳低電平為使能,不接時模塊內部默認已接地使能;工作頻率:40 Hz~1000 Hz。
通過控制主控模塊向16路舵機控制模塊的特定PWM輸出路輸入特定占空比的PWM信號,就可以使其對應的舵機旋轉特定的角度,進而旋轉到指定的位置,實現對藥箱的開啟與關閉。使用16路舵機控制模塊最多可以同時控制16個舵機的不同旋轉角度,即最多可以控制16個藥盒的開、關。
該藥箱采用的光敏傳感器模塊為光敏電阻模塊,光敏電阻模塊對環境光線最敏感,用來檢測周圍環境的光線的亮度,進而觸發STM32單片機。該模塊在環境光線亮度達不到設定閾值時,DO端輸出高電平,當外界環境光線亮度超過設定閾值時,DO端輸出低電平。STM32通過識別D0端的電平高、低能夠判斷藥盒是否打開,進而確定是否已服藥。
軟件設計主要分為STM32單片機編程和手機端App編程。
STM32單片機設計是通過keil5軟件對STM32F4-ARM Cortex-M4芯片進行編程,分別對芯片串口2和串口3初始化,配置其波特率都為9600,使其分別與基于LD3320芯片的語音識別模塊和ATK-ESP8266 WiFi模塊建立連接,進而實現與它們的數據傳輸,同時初始化IIC,通過IIC協議,編寫pca9685 16路舵機控制模塊的控制函數,實現16路舵機控制模塊各路PWM輸出的控制,并且實時識別連接光敏傳感器的IO口的電平高、低,判斷藥盒的開、關情況。通過編寫程序,STM32F4-ARM Cortex-M4芯片主控芯片能夠通過各串口、IO口和IIC協議,實現對各模塊的控制以及模塊間的數據傳輸,實現藥箱所需功能。
手機端App編寫是通過Eclipse開發環境進行編程,利用Activity完成操作可視化界面,使用線性布局對頁面控件分布實現自適應。手機端通過HTTP協議以POST方式連接指定IP服務器,通過JavaScript Object Notation(JSON)格式獲取服務器傳輸的包括藥箱狀態、定時狀態的加密信息,在手機端完成解密并顯示在手機上,同時可通過發送JSON格式指令向服務器發起藥箱操作命令。
STM32單片機編程主要是通過STM32主控模塊對其他各模塊進行初始化和調用。初始化藥箱,主控模塊通過串口通信IO口連接Wi-Fi模塊和語音識別模塊,通過IIC端口連接舵機控制模塊,并對各模塊進行初始化和調用。
藥箱串口與Wi-Fi模塊建立雙向通信,并通過編寫程序,使用AT指令初始化Wi-Fi模塊,配置其模式為STA模式以及TCP客戶端模式,再通過TCP/IP協議連接到云服務器。然后STM32接收Wi-Fi模塊通過TCP/IP協議在云服務器讀取到的數據,并進行數據解析處理,然后執行相應的操作。
Wi-Fi模塊配置部分相關函數如下。
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 ", ""); //關閉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")) ////服務器名和服務器號
delay_ms(500);
UsartPrintf(USART_DEBUG, "6.ESP8266 Init OK ");
語言識別模塊使用前需先修改模塊的程序代碼中識別的關鍵詞,如“gan mao yao”“fa shao yao”和“chang yong yao”等,并設置其為口令模式,即需要通過“xiao ying”喚醒語音識別功能,然后再進行語音識別對應語句。STM32通過串口與語音識別模塊建立單向連接,數據只能從語音識別模塊發送給STM32主控模塊。語音識別模塊識別語音信號,并將識別到的信息通過串口發送給STM32主控模塊,STM32主控模塊接收數據后,進行數據解析,通過解析結果執行相應的操作。
STM32通過IIC通信及SCL、SDA這2個引腳與舵機控制模塊進行通信,通過使用IIC協議的C語言函數對舵機控制模塊進行初始化以及控制各路PWM輸出口的輸出PWM的占空比,從而實現單個或多個舵機的轉動,進而實現對藥盒開關的控制。STM32主控模塊通過WiFi模塊接收到打開藥盒的信號或者通過語音識別模塊接收到打開藥盒的信號后,控制舵機控制模塊輸出打開或關閉對應藥盒的PWM信號,實現對應藥盒的開啟和關閉。
手機終端的設計使用Java語言完成,分別設計編寫安卓的頁面布局文件和Activity類文件。該設計中手機端有3個功能。使用http類連接后臺系統,云服務器會自動向App發送數據,App每隔1 s自動接收云服務器發來的藥箱數據;通過對接收到的數據進行解密,解析出藥箱的打開和關閉情況,以及是否按時開啟過藥箱;實時監控服藥情況,如出現異常則立即在手機App界面上彈出提示;軟件能夠獲取藥箱操作的歷史記錄,并在軟件界面中顯示,實現對老人服藥情況的監控。
App端能夠獲取云服務器端發送過來的數據,同時也可以對藥箱發送請求指令或數據。App的設計采用騰訊云服務器,云服務器后端采用Linux+Nginx+Php+Mysql架構,藥箱和手機App發送和接收的數據均由云服務器進行存儲和轉發,進而實現數據和指令的遠距離傳輸以及保存。
該智能語音控制藥箱具有App遠程控制及實時監測功能,語言識別功能,提醒按時服藥及未及時服藥提醒功能,能夠幫助老人按時按量服藥,對保障老人身體健康有極其重要的作用。藥箱能夠將藥箱的使用情況實時發送到手機端App,監護人能夠通過手機端App實時獲取老人的服藥情況,關注老人的身體健康,也可以為老人設置服藥提醒時間,降低老人不按時服藥的風險。該藥箱滿足有需要服藥的老人的家庭的需求,能夠讓子女對家長老人身體情況的了解,防止意外的發送。隨著我國人口老齡化加重,該產品的市場前景廣闊。