(湖北大學 物理與電子科學學院,武漢 430062)
隨著社會經濟的快速發展,私家車的擁有量在快速增長,人們對汽車出行的依賴感逐漸增加,汽車的清潔和保養也越來越受到重視[1]。洗車作為汽車清潔的主要組成部分,越來越為人們所需。然而傳統洗車行業卻存在著較大的弊端,首先傳統洗車無法靈活的進入社區、停車場等車流量高的場所,居民洗車往往需要去專門的店面,所以無法實現靈活洗車;其次,傳統的洗車方式會浪費大量的水資源,不利于建設資源節約型社會。
針對上述傳統洗車行業所出現的問題,本文設計了一套自助洗車系統,能根據用戶的需求實現自助洗車,并對洗車用水按流量或者按時間計費,真正做到即來即用、即用即走。同時,本系統可以將洗車機的相關信息通過網絡發送至遠程服務器端,實現洗車機聯網,從而利于管理人員對洗車機進行管理,以及對洗車行業的大數據統計與分析。
自助洗車系統由終端洗車機和云端管理系統組成,其整體框圖如圖1所示。終端洗車機由單片機主控板、LCD顯示屏、GPRS網絡通信模塊、支付模塊、傳感器組和水泵組成。主控芯片通過水流量計反饋的信息來控制水泵開關和計費,從而實現按流量計費的洗車方式,并通過GPRS模塊將洗車機信息打包發送到遠程服務器端。云端管理系統主要由UDP服務器、MySQL數據庫和Web服務器組成。UDP服務器接收從洗車機終端發送的數據信息,并將數據信息存入數據庫,Web服務器通過網頁將數據庫中的信息展現出來。
洗車機設計分為洗車機硬件設計和洗車機軟件設計。洗車機硬件由洗車機外殼、主控板、LCD顯示屏、水桶、泡沫桶、水泵和水流量計等組成。洗車機硬件結構示意圖如圖2所示。

圖2 洗車機結構示意圖
洗車機軟件程序設計主要為GPRS網絡通信模塊和支付模塊的配置和使用[2]。洗車機終端運行程序流程圖如圖3所示。

圖3 主控程序流程圖
2.1.1 主控板設計
本系統的主控板選用基于Cortex-M3內核的STM32F103VET6作為主控芯片,并且集成了USB電源輸出接口、溫度和水位傳感器接口、水流量計的OUT輸出接口、投幣器接口、閃付串口接口、以及11個繼電器接口和按鍵若干。如圖4所示,為主控板的三維PCB圖。

圖4 三維PCD圖
2.1.2 主要模塊的應用
1)水流量計:本系統選用霍爾流量傳感器檢測水流量[3]。水流量傳感器主要由塑料閥體、水流轉子組件和霍爾傳感器組成。當水通過水流轉子組件時,磁性轉子轉動并且轉速隨流量變化而變化。隨著磁鐵和霍爾開關的距離改變,通過霍爾開關的磁通量也發生變化。當電流垂直于外磁場通過導體時,磁通量最大,在導體的垂直于磁場和電流方向的兩個端面之間會出現電勢差,進而霍爾開關就會產生差動脈沖信號并輸出。通過檢測脈沖信號的數量,并根據脈沖數量和水流量之間的對應關系就可以得出脈沖數量對應的水流量。因此,水流量的測量主要是依靠對傳感器輸出脈沖的頻率進行處理,由流量計在一段時間下產生的高電平數決定,即Q(流量)=F(頻率)/R(商家設定值),對于不同的流量計其R(商家設定值)不同。本系統選用直徑為20 mm,流完1 L水輸出2400個脈沖的水流量計。
2)LCD顯示屏:本系統選用2.8寸的ALIENTEK TFT-LCD模塊作為顯示屏。該模塊支持65 K色顯示,顯示分辨率為320*240,接口為16位的80并口。LCD的驅動程序步驟為:設置STM32與TETLCD模塊的管腳連接,初始化TFTLCD模塊以及通過函數將字符和自定義漢字顯示到TFTLCD模塊中。
3)溫度傳感器:本系統選用DS18B20數字溫度計模塊測量水的溫度[4]。該模塊將周圍環境的溫度信號轉換為數字信號,并將轉換結果存放到Scratchpad中。Scratchpad一共有9個字節(BYTE0-BYTE8),其中轉換的數字信息就存放在BYTE0和BYTE1中。所以,DS18B20的使用程序就是讀取Scratchpad中BYTE0和BYTE1的值,并通過溫度-數據對應表得出相應的溫度數據。溫度傳感器開發使用的程序流程如下:
1)Initial(DS18B20初始化命令)
2)ROM Command(與功能命令相匹配的ROM命令)
3)Convert T(功能命令:讓DS18B20開始工作,采集周圍溫度)
4)等待DS18B20采集完成
5)Initial(DS18B20初始化命令)
6)ROM Command(與功能命令相匹配的ROM命令)
7)Read Scratchpad(功能命令:讀取Scratchpad的BYTE0和BYTE1字節)
8)對照溫度-數據表計算出當前周圍環境溫度值,并將數據結果反饋給主控芯片。
溫度-數據對照如表1所示。

