高 揚 蘇 丹 袁 源
(1.武漢東湖學院機電工程學院,湖北 武漢 430200;2.武漢聯影醫療科技有限公司,湖北 武漢 430074)
目前市場上多數洗手液均為按壓式,使用時需用手按壓瓶蓋[1]。在公共場合,這種多人接觸的方式很容易導致病毒和細菌的傳播,造成交叉感染。電子式的單傳感器洗手液系統,雖然可以做到非接觸,但其傳感器數量單一,很容易反應遲鈍甚至失效,且其內部裝配的洗手液為固定模具下的產品,與市場上的多數洗手液瓶體不兼容。
基于此,本文設計了一款多傳感器[2]交互式洗手液系統,其擁有超聲傳感器[3]、觸摸傳感器、聲音傳感器,能滿足各種場景下取洗手液的需求;同時,顯示模塊能發揮良好的人機交互效果;而電機模塊能自動升降常規洗手液瓶體,在做到兼容市場上所有洗手液的同時,使瓶體能正常噴出洗手液,實現核心功能。此設計能廣泛應用于醫院、車站、商場、學校等多種場所。
多傳感器洗手液系統包含硬件電路、軟件、結構部分。硬件電路包括超聲、顯示、主控、電機、音頻部分。軟件燒錄在主控芯片中,使用狀態機[4]實現工作流。結構將硬件電路板、電池、洗手液瓶體封裝,外觀簡約大方。圖1(a)為多傳感洗手液系統外觀殼體,中間凹陷區域為獲取洗手液區,右上方為顯示屏區域(圖中未標出);圖1(b)為內部結構,左上為洗手液瓶,左下為電機與固定裝置,右上為超聲模塊與語音模塊,右中為主控電路,右下為電池倉。

圖1 多傳感器洗手液系統外觀殼體與內部結構
系統工作時,超聲傳感器會將距離信息傳遞到主控模塊,當滿足閾值時,說明有人手靠近,主控模塊驅動電機運動,向上推動瓶體,擠壓出洗手液。語音傳感器低功耗等待音頻輸入,當識別到聲音時,也會將信息傳遞到主控模塊,從而驅動電機運動。前面板的觸摸傳感器識別到觸摸信號時,同樣會通過主控模塊驅動電機。多傳感器系統在任意傳感器識別到動作時,均能做出反應,能有效防止單一傳感器失效的問題。
多傳感器洗手液系統硬件結構如圖2所示,包括Arduino MEGA2560主控板[5-6]、HC-SR04超聲模塊、觸摸傳感器、高感度聲音傳感器、SG90電機模塊、OLED顯示模塊、電池模塊等部分。

圖2 系統硬件框圖
電源模塊將電池電壓由LDO芯片轉至5 V給主控板供電。其余模塊的供電均由主控板提供。
ArduinoMEGA2560主控板的MCU為ATmega2560,其產商為Atmel,為美國的一家半導體公司,在2016年被美國微芯(Microchip)收購。ATmega2560仍然是8位的AVR單片機,但其SRAM和FLASH均有較大的提升,因此能運行更大代碼量的程序。其主頻上升到16 MHz,運行一般的裸機程序毫無問題。
HC-SR04模塊通過Trig與Echo引腳的配合使用,可以做到實時獲取障礙物距離。在精確要求不高的場合完全夠用。主控板周期性給Trig引腳10 μs以上的脈沖,然后周期性獲取Echo的高電平的時間長度,從而計算出距離。
高感度聲音傳感器通過識別聲音的強度,輸出模擬信號或數字信號。將其輸出端接入到主控板的GPIO引腳上,通過中斷來觸發。
觸摸傳感器原理跟物理按鍵類似,當人手指接觸到此傳感器時,傳感器會輸出脈沖電平信號,由此來判斷人手指是否按下。同樣將其接入到主控板的GPIO上,通過中斷觸發。
SG90電機模塊,通過主控板的PWM輸出進行控制,可控制其在0°~90°范圍內進行旋轉。
OLED模塊通過I2C接口接入到主控板上,與主控板進行I2C通信。其擁有藍色、白色等字體顏色。
多傳感器洗手液系統的軟件設計基于事件驅動模型,核心使用狀態機來實現。相較于多傳感融合和有限狀態機[7-8],本設計的狀態機有明顯區別。本文的多傳感具有互斥性,即任意傳感器輸出信號給主控芯片后,主控芯片均屏蔽其他傳感器,然后做出下一步動作。
本文狀態機如圖3所示,分為等待、執行、錯誤三個狀態。

