常國權(quán),尚進(jìn)輝,孫帥霞
(安陽工學(xué)院 計(jì)算機(jī)科學(xué)與信息工程學(xué)院,河南 安陽 455000)
服用藥品是人們用來治療和預(yù)防疾病的重要手段,藥品對保障人們的身體健康和生命安全有著重要的意義,但錯(cuò)誤服藥會引發(fā)事故風(fēng)險(xiǎn)。目前,我國60 周歲及以上的人口高達(dá)2.5 億多人,占比達(dá)18.1%,老年人群體的增多加大了患病和吃藥的幾率,另外,慢性病患者以及其他需長期服藥的人群也存在忘記服藥、過量服藥、錯(cuò)誤服藥等問題,每年都有因過量服藥或錯(cuò)誤服藥的風(fēng)險(xiǎn)案例發(fā)生。為了避免以上風(fēng)險(xiǎn)的發(fā)生,本文設(shè)計(jì)了一種基于物聯(lián)網(wǎng)和單片機(jī)控制的智能藥盒,該藥盒可自動通過語音和三色LED 燈提醒用藥人按時(shí)服藥,并可通過Wi-Fi 或4G 模塊把服藥情況發(fā)給其家人或監(jiān)護(hù)人,以便于他們隨時(shí)檢查服藥情況。該藥盒有效防止重復(fù)用藥、忘記用藥、藥物過期等風(fēng)險(xiǎn)的發(fā)生,幫助老年人群體及其他需長期服藥的人群建立科學(xué)良好的用藥習(xí)慣,這對促進(jìn)我國康復(fù)醫(yī)療事業(yè)的發(fā)展具有重要的意義。
該系統(tǒng)采用STC 公司最新生產(chǎn)的STC8A8K64D4 單片機(jī)為核心,并擴(kuò)展了顯示觸摸屏、時(shí)鐘模塊、語音模塊、LED 燈驅(qū)動模塊、4G 模塊、Wi-Fi 模塊等模塊進(jìn)行設(shè)計(jì)。
顯示觸摸屏模塊用來顯示系統(tǒng)當(dāng)前的日期、時(shí)間和系統(tǒng)的其他參數(shù)信息,也可以用來設(shè)置系統(tǒng)時(shí)間、服藥時(shí)間等參數(shù);時(shí)鐘模塊用來維持系統(tǒng)的時(shí)間,作為語音提醒的時(shí)間基準(zhǔn),STC8 單片機(jī)實(shí)時(shí)讀取時(shí)鐘模塊中的時(shí)間,并和預(yù)先設(shè)定的服藥時(shí)間進(jìn)行比對;語音模塊用來播放語音提醒,也可以通過麥克風(fēng)和用戶進(jìn)行簡單的語音交互;除了語音提醒之外,系統(tǒng)還在藥盒上放置了多個(gè)三色LED 燈,每個(gè)LED燈的三種顏色可以分別代表每個(gè)藥倉的狀態(tài);4G 模塊和Wi-Fi 模塊用來連接云平臺,通過4G 模塊或Wi-Fi 模塊可以把各種信息上傳到云平臺,用戶也可以通過智能手機(jī)登錄到云平臺查看或發(fā)送實(shí)時(shí)消息,以便于對服藥情況進(jìn)行及時(shí)查詢;語音模塊通過串口和單片機(jī)連接,既可以通過喇叭發(fā)出語音提醒,又可以通過麥克風(fēng)和藥盒進(jìn)行簡單的語音交互;系統(tǒng)電源模塊為系統(tǒng)中各芯片提供各種工作電壓。系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。圖1 中虛線箭頭代表無線連接方式,實(shí)線箭頭代表STC8 單片機(jī)與各個(gè)模塊或各個(gè)模塊之間的連接方式。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
系統(tǒng)的電源設(shè)計(jì)直接關(guān)系到系統(tǒng)的運(yùn)行穩(wěn)定性,考慮到系統(tǒng)可能會使用電池供電的情況,在系統(tǒng)電源設(shè)計(jì)中采用了功耗較低的電源芯片進(jìn)行設(shè)計(jì)。本系統(tǒng)中各芯片的工作電壓分為5 V 和3.3 V 兩類,因此,電源也分為5 V 和3.3 V 供電兩部分。5 V 電源供電模塊采用的是MP1584 大電流穩(wěn)壓芯片,MP1584 是DC-DC 降壓模塊,它具有較低的功耗,支持4.5 V ~28 V 的寬輸入電壓和高達(dá)3 A 的輸出電流。MP1584 把7 V ~12 V 電源轉(zhuǎn)換為穩(wěn)定的5 V 電源,供給4G 模塊、語音模塊、串口觸摸屏以及LED 燈驅(qū)動模塊等。3.3 V 電源供電部分采用的是上海明達(dá)微電子有限公司生產(chǎn)的MD8233,它是低壓差微功耗LDO,具有高耐壓、低壓差、低電流消耗的優(yōu)點(diǎn),待機(jī)電流在微安級,并可輸出150 mA 以上的電流,3.3 V 電源主要用來給STC8 單片機(jī)、Wi-Fi 模塊、時(shí)鐘等模塊供電。系統(tǒng)電源設(shè)計(jì)原理圖如圖2所示。
圖2 系統(tǒng)電源設(shè)計(jì)原理圖
在多方面比較各類單片機(jī)的綜合性能和指標(biāo)之后,本系統(tǒng)采用了STC 公司最新開發(fā)的STC8A8K64D4 單片機(jī)進(jìn)行系統(tǒng)設(shè)計(jì)。STC8 是高速8051 系列單片機(jī),它內(nèi)部有8 K RAM,64 K Flash,4 個(gè)串行口,12 位ADC 等豐富資源,并在內(nèi)部集成了高精度的晶振電路,且晶振可在6 MHz ~45 MHz 范圍內(nèi)編程設(shè)置。它突出的優(yōu)點(diǎn)是速度快、性價(jià)比高、功耗低、資源豐富,設(shè)計(jì)起來比較方便,可用在智能控制、智能儀器儀表等應(yīng)用場合。該單片機(jī)工作電壓為1.9 V ~ 5.5 V,并有多種封裝可選,此處采用的是LQFP48 引腳的封裝,為了方便與4G 模塊和Wi-Fi 模塊接口,此處,STC8 采用3.3 V 工作電壓供電。系統(tǒng)主控電路及網(wǎng)絡(luò)模塊接口設(shè)計(jì)原理圖如圖3所示。
網(wǎng)絡(luò)接口模塊設(shè)計(jì)分為Wi-Fi 模塊和4G 模塊設(shè)計(jì)。Wi-Fi 模塊采用的是串口Wi-Fi 模塊ESP8266,如圖3 中J7所示。ESP8266 是一款低功耗的網(wǎng)絡(luò)透傳模塊,它專為移動設(shè)備和物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì),可將用戶的設(shè)備連接到Wi-Fi 無線網(wǎng)絡(luò),進(jìn)行互聯(lián)網(wǎng)或局域網(wǎng)通信,實(shí)現(xiàn)聯(lián)網(wǎng)功能。此處,STC8 單片機(jī)通過串行口1 和ESP8266 進(jìn)行通信,因?yàn)榇锌? 是ISP 程序下載接口,所以,這里通過軟件編程的方法,把串行口1 轉(zhuǎn)移到P3.6 和P3.7,使得串行口1 實(shí)現(xiàn)復(fù)用功能。因?yàn)镋SP8266 的工作電壓為3.3 V,所以,這里直接把ESP8266 的RX、TX 分別和P3.6、P3.7 連接。ERST是ESP8266 的復(fù)位引腳,該引腳連接到STC8 單片機(jī)的P1.6引腳,作為控制ESP8266 退出透傳并對其進(jìn)行設(shè)置的手段。
4G 模塊采用的是上海移遠(yuǎn)通信技術(shù)股份有限公司生產(chǎn)的透傳模塊EC200S,該模塊是移遠(yuǎn)公司專門為M2M 和IoT應(yīng)用領(lǐng)域而設(shè)計(jì)的無線通信模塊,它內(nèi)置多種網(wǎng)絡(luò)協(xié)議,并集成了USB、WLAN、串口等多個(gè)工業(yè)標(biāo)準(zhǔn)接口,本系統(tǒng)采用的是串口接口。因?yàn)镋C200S 是一個(gè)有144 個(gè)引腳的LCC 和LGA 混合封裝的貼片式模塊,而且還需要特殊的通信接口電路及供電電路等外圍電路,所以,它不適合和STC8 單片機(jī)直接接口,本系統(tǒng)采用的方法是把EC200S 加上外圍電路封裝成一個(gè)方便和單片機(jī)接口的通用4G 模塊,圖3 中J5、J6 為EC200S 封裝后的雙排接口,封裝后的模塊采用5 V 電源供電,串口和STC8 單片機(jī)串行口2 相連;其中,STATUS 用于指示模塊的工作狀態(tài),當(dāng)模塊正常開機(jī)時(shí),STATUS 會輸出低電平;POWER 用來使4G 模塊開機(jī)和關(guān)機(jī),POWER 連接到STC8 單片機(jī)的P1.3,可以通過P1.3 輸出符合開關(guān)機(jī)時(shí)序的高低電平使4G 模塊開機(jī)和關(guān)機(jī)。
圖3 系統(tǒng)主控電路及無線模塊接口原理圖
為方便用戶與智能藥盒的語音交互,本設(shè)計(jì)采用成都啟英泰倫科技有限公司生產(chǎn)的AI 智能語音芯片CI1122 實(shí)現(xiàn)了語音的輸入和輸出。CI1122 是一款具備專用于智能語音交互分析與處理等功能的人工智能芯片,它內(nèi)置RISC-V高性能處理器內(nèi)核和低功耗Audio Codec 模塊,同時(shí)該芯片還集成多路UART、IIC、GPIO 等外圍控制接口,非常適合開發(fā)低成本高性能的單芯片智能語音離線識別方案。這里采用的是由CI1122 芯片及外圍電路封裝而成的語音模塊CI-C22GS02S,該模塊可采用5 V 電壓供電,但它的IO口通信電平為3.3 V。單片機(jī)與語音模塊接口電路原理圖如圖4所示。
語音模塊和STC8 單片機(jī)采用串行口通信方式,語音模塊的串行口和STC8 單片機(jī)的串行口4 相連接,即語音模塊的RX、TX 引腳分別與STC8 單片機(jī)的P0.3、P0.2 相連接。圖4 中的J3 接口為語音模塊的程序升級接口,用來給語音模塊升級個(gè)性化的語音程序;J8 為升級時(shí)的選擇跳線,升級程序時(shí)把J8 斷開,即可通過語音模塊的串行口UART0 對芯片內(nèi)部的Nor Flash 燒錄固件;J9 為喇叭接口,J10 為麥克風(fēng)接口。
圖4 單片機(jī)與語音模塊接口電路原理圖
系統(tǒng)其他接口電路模塊包括彩色觸摸屏、三色LED 提醒燈以及時(shí)鐘模塊等,系統(tǒng)其他接口電路設(shè)計(jì)原理圖如圖5所示。彩色觸摸屏模塊采用的是320×240 分辨率的串口屏,該屏幕通過串行口和STC8 單片機(jī)進(jìn)行通信,接口如圖5 中的J4,它連接的是單片機(jī)的串行口3,其中ACTIVE 引腳用來打開屏幕背光;U2 是DS1302 時(shí)鐘模塊,它和單片機(jī)采用模擬SPI 時(shí)序進(jìn)行通信,因此,它的3 個(gè)引腳連接STC8單片機(jī)的3 個(gè)普通IO 就可以了;J2 是三色LED 提醒燈接口,由于每個(gè)藥倉上面需要放一個(gè)三色LED 燈,所以三色LED燈的個(gè)數(shù)較多,因此這里采用專用的LED 驅(qū)動芯片TM1640來實(shí)現(xiàn),該芯片可以驅(qū)動128 個(gè)LED 燈,它和單片機(jī)只需要2 個(gè)接口即可通信。
圖5 系統(tǒng)其他接口電路設(shè)計(jì)原理圖
系統(tǒng)軟件設(shè)計(jì)主要包括STC8 單片機(jī)下位機(jī)軟件設(shè)計(jì)和語音模塊SDK 軟件設(shè)計(jì),這里主要論述軟件的設(shè)計(jì)流程,下位機(jī)主要在Keil C 開發(fā)環(huán)境中用C 語言編寫,并使用STC-ISP 軟件下載到STC8 單片機(jī)中。語音模塊的軟件設(shè)計(jì)采用官方提供的SDK 軟件開發(fā)包,并通過串口編程軟件下載到語音模塊中。
系統(tǒng)正常上電之后,會進(jìn)行自檢及系統(tǒng)初始化工作,STC8 單片機(jī)從EEPROM 中讀取系統(tǒng)的各種參數(shù)信息并進(jìn)行初始化工作,這些參數(shù)信息包括:服藥提醒時(shí)間列表、Wi-Fi 連接的路由器信息、4G 模塊的參數(shù)信息、屏幕顯示的參數(shù)信息、語音模塊的參數(shù)信息等,并根據(jù)讀取到的參數(shù)信息對各個(gè)模塊進(jìn)行初始化操作。系統(tǒng)讀取到各個(gè)模塊的基本參數(shù)之后,首先進(jìn)入脫機(jī)模式,在LCD 顯示屏上顯示當(dāng)前的時(shí)間、服藥時(shí)間等相關(guān)信息,進(jìn)行簡單的語音播報(bào)提示,并點(diǎn)亮相應(yīng)藥倉上的三色LED 提醒燈,紅色提示空倉,綠色提示有藥品,藍(lán)燈閃爍提醒該服用這個(gè)倉位的藥品。
完成以上操作之后,系統(tǒng)開始進(jìn)行連接網(wǎng)絡(luò),根據(jù)前面讀取的Wi-Fi 網(wǎng)絡(luò)信息,嘗試連接指定的無線網(wǎng)絡(luò)。STC8單片機(jī)通過串行口1 發(fā)送AT 指令對Wi-Fi 模塊進(jìn)行配置,根據(jù)指定的網(wǎng)絡(luò)名和密碼連接到指定的網(wǎng)絡(luò),如果Wi-Fi 網(wǎng)絡(luò)連接認(rèn)證成功,可進(jìn)一步采用Wi-Fi 網(wǎng)絡(luò)連接到云平臺,STC8 單片機(jī)設(shè)置Wi-Fi 模塊進(jìn)入透傳模式,等待數(shù)據(jù)的上傳或下載。此時(shí),STC8 單片機(jī)就會忽略下一步的4G 網(wǎng)絡(luò)的連接,采用Wi-Fi 網(wǎng)絡(luò)作為系統(tǒng)網(wǎng)絡(luò)。如果Wi-Fi 網(wǎng)絡(luò)連接認(rèn)證失敗,STC8 單片機(jī)就需要進(jìn)一步連接4G 網(wǎng)絡(luò)。STC8 單片機(jī)首先拉低4G 模塊的POWER 引腳約500 ms 進(jìn)行開機(jī)操作,并實(shí)時(shí)檢測4G 模塊STATUS 引腳的狀態(tài),如果STATUS 引腳一直為高電平,表明4G 模塊出現(xiàn)故障,通過LCD 顯示屏顯示相關(guān)信息,同時(shí)通過語音播報(bào)故障信息。當(dāng)STATUS 輸出低電平時(shí),表明4G 模塊已經(jīng)開機(jī),同時(shí)單片機(jī)串行口2 也會收到“OK”兩個(gè)字符,然后,單片機(jī)通過串行口2 給4G 模塊發(fā)送AT 指令來進(jìn)一步查詢SIM 卡是否正常。單片機(jī)發(fā)送“AT+CPIN? ”AT 指令給4G 模塊,并在500 ms 超時(shí)內(nèi)等待4G 模塊返回信息,如果模塊返回READY 則表示SIM 卡正常,后面就要通過相應(yīng)的AT 指令依次進(jìn)行SIM 卡信號質(zhì)量的檢查、SIM 卡是否附著網(wǎng)絡(luò)、SIM 卡是否注冊網(wǎng)絡(luò)等操作,如果SIM 卡信號正常,就可以進(jìn)一步連接云平臺或者電腦客戶端服務(wù)器了。網(wǎng)絡(luò)連接成功之后,系統(tǒng)會向網(wǎng)絡(luò)接收端發(fā)送一些藥盒的相關(guān)信息,如果連接失敗,則跳過該步驟,進(jìn)入脫機(jī)工作模式。
CI-C22GS02S 語音模塊的軟件設(shè)計(jì)采用的是官方提供的SDK 開發(fā)包,使用該開發(fā)包可以對語音模塊的命令詞列表和播報(bào)詞列表進(jìn)行個(gè)性化的修改,并通過串口工具下載到模塊中,當(dāng)用戶通過麥克風(fēng)發(fā)出語音后,語音模塊會根據(jù)命令詞列表和播報(bào)詞列表進(jìn)行比較,識別出相應(yīng)的詞匯,并找到用戶設(shè)定的命令代碼,再通過串行口發(fā)給STC8 單片機(jī),單片機(jī)收到命令代碼之后,和存儲EEPROM 中的參數(shù)進(jìn)行比較,從而判斷出用戶發(fā)的語音內(nèi)容。單片機(jī)再通過串行口給語音模塊發(fā)送事先設(shè)定好的語音ID,語音模塊通過喇叭播報(bào)出對應(yīng)的語音,這樣系統(tǒng)就可以和用戶進(jìn)行簡單的語音交互了。系統(tǒng)流程圖如圖6所示。
圖6 系統(tǒng)流程圖
為方便對日期和時(shí)間進(jìn)行比較,這里采用把年、月、日、時(shí)、分、秒做簡單移位而合成一個(gè)32 位時(shí)間戳的方法,相比采用Unix 時(shí)間戳這種方法運(yùn)算速度更快,該時(shí)間戳在還原時(shí)間的時(shí)候只需做相反的移位操作即可,時(shí)間戳的合成方法如圖7所示。系統(tǒng)進(jìn)入正常工作模式之后,STC8 單片機(jī)會在while 循環(huán)中讀取DS1302 時(shí)鐘的日期和時(shí)間,并按照圖7 的方法合成時(shí)間戳,和用戶設(shè)定的服藥時(shí)間戳一一進(jìn)行比較,一旦系統(tǒng)當(dāng)前的時(shí)間戳大于或等于用戶設(shè)定的時(shí)間戳,則表示服藥時(shí)間已到,系統(tǒng)會通過語音發(fā)出提醒,并同時(shí)在屏幕和藥倉的三色LED 燈上顯示出來,如果已經(jīng)連接網(wǎng)絡(luò),則會把相關(guān)信息也上傳到網(wǎng)絡(luò)平臺。
本文設(shè)計(jì)了一種基于物聯(lián)網(wǎng)的智能藥盒,實(shí)現(xiàn)了語音播報(bào)、三色LED 燈閃爍等多種提醒方式以及觸摸屏交互、語音交互等多種交互手段,來提醒老年人群體及其他需長期服藥的人群及時(shí)服藥,其家人或監(jiān)護(hù)人也可以通過Wi-Fi 或4G模塊等無線網(wǎng)絡(luò)來實(shí)時(shí)監(jiān)查用藥情況,可有效防止重復(fù)用藥、忘記用藥、藥物過期等風(fēng)險(xiǎn)的發(fā)生,幫助服藥人群建立科學(xué)良好的用藥習(xí)慣,推廣應(yīng)用具有一定的經(jīng)濟(jì)效益和社會效益。