王國偉,陸華麗,張苗苗,薛瑞晨,郝媛媛,趙 華
(南京師范大學 計算機與電子信息學院,江蘇 南京 210000)
隨著醫療和信息技術的快速發展,人們生活質量不斷提高,人類的平均壽命在不斷增加,但同時“老齡化社會”“慢性疾病”等問題日益突出[1]。成年人由于工作忙碌常忘記服藥,老年人也因為健忘而常常忘記服藥,錯誤服藥已經成為整個社會密切關注的問題[2]。為了解決用戶錯誤服藥等一系列的問題,設計一款集智能化與人性化的智能藥柜系統已經迫在眉睫。
目前,智能藥柜系統應用廣度雖遠不及其他的智能家居產品,但也已經有了一些成果[3]。美國Mobile Aspects公司采用了RFID設計了一款智能型的藥柜,可以將存儲量和使用情況記錄下來,而且可以識別藥品的使用期限,提醒過期藥品需要清除[4]。國內市場也有相關的產品出現,例如,天津德致倫電子科技有限公司基于STM32設計與實現了一款新型智能藥箱,該產品可以提醒老年人群體按時用藥,安全用藥[5]。同時國內市場上也出現了很多適合在智能手機上使用的軟件,如“醫生樹”“醫指通”等[6]。但以上涉及的產品存在系統復雜,實施困難,成本較高,功能相對單一等一系列問題,并不能保證正確的人在正確的時間服用正確的藥物。
為了解決以上問題,本文結合多種產品的優點,從用戶實際使用時易出現的問題的角度出發,設計一款基于樹莓派(Raspberry PI)的智能藥柜系統。在設計的智能藥柜系統中,采用指紋模塊以識別服藥對象、采用掃碼模塊掃入條碼編號、利用網絡爬蟲技術提取并存儲藥品信息、搭建數據庫用于信息管理。通過以上設計結合開發的交互界面,保證了用戶在正確的時間服用正確的藥物。為了進一步提高系統的可用性,在Android Studio開發平臺設計了一款基于智能保健系統的掌上管理應用程序(APP),APP可以遠程查看和設置服務器的藥品信息和用戶信息。實驗表明,本文提出的系統實施成本較低、功能齊全,從用戶使用需求出發,解決了現有產品無法識別身份、無法管理信息的問題。
本文設計的智能藥柜由樹莓派主控板、條形碼掃入模塊、指紋識別模塊、鬧鐘提醒模塊、電磁鎖模塊和智能Android手機組成,系統總體架構如圖1所示。用戶通過樹莓派顯示器進行人機交互,移動終端通過無線網絡獲得本地服務器數據庫數據。

圖1 系統總體架構
選用的樹莓派主控板是一款基于ARM的微型電腦主板,有40個引腳,包括4個USB接口,以及1個HDMI視頻線接口[7]。圖1中,電磁鎖模塊采用GPIO高低電平控制的方式;指紋模塊采用串口通信,RXD與TXD交叉連接;掃碼模塊和鬧鐘模塊采用USB的方式與主控板通信。
智能藥柜功能模塊的驅動和上層通信均采用Python語言設計,功能代碼在PyCharm平臺上完成。指紋電路用于錄入用戶指紋,通過指紋特征值比對確認身份進入用戶界面,顯示用戶信息。隨后可以通過存取藥品模塊,掃入藥品條碼檢索提取藥品信息并存儲、顯示當前用戶該服用的藥物并取出、同時可以取出其他藥品;可在服藥設置模塊選擇藥物后顯示藥品具體信息,并根據用法用量設置服藥鬧鐘時間;可在信息查詢模塊查詢服藥記錄、查詢藥品庫存、查詢存取藥日志;可在參數設置模塊設置用戶信息和系統設置。程序流程如圖2所示。

