李 彬,黎鈺珍
(廣東理工學(xué)院電氣與電子工程學(xué)院,廣東 肇慶526100)
隨著醫(yī)療條件的改善,我國(guó)老年人口數(shù)量和比例的不斷增加,導(dǎo)致我國(guó)人口趨向老齡化的問(wèn)題日益突出。許多老年人往往伴隨著一些慢性病,因此需要長(zhǎng)期服藥來(lái)改善身體狀況,但隨著老年人記憶力的下降,常常會(huì)出現(xiàn)忘記服藥的情況。不僅僅是老年人,當(dāng)今許多年輕人也因?yàn)楣ぷ骱蜕顗毫Φ脑黾?,頭緒繁多,生病后也會(huì)出現(xiàn)同等的情況,從而導(dǎo)致用藥時(shí)間不準(zhǔn)確,藥物也未能發(fā)揮最佳的效果,所以準(zhǔn)時(shí)準(zhǔn)點(diǎn)吃藥幾乎是人們面對(duì)一個(gè)社會(huì)難題[1-3]。針對(duì)此類(lèi)問(wèn)題,可以設(shè)計(jì)一款智能藥盒,既具有與家中儲(chǔ)藥箱相同的儲(chǔ)物功能,也有日常鬧鐘提醒功能。
智能藥盒設(shè)計(jì)采用STM32F103ZET6 單片機(jī)作為系統(tǒng)主控芯片,由液晶模塊、按鍵輸入模塊、檢測(cè)模塊、時(shí)鐘模塊、響應(yīng)模塊、GSM 模塊等部分組成。系統(tǒng)總體框架如圖1 所示。系統(tǒng)的液晶模塊配合按鍵輸入模塊和時(shí)鐘模塊進(jìn)行時(shí)鐘的顯示、鬧鐘時(shí)間的設(shè)定、接收短信手機(jī)號(hào)碼編輯,還有多個(gè)頁(yè)面的切換等;時(shí)鐘模塊包括了時(shí)鐘的顯示還有鬧鐘的設(shè)定;檢測(cè)模塊和響應(yīng)模塊用于定時(shí)提醒時(shí),鬧鐘的響應(yīng)以及取藥動(dòng)作的檢測(cè),當(dāng)檢測(cè)模塊判斷到取藥動(dòng)作時(shí),鬧鐘響應(yīng)也會(huì)實(shí)時(shí)關(guān)閉;GSM 模塊的功能也是用于提醒,區(qū)別于響應(yīng)模塊觸發(fā)時(shí)間不同,在鬧鐘提醒長(zhǎng)達(dá)一分鐘后,會(huì)向系統(tǒng)配置完成的手機(jī)號(hào)碼發(fā)送一條信息,用于二次提醒用戶(hù)進(jìn)行服藥[4-6]。
圖1 系統(tǒng)框圖
將硬件設(shè)計(jì)后的主電路板內(nèi)置于盒子內(nèi)部,用于用戶(hù)操作或顯示信息的按鍵、液晶屏與LED 燈置于藥盒表面。用戶(hù)可以很方便的操控藥盒,并從LED燈與液晶屏獲取信息。紅外對(duì)管模塊垂直于底部并安裝在藥盒蓋子上,跟隨藥盒的蓋子運(yùn)動(dòng)而運(yùn)動(dòng),當(dāng)蓋下與打開(kāi)能夠明顯的分辨兩種信號(hào),并設(shè)計(jì)6 個(gè)取藥格子,供用戶(hù)取藥放藥。
液晶模塊選用LCD1602A 模塊,特點(diǎn)是操作簡(jiǎn)單、與單片機(jī)以并行的方式傳輸數(shù)據(jù),傳輸速度快,帶有背光效果用于輔助顯示。單片機(jī)可以通過(guò)傳送不同的數(shù)據(jù)來(lái)讓液晶顯示數(shù)字、符號(hào)、英文,大部分的數(shù)據(jù)指令與C 語(yǔ)言的ASCII 碼值相同,大大方便了軟件部分的程序編寫(xiě)。模塊的RS 引腳用于區(qū)分寫(xiě)入指令還是數(shù)據(jù)。E 引腳為使能腳,當(dāng)E 腳從高電平到低電平,液晶模塊執(zhí)行命令。RW 引腳判斷讀操作還是寫(xiě)操作。該模塊還帶有V0 引腳,用于調(diào)節(jié)液晶顯示時(shí)的對(duì)比度。LCD1602A 在系統(tǒng)中用于顯示不同界面,包括主界面、鬧鐘設(shè)置界面、號(hào)碼配置界面、以及鬧鐘響應(yīng)時(shí)的動(dòng)畫(huà)顯示等[7]。主界面顯示當(dāng)前日歷以及時(shí)間信息,最小顯示到分鐘信息;鬧鐘設(shè)置界面可以設(shè)置鬧鐘的開(kāi)關(guān)和設(shè)定鬧鐘;號(hào)碼配置界面用于配置鬧鐘響應(yīng)超時(shí)后接收短信的手機(jī)號(hào)碼。液晶模塊接線(xiàn)原理圖如圖2 所示。
圖2 液晶模塊電路
該模塊一共使用三個(gè)輕觸按鍵構(gòu)成。硬件上按鍵一端接地,另一端接單片機(jī)的GPIO 口。在程序上打開(kāi)與按鍵連接的單片機(jī)GPIO 口的上拉輸入模式,保持相對(duì)于按鍵按下后輸入為低電平的一種對(duì)立狀態(tài)[8]。在設(shè)計(jì)中,三個(gè)按鍵通過(guò)程序控制在各個(gè)界面模式下有不同的功能,按鍵與單片機(jī)的連接如圖3所示。功能分配如下:
圖3 按鍵輸入模塊電路
(1)在液晶主界面下按鍵1 可進(jìn)入鬧鐘調(diào)節(jié)頁(yè)面,按鍵2 無(wú)效,按鍵3 可進(jìn)入號(hào)碼調(diào)節(jié)界面。
(2)在鬧鐘調(diào)節(jié)頁(yè)面下按鍵1 可在選中數(shù)據(jù)字符與不選中之間進(jìn)行切換,長(zhǎng)按此鍵1.5s 可以保存數(shù)據(jù)并退出。按鍵2 和按鍵3 可以進(jìn)行數(shù)據(jù)字符的選擇,不再更改數(shù)據(jù)的狀態(tài)下可以左右移選擇需要調(diào)節(jié)的字符,若在更改狀態(tài)下則可以進(jìn)行數(shù)據(jù)的加減。
(3)在號(hào)碼配置界面各個(gè)按鍵與鬧鐘調(diào)節(jié)界面的功能相同。
模塊的紅外反射距離可以通過(guò)調(diào)節(jié)其上面的電位器調(diào)節(jié)。通過(guò)紅外模塊上的主控,判斷是否接收到紅外信號(hào)來(lái)輸出一個(gè)電平,反饋該電平給本次實(shí)驗(yàn)的微控制器,此時(shí),傳感器上的指示燈也會(huì)點(diǎn)亮[9]。利用此特性,可以用作檢測(cè)藥盒的開(kāi)關(guān)動(dòng)作,合上與打開(kāi)兩個(gè)動(dòng)作會(huì)觸發(fā)紅外傳感器的兩個(gè)狀態(tài)。當(dāng)鬧鐘提醒時(shí)檢測(cè)模塊會(huì)被使能,開(kāi)始檢測(cè),檢測(cè)到藥盒打開(kāi)時(shí),系統(tǒng)會(huì)關(guān)閉鬧鐘響應(yīng),同時(shí)防止1 min 后的GSM 模塊的觸發(fā)。其原理圖以及接線(xiàn)如圖4 所示。
圖4 檢測(cè)模塊電路
配置后的RTC 實(shí)時(shí)時(shí)鐘的32 位可編程計(jì)數(shù)器將按分頻后的頻率進(jìn)行累加,由于系統(tǒng)實(shí)現(xiàn)的是日常的時(shí)間功能,所以分頻后的時(shí)鐘周期為1 s。當(dāng)RTC 的32 位可編程計(jì)數(shù)器與RTC_ALR 寄存器的值比較后相等時(shí),鬧鐘將產(chǎn)生中斷。
單片機(jī)通過(guò)實(shí)時(shí)讀取RTC 時(shí)鐘,將讀取后的數(shù)據(jù)傳送給液晶,以此來(lái)顯示時(shí)鐘信息給用戶(hù),用戶(hù)可以很直觀(guān)的了解到當(dāng)前的時(shí)間。當(dāng)用戶(hù)需要配置鬧鐘時(shí),系統(tǒng)會(huì)提供液晶模塊的鬧鐘配置界面,在調(diào)節(jié)好鬧鐘時(shí)間并打開(kāi)鬧鐘。長(zhǎng)按按鍵1.5s 退回液晶主界面,此時(shí)鬧鐘時(shí)間會(huì)寫(xiě)入到鬧鐘響應(yīng)的寄存器并打開(kāi)。
響應(yīng)模塊是為了提供鬧鐘的定時(shí)提醒功能,由一個(gè)有源蜂鳴器和紅色的發(fā)光二極管組成。有源蜂鳴器是指自帶了震蕩電路的蜂鳴器,對(duì)有源蜂鳴器驅(qū)動(dòng)比較方便,只需要往蜂鳴器通上電就會(huì)震蕩發(fā)聲,通常頻率固定,所以響聲單一。而對(duì)于發(fā)光二級(jí)管,電路上只需要連接合適的限流電阻,加上正向?qū)c(diǎn)壓后即可發(fā)光,采用灌電流的驅(qū)動(dòng)LED。
當(dāng)RTC 實(shí)時(shí)時(shí)鐘判斷到用戶(hù)設(shè)定的鬧鐘到點(diǎn)時(shí),響應(yīng)模塊與檢測(cè)模塊會(huì)同時(shí)打開(kāi)。蜂鳴器根據(jù)程序模擬鬧鐘播放聲音,發(fā)光二極管以相同頻率閃爍。響應(yīng)模塊此時(shí)可以被任意按鍵關(guān)閉,或者通過(guò)檢測(cè)模塊的判斷關(guān)閉響應(yīng)。原理圖如圖5 所示。
圖5 響應(yīng)模塊電路
移動(dòng)臺(tái)由終端設(shè)備或數(shù)據(jù)電流終端設(shè)備發(fā)出的AT 命令控制,所以SIM800C 是以各種AT 指令進(jìn)行控制的。AT 指令在程序中是以“AT”開(kāi)頭,后邊緊跟模塊能識(shí)別的操作命令的格式。
STM800C 模塊與SIM 卡連接時(shí)會(huì)通過(guò)網(wǎng)絡(luò)狀態(tài)指示燈(NET)進(jìn)行指示,通過(guò)該指示燈的閃爍情況,可以很方便的判斷SIM800C 模塊的工作狀態(tài)。發(fā)送程序設(shè)定好的短信內(nèi)容,在系統(tǒng)中可以通過(guò)按鍵更改接收短信的號(hào)碼。短信觸發(fā)在定時(shí)提醒狀態(tài)下一分鐘后,如果檢測(cè)模塊在一分鐘內(nèi)未接收到打開(kāi)藥盒的信號(hào),此時(shí)會(huì)觸發(fā)GSM 模塊發(fā)送短信給系統(tǒng)設(shè)定的手機(jī),提醒用戶(hù)吃藥。發(fā)送完短信后系統(tǒng)會(huì)關(guān)閉鬧鐘響應(yīng),與鬧鐘設(shè)置。
主函數(shù)上電部分對(duì)系統(tǒng)的中斷優(yōu)先級(jí)、各個(gè)模塊的通用GPIO 口、定時(shí)器、串口等進(jìn)行模式的初始化配置。主循環(huán)部分由5 個(gè)主要函數(shù)組成,按鍵掃描、液晶的界面模式處理、按鍵長(zhǎng)按判斷、鬧鐘的響應(yīng)程序、短信發(fā)送程序。流程圖如圖6 所示。中斷部分設(shè)置了STM32 的TIM3 定時(shí)器和RTC 鬧鐘功能為中斷源。定時(shí)器TIM3 配置為100 μs 產(chǎn)生一次中斷,這部分程序只做一些變量、部分時(shí)間計(jì)數(shù)。RTC 鬧鐘中斷用于打開(kāi)響應(yīng)模式GSM 模塊等。
圖6 系統(tǒng)流程圖
液晶的界面模式處理是較為重要的部分之一。用戶(hù)的操作建立在液晶顯示之上,程序也是圍繞著液晶開(kāi)始的。程序可分為兩部分,第一部分是驅(qū)動(dòng)液晶模塊的代碼,這部分程序關(guān)系到液晶能否正常顯示需要的內(nèi)容,包括了單片機(jī)向液晶模塊寫(xiě)指令、寫(xiě)數(shù)據(jù),還有上電時(shí)液晶的初始化。第二部分是本次設(shè)計(jì)需要顯示的內(nèi)容。此部分程序還包含了對(duì)RTC 實(shí)時(shí)時(shí)鐘的讀取。程序流程上包括各個(gè)界面的初始化,還有一些需要循環(huán)顯示的變化量,比如主界面的時(shí)間。此部分的流程圖如圖7 所示。
圖7 液晶模式流程圖
測(cè)試系統(tǒng)由于初期選材的問(wèn)題,液晶模塊采用了5 V 器件1602 A,而STM32 單片機(jī)采用3.3 V 供電,所以提供不了5 V 的電平輸出,所以出現(xiàn)了電平不兼容的問(wèn)題。解決問(wèn)題采用了CMOS 器件74HC245 的總線(xiàn)收發(fā)器,三態(tài)緩沖門(mén)電路。將該芯片的VCC 連接5 V 電源,控制芯片的DIR 端可控制信號(hào)傳輸?shù)姆较颍O(shè)置完成后,將單片機(jī)控制液晶的引腳連接至芯片的輸入端,即可輸出5 V 電壓,解決此問(wèn)題。
進(jìn)行軟件部分調(diào)試后,系統(tǒng)上電時(shí)液晶主界面如圖8 所示,液晶屏顯示分為兩行,第一行顯示了當(dāng)前的日歷信息與時(shí)間信息;第二行則是對(duì)按鍵的左右鍵功能的提示,按下按鍵1 時(shí)可進(jìn)入鬧鐘配置頁(yè)面,按下按鍵3 時(shí)可進(jìn)入號(hào)碼配置頁(yè)面。
圖8 液晶主界面
進(jìn)入時(shí)鐘配置界面后,液晶第一行成功顯示了鬧鐘開(kāi)關(guān)和時(shí)間,采用光標(biāo)閃爍顯示可進(jìn)行調(diào)節(jié)的數(shù)據(jù),通過(guò)按鍵2、3 左右移動(dòng)黑色光標(biāo)進(jìn)行選擇數(shù)據(jù)。按下按鍵1 選中需要調(diào)節(jié)的數(shù)據(jù)時(shí),對(duì)應(yīng)數(shù)據(jù)進(jìn)行白底交替閃爍,按鍵2、3 可進(jìn)行數(shù)據(jù)的加減。通過(guò)改變這個(gè)時(shí)間可以配置時(shí)間,并打開(kāi)鬧鐘開(kāi)關(guān),設(shè)置后的時(shí)間會(huì)被保存。第二行顯示了用藥數(shù)量,用戶(hù)也可以設(shè)置該數(shù)字,在鬧鐘響應(yīng)時(shí),界面上會(huì)彈出動(dòng)畫(huà)提示服藥數(shù)。按鍵1 長(zhǎng)按1.5 s 后可保存并退出。
根據(jù)系統(tǒng)的功能,能正常運(yùn)行以下功能:(1)液晶上能夠顯示對(duì)應(yīng)的日歷和時(shí)間,與北京時(shí)間誤差足夠小,界面信息顯示正常;(2)按鍵經(jīng)過(guò)程序的編寫(xiě),能實(shí)現(xiàn)多個(gè)按鍵互不干擾,保證各個(gè)按鍵功能實(shí)時(shí)實(shí)現(xiàn);(3)鬧鐘功能準(zhǔn)時(shí)響應(yīng),蜂鳴器可以模擬常規(guī)鬧鐘的響聲;(4)檢測(cè)模塊判斷的動(dòng)作是從藥盒關(guān)閉到打開(kāi),若是盒子打開(kāi)的狀態(tài)下進(jìn)行鬧鐘響應(yīng),關(guān)閉該響應(yīng)除了可以將盒子關(guān)上再打開(kāi),任意按鍵的按下也可以關(guān)閉響應(yīng);(5)GSM 模塊可以成功發(fā)送短信到用戶(hù)手機(jī)。