表1 溫度-數據對照表
4)水位傳感器:本系統選用基于紅外光學原理的液位傳感器套件測量水位。傳感器套件實物如圖5所示。該套件利用紅外光學原理,將檢測的液位信號通過光學傳遞轉換成電壓信號,從而判別液位情況。該套件的輸出方式有兩種,方式1:A管腳模擬輸出0~4.5 V,單片機通過對其模擬輸出量進行AD轉換后可以得出具體的液位數據;方式2:D管腳電平信號輸出,單片機通過檢測輸出端的高低電平可以判斷液位是否低于所設定閾值。本系統采用第二種輸出方式來測量當前水位,當水位低于設定閾值時,傳感器套件D管腳輸出低電平。單片機采集水位不足信號后,通過通信模塊發送信息到遠程服務器端,通知后臺工作人員加水。

圖5 水位傳感器實物圖
2.2.1 GPRS通信模塊
自助洗車系統最重要的部分就是數據的遠程通信。本系統通過單片機采集各個傳感器的數據信息,并利用GPRS模塊將數據發送到遠程服務器。GPRS模塊的通信流程為GPRS模塊通過基站將本地信息發送到移動公司的服務器,移動公司服務器再通過互聯網將信息轉發到具有公網IP的服務器中。基站、移動服務器都由通信公司來提供,所以本系統只需要對GPRS模塊進行編程[5]。
GPRS模塊有多種型號可供選擇,本系統選用SIM868來實現面向無連接的UDP通信,SIM868作為socket客戶端,遠程數據接收服務器作為socket服務器端。SIM868模塊編程主要步驟為:時鐘初始化、串口初始化、串口接收和發送函數編寫,以及通過串口通信對SIM868進行初始化。單片機和SIM868通信波特率數值設置為9600,并通過串口發送“AT+指令”對SIM868實現模塊上電、檢測SIM卡是否在位、查看是否注冊GPRS網絡等初始化設置。如表2所示,為SIM868主要指令信息表。其中指令“AT+CIPSTART”后需要寫入傳輸協議類型、服務器IP地址和相應的端口號。本系統選用UDP面向無連接協議進行網絡通信,所以傳輸協議類型應為UDP;服務器IP地址為可訪問的公網IP;端口號綁定為19999。當數據發送完成后,通過指令查詢服務端是否將信息接收完成,并等待下一次數據的寫入。