圖2 程序流程
指紋模塊和主控的通信采用主從模式,主設備發送的命令以及從設備模塊的應答根據數據長度分為等于8 B和大于8 B兩類,大于8 B的數據格式為“數據頭+數據包”,數據頭的格式見表1所列。其中:CMD為命令/應答類型;P1,P2,P3為命令參數;Q1,Q2,Q3為應答參數,Q3用于返回操作的有效性信息,0x00為操作成功,0x01為操作失敗,0x04為數據庫已滿,0x06表示用戶已存在。

表1 數據頭格式
為了確保指紋數據庫指紋的唯一性,1枚指紋只能添加1個用戶,需要將模塊設置為“禁止重復模式”,此時CMD設置為0x2D,P1設置為0,P2設置為Byte5=1:0。在采集圖像時,命令數據長度為8 B,CMD=0x24,P1,P2,P3為0,應答數據包中指紋圖像200×264像素,每個像素灰度用8位表示,指紋圖像如圖3所示,模塊成功上傳指紋圖像后提取指紋的特征值,按指定用戶號存入DSP模塊數據庫中。

圖3 指紋圖像
下傳指紋特征值與DSP模塊數據庫比對為1∶N時,CMD=0x43,命令格式為“數據頭+數據包”,數據包中存入當前用戶的指紋特征值。
服務器的數據庫使用目前最流行的關系型和關聯性數據庫管理系統MySQL[8]。關聯性數據庫將數據保存在不同的表中,而不是將所有的數據放在一個大倉庫,這樣就提高了速度和靈活性。MySQL使用的操作語言是SQL,操作數據非常便捷。
設計的智能藥柜系統的數據庫需要存儲用戶信息、藥品庫存信息、服藥記錄信息、存藥取藥日志信息、藥品信息。
建立的表與對應的含義見表2所列。

表2 數據庫表
掃碼存藥功能采用掃碼模塊識別藥盒上的條碼,系統將條碼編號輸入到“1藥網”藥品網站檢索此藥品,進一步地,系統爬蟲模塊爬取藥品的名稱、功能主治、用法用量、用藥禁忌、不良反應并保存到數據庫藥品信息表中,系統流程如圖4所示。掃碼模塊錄入藥盒條碼編號并檢索信息過程如圖5所示。

圖4 系統流程圖

圖5 掃碼檢索藥品過程
傳統的爬蟲通過直接模擬HTTP請求來爬取站點信息,由于這種方式和瀏覽器訪問差異比較明顯,很多站點都采取了反爬手段,無法有效地爬取需要的信息。為了避免站點的反爬導致藥品信息爬取失敗,本文采用Selenium爬蟲框架對藥品進行主要信息檢索、分類、存儲。Selenium是一個用于對Web網頁進行自動化測試的工具,可以通過它提供的方法自動操作瀏覽器,完全模擬人的操作行為,瀏覽器選擇Google Chrome 87.0.4280.88,同時安裝對應版本的驅動WebDriver。Selenium通過WebDriver協議控制瀏覽器來完成一系列的任務。首先,通過Selenium的API得到“1藥網”輸入框對象;接下來在輸入框輸入條碼編號進入此藥品對應的頁面,此時就拿到了該藥品網頁的HTML源碼;下一步利用Xpath方法提取系統需要的“藥品名稱”“功能主治”“用法用量”“用藥禁忌”“不良反應”。爬取過程如圖6所示。在數據庫藥品信息表中創建字段,將上述5類藥品信息保存至數據庫中。創建的字段與對應的含義見表3所列。

圖6 爬取過程

表3 MySQL藥物信息字段
智能藥柜系統用戶界面設計采用PyQt5工具包。PyQt是由 Phil Thompson開發的一個創建GUI應用程序的工具包,其是Python編程語言和Qt庫的成功融合[9-10]。在本系統上位機的設計中,使用QtDeSinger設計用戶GUI,將生成的UI文件通過PYUIC5工具轉換成PY文件,下一步在PyCharm平臺編寫功能代碼,使用到的組件包括QWidget、QLabel、QPushButton、QTextEdit、QMessageBox、QTextBrowse。智能藥柜登錄頁面如圖7所示。