圖3 多傳感器洗手液系統狀態機
轉換過程如表1所示。在等待狀態下,主控芯片會等待各個傳感器信號的輸入。如果無信號輸入(E1事件),則不進行任何動作,下一狀態仍為等待狀態。在識別到任意傳感器的輸出時(E2事件),狀態機會做出A1動作,即立即屏蔽所有傳感器輸入,然后驅動電機運動;此時狀態會由等待狀態跳轉至執行狀態。在執行狀態下,如果判斷電機運動完成(E3事件),則將狀態轉移至等待狀態,以便下一次觸發;此時不需要任何動作。在執行狀態下,如果判斷電機異常或電池電量低或存在其他異常情況(E4事件),則將狀態轉移至錯誤狀態,系統會在OLED顯示屏上顯示錯誤內容,同時屏蔽所有傳感器輸入(A2動作)。同樣,在等待狀態下,如果判斷電機有異?;螂姵仉娏康突虼嬖谄渌惓G闆r(E4事件),則也將狀態跳轉到錯誤狀態。在錯誤狀態期間系統會持續監控錯誤情況,如果錯誤清除,比如已更換電池等(E5事件),則在OLED顯示屏上關閉錯誤內容,同時打開傳感器輸入(A3動作),系統狀態跳轉至等待狀態;表明系統可正常運行使用。

表1 狀態機二維轉換表
二維狀態表能夠很輕易地轉化為代碼,在軟件開發前期首先會制定此表,后續開發將事半功倍。
軟件上除了運行主狀態機之外,還有OLED進行實時顯示,而OLED的顯示控制與主狀態機關系不大。在有操作系統的場合,可以使用多線程的方式將主狀態機與顯示控制放在不同的線程下;然而對于本系統的8 bit單片機,沒必要使用復雜的程序控制方式,通過簡單的定時器,將主狀態與顯示控制分成兩個模塊來控制即可,如圖4所示。虛擬定時器會在200 ms與400 ms時給出觸發信號,驅動兩個模塊運行。主狀態機模塊的刷新周期為200 ms,顯示模塊的刷新周期為400 ms。

圖4 主狀態機模塊與顯示模塊刷新周期
OLED界面上可顯示電池電量狀態、各傳感器在位狀態、電機運動狀態、告警信息、問候語等內容,起到良好的人機交互效果。
本文通過系統設計、硬件設計、軟件設計等方面介紹了多傳感器洗手液系統,從理論上支撐了系統的可行性。硬件上,當前階段采用各個模塊搭建系統,便于加快原型機的開發,同時節約成本和硬件設計時間。待原型機驗證通過,后續可通過畫PCB板的形式來進行迭代開發。軟件上使用Arduino IDE進行設計,C語言開發,雖然此種方式屬于低代碼開發方式,但對原型機的驗證來說已足夠。多傳感器洗手液系統在輸入端使用多種傳感器,每種傳感器的失效均不會影響到整體系統功能,提高了系統的健壯性和容錯率。核心使用狀態機,屬于經典的控制方式,此種方式狀態明確、穩定,不易出問題。顯示屏能顯示各種信息,滿足了人機交互的需要,增加了客戶產品喜愛度。另外,本產品的物料成本較低,供應鏈穩定,為實現量產提供了保證。