表2 SIM868初始化命令表
2.2.2 支付系統模塊
支付系統模塊主要分為3種支付方式:投幣器支付、RFID射頻卡支付和銀聯閃付。
1)投幣器支付:本系統選用“港都007”款投幣器模塊,該投幣器接口主要有9個接線管腳,分別標注為“COUNTER, GND, COIN, DC+12 V,FAST, MIDDLE, SLOW,NO,NC”。其中“GND、DC+12 V”分別接地和直流電12 V電源;“ COIN”為信號輸出線,其本身是沒有電壓輸出的,需要在外部上拉一個電阻才能輸出對投幣完成的識別脈沖;“FAST, MIDDLE, SLOW”3個接線引腳用于控制輸出信號線的高低電平脈沖時間,為了防止誤差,讓單片機好捕捉到脈沖信號,所以本系統選擇的是SLOW-60 ms的脈沖時間;最后“NC,NO”分別表示正常情況下投幣器信號端為低電平,有投幣時輸出為高電平和正常情況下投幣器信號端為高電平,有投幣時輸出為低電平(前提是信號輸出端已經有了上拉電阻),本系統選擇NC常開,NO常閉。根據以上的接口信息,我們可以利用單片機對投幣器進行控制。當投幣器正常工作時COIN信號輸出口為低電平;當有硬幣進入時,COIN口輸出60 ms的高電平信號,單片機接收信號后將硬件計數量加1,完成一次投幣。當投幣數量滿足洗車要求時,進入洗車模式選擇,并根據用戶的選擇計算出洗車的時間或者洗車的用水量
2)RFID卡支付:一套完整的RFID硬件系統由Reader和Transponder兩部分組成,其動作原理為由Reader發射特定頻率的無線電波能量給Transponder,用以驅動Transponder電路將內部的ID CODE送出[6]。本系統選用MF-RC522射頻模塊作為Reader,標準S50空白卡作為Transponder。MF-RC522射頻模塊向S50卡發一組固定頻率的電磁波,卡片內有一個LC串聯諧振電路,其頻率與讀寫器的發射頻率相同,在電磁波的激勵下,LC諧振電路產生共振,向電容充電,當電荷達到2 V時,此電容可作為電源為其電路提供工作電壓,將片內的數據發射出去或讀取讀卡器的數據。
對于本系統而言,MF-RC522射頻模塊主要用于對射頻卡的充值操作和扣費操作。其中充值操作由后臺人員在固定操作點進行充值操作,扣費操作由洗車終端程序進行自動扣費。本系統由單片機利用SPI接口對RC522模塊進行編程,編程流程為模塊初始化、尋卡、防沖突、選卡、操作卡(讀卡或者寫卡)。MF-RC522射頻模塊的初始化命令如圖7所示,尋卡操作主要由單片機向射頻卡發送命令進行尋卡,完成尋卡操作并成功尋到卡后程序將進入防沖突操作,在防碰撞正確讀到卡的序列號后,使用select命令與卡建立通信,選卡成功后進入認證操作,認證完成之后就能進入讀寫操作了。洗車機終端主要根據水流量計或者定時器來計算消費金額,消費完成后停止出水,并將余額信息寫回射頻卡中。

圖6 MF-RC522初始化命令表
3)銀聯閃付:銀聯閃付需要在銀行辦理具有閃付支付模塊功能的POS〗機,然后設定好所需要支付的金額,并等待用戶完成付款。閃付完成后,由閃付串口向單片機發送支付完成信息,單片機接收信息后開始進行洗車操作。
云管理系統設計主要分為UDP服務器設計、數據庫設計和Web服務器設計,其中UDP服務器通過Python語言調用socket庫進行網絡編程,負責將洗車機硬件端發送過來的信息進行切片處理并連接數據庫,將信息導入數據庫[7]。數據庫采用MySQL關系型數據庫,存放洗車機終端的相關信息和運行狀態。Web服務器采用Tomcat服務器,通過連接數據庫將洗車機相關信息顯示到前端。UDP服務器和Web服務器為同一具有公網IP地址的主機,但是兩個服務器端口號不同,UDP服務器端口號與洗車機終端GPRS模塊綁定端口號一致為19 999,而Web服務器端口號為8080。兩個服務器共享一個數據庫,通過數據庫將兩個服務器聯系起來。
網絡通信運輸層協議主要有面向連接的傳輸控制協議TCP和面向無連接的用戶數據報協議UDP。本系統選用UDP協議進行遠程通信,UDP服務器端采用循環的方式處理來自多個客戶端的請求。由于采用的是UDP方式來通信,使得沒有一個客戶端可以總是占據著服務器,因此服務器在設計、編程、排錯和修改等工作都比較簡單[7]。
3.1.1 UDP數據包格式
基于UDP協議的數據包由UDP首部和數據兩部分組成[8]。其中UDP的首部格式固定,所以本系統需要對數據部分的格式進行規定,數據部分的格式可以理解為應用層協議[9]。具體數據的通信協議如表3所示。通信協議中具體的數據內容如表4所示。
洗車機啟動后首先向服務器發送開機成功包通知服務器,之后每隔1分鐘向服務器發送心跳包保持在線,并定期向服務器報告各個傳感器的數值。由于溫度傳感器讀取數據的取值范圍為-55~+125 ℃,所以協議中溫度數據內容從0x00到0xB4依次表示-55~+125 ℃。在交易狀態中,由0x00和0x01分別表示當前是否有交易;由0x00和0x01分別表示客戶選擇的交易類型為按照時間扣費還是按照流量扣費;由0x00、0x01和0x02分別表示客戶的付款方式為水卡支付、POS閃付還是投幣支付;另外使用3個字節表示預付費金額,其中整數部分兩個字節,小數部分一個字節,表示范圍為0.0~999.9。
3.1.2 服務端程序設計
UDP服務器端由Python語言進行開發,需要導入的第三方庫為socket庫和MySQLdb庫。通過socket庫函數進行網絡編程,接收洗車機終端發送的信息,并通過MySQLdb庫函數將數據導入數據庫。在將數據導入數據庫之前,需要完成數據庫創建,并根據洗車機運行狀態等數據信息,完成了相關表的創建。服務器程序流程如圖7所示。