圖7 智能藥柜登錄頁面
應用程序(APP)的設計使用Java語言,在Android Studio平臺上完成[11]。手機APP模塊包括存取藥日志、健康信息、服藥記錄、藥品庫存信息和用戶信息5個子模塊,如圖8所示。其中:存取藥日志模塊用于查看存藥和取藥記錄;健康信息模塊用于查看用藥禁忌;服藥記錄模塊用于查看用戶歷史服藥記錄;藥品庫存信息模塊用于查看藥品信息及藥品的剩余量;用戶信息模塊用于查看用戶的個人信息。

圖8 手機APP功能設計框圖
數據庫操作使用JDBC(Java Database Connectivity)。JDBC是實現Java應用程序與各類不一樣數據庫會話的一種體制,主要作用是實現了對數據庫的訪問和操作。JDBC能實現的主要功能包括:請求連接數據庫、向數據庫發送 SQL請求、查詢結果等功能[12]。其實現步驟為:加載JDBC驅動程序;提供JDBC連接的URL;創建數據庫的鏈接和執行SQL語句操作[13]。加載驅動就是在使用數據庫之前需要導入MySQL和JDBC的驅動包到Android的Java build path[14],使用JDBC驅動程序鏈接MySQL數據庫,連接成功之后就可以使用SQL語句對數據庫進行操作,在MySQL數據庫中建立數據表。
本文通過硬件及軟件的設計,實現了如圖9所示的智能藥柜。為了驗證系統的可行性和系統工作流程,將可觸摸顯示器安裝到藥柜上,將主控板及周邊功能模塊部署到藥柜對應位置。首先給主控板供電,設置目標IP地址為192.168.1.101,固定端口號。經過測試,Android手機APP與數據庫可以做到實時通信,各功能模塊均可正常工作。系統各模塊如10所示。

圖9 實物圖

圖10 模塊實物圖
登入系統后進入主頁面,主頁面功能包括:
(1)顯示當前用戶信息;
(2)存取藥品模塊,包括當前用戶此時需要服用的藥物、選擇其他藥物以及掃入藥品條形碼檢索藥品信息并存儲;
(3)服藥設置模塊,選擇該用戶關聯下的藥品,并調取數據庫關于該藥品的基本信息,根據用法用量設置服藥鬧鐘并在右側顯示該藥品的圖片;
(4)參數設置模塊,包括用戶信息設置以及系統設置;
(5)信息查詢模塊,包括歷史服藥記錄查詢、藥品庫存查詢以及存取藥品記錄查詢。
系統主頁面如圖11所示。

圖11 智能藥柜系統
點擊“歷史服藥記錄查詢”按鈕,系統則調取該用戶數據庫所有的歷史服藥記錄并顯示在主欄目中,如圖12所示。

圖12 用戶歷史服藥記錄
點擊“掃碼存藥”按鈕,使用掃碼模塊掃入藥盒上的條碼編號,檢索、分類并保存到數據庫中。使用Navicat數據庫可視化管理工具連接到樹莓派MySQL數據庫,輸入MySQL用戶名、密碼登錄成功,在藥品信息表中查看藥品信息添加情況。圖13是Navicat中查看掃碼爬取“1藥網”藥品的關鍵信息。

圖13 掃碼存藥測試
智能終端登錄測試如圖14所示,終端功能包括查看“存取藥日志”“健康信息”“服藥記錄”“藥品庫存信息”以及“用戶信息”。

圖14 手機終端測試
本文針對已有的智能藥柜在實際使用中出現的問題,基于樹莓派主控設計了一種智能藥柜。設計的智能藥柜可解決現實生活中服藥的用戶身份識別和藥品信息管理,及用戶經常忘、漏服藥等問題。測試結果表明,該系統軟硬件工作正常,APP能正常操作數據庫內容,上位機能夠正常使用,能滿足用戶實際的需求。