表3 UDP數據包數據部分格式

表4 具體數據內容

圖7 UDP服務器程序流程圖
首先創建一個被動套接字,綁定好IP地址和端口號,與TCP服務器不同,UDP服務器不需要與客戶端進行三次握手連接,可以直接進入循環接收。通過調用socket庫recvfrom()方法就可以獲取客戶端的IP地址和端口號以及洗車機的相關信息。接收到信息以后,需要對信息進行一個簡單的校驗來判斷數據的準確性,如果數據準確就對信息進行切片處理,然后將信息通過調用MySQLdb庫cursor.execute(sql)方法執行相應的SQL語句,最后通過調用db.commit()方法將數據提交到數據庫,完成一次數據的處理。
洗車機信息管理平臺需要實時顯示洗車機終端的相關數據,而且對于不同地區的管理人員需要負責的洗車機終端也不盡相同,所以本系統的Web前端需要使用動態頁面。本系統選用Java語言進行Web開發,并選用Tomcat作為Servlet容器,采用JSP+Servlet+MySQL體系開發。通過Servlet連接并訪問數據庫MySQL,最后將數據庫信息回傳給JSP,通過JSP顯示洗車機相關信息的頁面[10]。
3.2.1 后臺程序設計
服務器后臺程序主要是Servlet對數據庫的連接和信息處理。其主要步驟為,通過加載JDBC驅動實現對MySQL數據庫的連接,數據庫連接完成之后創建一個對象用來執行SQL語句。由于本系統只需要對數據庫信息進行查詢,所以僅需要通過SQL語句查詢所需的數據,同時利用JavaBean定義數組對象接收查詢結果,最后將結果返回給前端。

圖8 信息管理網站頁面

圖9 測試結果
3.2.2 數據庫設計
本系統選用MySQL關系型數據庫實現對數據的存取[11]。根據UDP協議數據部分,以及后臺管理人員的相關信息,所以數據庫需要建立多張表。主要是設備信息、交易記錄、統計查詢、管理員注冊信息和UDP監控。設備信息中包含設備編號、設備名稱、設備放置地點、負責人姓名、設備是否處于工作狀態以及是否有水等信息;交易記錄中包含設備編號、名稱型號和付款方式等信息;統計查詢中包括收益情況等;管理員信息包括賬號身份信息和創建日期等信息;UDP監控中包含目的地址、設備編號和數據類型等信息。
3.2.3 前端設計
前端頁面主要由傳統網頁HTML中插入Java程序段形成JSP文件,并通過JSP技術進行動態頁面顯示。信息管理網站包含設備信息管理、UDP數據管理和系統管理。其中設備信息管理包含設備信息(用于實時顯示設備編號、名稱、型號等信息)、交易記錄(用于實時顯示客戶交易方式、消費金額、交易時間等信息)和統計查詢(用于統計歸納并實時顯示每臺設備月季收入)三項基本功能。UDP數據管理包含接收數據(顯示設備目的地址、設備編號、數據類型)和UDP監控(用于顯示設備IP地址、目標端口號等信息)兩個基本功能。系統管理包含系統菜單、初始化、數據備份、后臺管理、信息提醒、系統配置、操作日志、計劃任務等基本功能列表。網站頁面如圖8所示。
完成對系統的設計和實現之后,進行系統測試工作。測試內容包括洗車機的正常運作狀態、各項數據傳感器的采集精度、GPRS通信模塊的數據傳輸準確性、以及后臺管理系統的運作情況。測試中,我們在學校附近設置了自助洗車點,測試時間為一周。各項傳感器采集的數據通過GPRS模塊發送到實驗室租借的云服務器上,并存儲到MySQL數據庫中,實現了對洗車機的遠程監控,圖9為信息管理系統Web服務器連接到MySQL數據庫對洗車機終端發送的數據進行顯示的界面。
基于物聯網技術的自助洗車系統中,通過STM32對多種傳感器的實時信息采集,可以更加準確的獲取洗車機終端的詳細運行信息,并利用霍爾流量傳感器實現可以按照流量計費的新型計費方式。同時,將網絡編程技術、數據庫技術和Web開發技術相結合,能有效的搭建一個針對智能終端的信息管理系統。相比于傳統洗車方式,自助洗車機能具有更高的效率,更少的時間以及更少的水資源浪費,相信在物聯網技術快速發展的今天,基于物聯網的自助洗車系統能得到一個更好的應用。