(湖北大學 物理與電子科學學院,武漢 430062)
隨著社會經(jīng)濟的快速發(fā)展,私家車的擁有量在快速增長,人們對汽車出行的依賴感逐漸增加,汽車的清潔和保養(yǎng)也越來越受到重視[1]。洗車作為汽車清潔的主要組成部分,越來越為人們所需。然而傳統(tǒng)洗車行業(yè)卻存在著較大的弊端,首先傳統(tǒng)洗車無法靈活的進入社區(qū)、停車場等車流量高的場所,居民洗車往往需要去專門的店面,所以無法實現(xiàn)靈活洗車;其次,傳統(tǒng)的洗車方式會浪費大量的水資源,不利于建設資源節(jié)約型社會。
針對上述傳統(tǒng)洗車行業(yè)所出現(xiàn)的問題,本文設計了一套自助洗車系統(tǒng),能根據(jù)用戶的需求實現(xiàn)自助洗車,并對洗車用水按流量或者按時間計費,真正做到即來即用、即用即走。同時,本系統(tǒng)可以將洗車機的相關(guān)信息通過網(wǎng)絡發(fā)送至遠程服務器端,實現(xiàn)洗車機聯(lián)網(wǎng),從而利于管理人員對洗車機進行管理,以及對洗車行業(yè)的大數(shù)據(jù)統(tǒng)計與分析。
自助洗車系統(tǒng)由終端洗車機和云端管理系統(tǒng)組成,其整體框圖如圖1所示。終端洗車機由單片機主控板、LCD顯示屏、GPRS網(wǎng)絡通信模塊、支付模塊、傳感器組和水泵組成。主控芯片通過水流量計反饋的信息來控制水泵開關(guān)和計費,從而實現(xiàn)按流量計費的洗車方式,并通過GPRS模塊將洗車機信息打包發(fā)送到遠程服務器端。云端管理系統(tǒng)主要由UDP服務器、MySQL數(shù)據(jù)庫和Web服務器組成。UDP服務器接收從洗車機終端發(fā)送的數(shù)據(jù)信息,并將數(shù)據(jù)信息存入數(shù)據(jù)庫,Web服務器通過網(wǎng)頁將數(shù)據(jù)庫中的信息展現(xiàn)出來。
洗車機設計分為洗車機硬件設計和洗車機軟件設計。洗車機硬件由洗車機外殼、主控板、LCD顯示屏、水桶、泡沫桶、水泵和水流量計等組成。洗車機硬件結(jié)構(gòu)示意圖如圖2所示。
圖2 洗車機結(jié)構(gòu)示意圖
洗車機軟件程序設計主要為GPRS網(wǎng)絡通信模塊和支付模塊的配置和使用[2]。洗車機終端運行程序流程圖如圖3所示。
圖3 主控程序流程圖
2.1.1 主控板設計
本系統(tǒng)的主控板選用基于Cortex-M3內(nèi)核的STM32F103VET6作為主控芯片,并且集成了USB電源輸出接口、溫度和水位傳感器接口、水流量計的OUT輸出接口、投幣器接口、閃付串口接口、以及11個繼電器接口和按鍵若干。如圖4所示,為主控板的三維PCB圖。
圖4 三維PCD圖
2.1.2 主要模塊的應用
1)水流量計:本系統(tǒng)選用霍爾流量傳感器檢測水流量[3]。水流量傳感器主要由塑料閥體、水流轉(zhuǎn)子組件和霍爾傳感器組成。當水通過水流轉(zhuǎn)子組件時,磁性轉(zhuǎn)子轉(zhuǎn)動并且轉(zhuǎn)速隨流量變化而變化。隨著磁鐵和霍爾開關(guān)的距離改變,通過霍爾開關(guān)的磁通量也發(fā)生變化。當電流垂直于外磁場通過導體時,磁通量最大,在導體的垂直于磁場和電流方向的兩個端面之間會出現(xiàn)電勢差,進而霍爾開關(guān)就會產(chǎn)生差動脈沖信號并輸出。通過檢測脈沖信號的數(shù)量,并根據(jù)脈沖數(shù)量和水流量之間的對應關(guān)系就可以得出脈沖數(shù)量對應的水流量。因此,水流量的測量主要是依靠對傳感器輸出脈沖的頻率進行處理,由流量計在一段時間下產(chǎn)生的高電平數(shù)決定,即Q(流量)=F(頻率)/R(商家設定值),對于不同的流量計其R(商家設定值)不同。本系統(tǒng)選用直徑為20 mm,流完1 L水輸出2400個脈沖的水流量計。
2)LCD顯示屏:本系統(tǒng)選用2.8寸的ALIENTEK TFT-LCD模塊作為顯示屏。該模塊支持65 K色顯示,顯示分辨率為320*240,接口為16位的80并口。LCD的驅(qū)動程序步驟為:設置STM32與TETLCD模塊的管腳連接,初始化TFTLCD模塊以及通過函數(shù)將字符和自定義漢字顯示到TFTLCD模塊中。
3)溫度傳感器:本系統(tǒng)選用DS18B20數(shù)字溫度計模塊測量水的溫度[4]。該模塊將周圍環(huán)境的溫度信號轉(zhuǎn)換為數(shù)字信號,并將轉(zhuǎn)換結(jié)果存放到Scratchpad中。Scratchpad一共有9個字節(jié)(BYTE0-BYTE8),其中轉(zhuǎn)換的數(shù)字信息就存放在BYTE0和BYTE1中。所以,DS18B20的使用程序就是讀取Scratchpad中BYTE0和BYTE1的值,并通過溫度-數(shù)據(jù)對應表得出相應的溫度數(shù)據(jù)。溫度傳感器開發(fā)使用的程序流程如下:
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字節(jié))
8)對照溫度-數(shù)據(jù)表計算出當前周圍環(huán)境溫度值,并將數(shù)據(jù)結(jié)果反饋給主控芯片。
溫度-數(shù)據(jù)對照如表1所示。
表1 溫度-數(shù)據(jù)對照表
4)水位傳感器:本系統(tǒng)選用基于紅外光學原理的液位傳感器套件測量水位。傳感器套件實物如圖5所示。該套件利用紅外光學原理,將檢測的液位信號通過光學傳遞轉(zhuǎn)換成電壓信號,從而判別液位情況。該套件的輸出方式有兩種,方式1:A管腳模擬輸出0~4.5 V,單片機通過對其模擬輸出量進行AD轉(zhuǎn)換后可以得出具體的液位數(shù)據(jù);方式2:D管腳電平信號輸出,單片機通過檢測輸出端的高低電平可以判斷液位是否低于所設定閾值。本系統(tǒng)采用第二種輸出方式來測量當前水位,當水位低于設定閾值時,傳感器套件D管腳輸出低電平。單片機采集水位不足信號后,通過通信模塊發(fā)送信息到遠程服務器端,通知后臺工作人員加水。
圖5 水位傳感器實物圖
2.2.1 GPRS通信模塊
自助洗車系統(tǒng)最重要的部分就是數(shù)據(jù)的遠程通信。本系統(tǒng)通過單片機采集各個傳感器的數(shù)據(jù)信息,并利用GPRS模塊將數(shù)據(jù)發(fā)送到遠程服務器。GPRS模塊的通信流程為GPRS模塊通過基站將本地信息發(fā)送到移動公司的服務器,移動公司服務器再通過互聯(lián)網(wǎng)將信息轉(zhuǎn)發(fā)到具有公網(wǎng)IP的服務器中。基站、移動服務器都由通信公司來提供,所以本系統(tǒng)只需要對GPRS模塊進行編程[5]。
GPRS模塊有多種型號可供選擇,本系統(tǒng)選用SIM868來實現(xiàn)面向無連接的UDP通信,SIM868作為socket客戶端,遠程數(shù)據(jù)接收服務器作為socket服務器端。SIM868模塊編程主要步驟為:時鐘初始化、串口初始化、串口接收和發(fā)送函數(shù)編寫,以及通過串口通信對SIM868進行初始化。單片機和SIM868通信波特率數(shù)值設置為9600,并通過串口發(fā)送“AT+指令”對SIM868實現(xiàn)模塊上電、檢測SIM卡是否在位、查看是否注冊GPRS網(wǎng)絡等初始化設置。如表2所示,為SIM868主要指令信息表。其中指令“AT+CIPSTART”后需要寫入傳輸協(xié)議類型、服務器IP地址和相應的端口號。本系統(tǒng)選用UDP面向無連接協(xié)議進行網(wǎng)絡通信,所以傳輸協(xié)議類型應為UDP;服務器IP地址為可訪問的公網(wǎng)IP;端口號綁定為19999。當數(shù)據(jù)發(fā)送完成后,通過指令查詢服務端是否將信息接收完成,并等待下一次數(shù)據(jù)的寫入。
表2 SIM868初始化命令表
2.2.2 支付系統(tǒng)模塊
支付系統(tǒng)模塊主要分為3種支付方式:投幣器支付、RFID射頻卡支付和銀聯(lián)閃付。
1)投幣器支付:本系統(tǒng)選用“港都007”款投幣器模塊,該投幣器接口主要有9個接線管腳,分別標注為“COUNTER, GND, COIN, DC+12 V,F(xiàn)AST, MIDDLE, SLOW,NO,NC”。其中“GND、DC+12 V”分別接地和直流電12 V電源;“ COIN”為信號輸出線,其本身是沒有電壓輸出的,需要在外部上拉一個電阻才能輸出對投幣完成的識別脈沖;“FAST, MIDDLE, SLOW”3個接線引腳用于控制輸出信號線的高低電平脈沖時間,為了防止誤差,讓單片機好捕捉到脈沖信號,所以本系統(tǒng)選擇的是SLOW-60 ms的脈沖時間;最后“NC,NO”分別表示正常情況下投幣器信號端為低電平,有投幣時輸出為高電平和正常情況下投幣器信號端為高電平,有投幣時輸出為低電平(前提是信號輸出端已經(jīng)有了上拉電阻),本系統(tǒng)選擇NC常開,NO常閉。根據(jù)以上的接口信息,我們可以利用單片機對投幣器進行控制。當投幣器正常工作時COIN信號輸出口為低電平;當有硬幣進入時,COIN口輸出60 ms的高電平信號,單片機接收信號后將硬件計數(shù)量加1,完成一次投幣。當投幣數(shù)量滿足洗車要求時,進入洗車模式選擇,并根據(jù)用戶的選擇計算出洗車的時間或者洗車的用水量
2)RFID卡支付:一套完整的RFID硬件系統(tǒng)由Reader和Transponder兩部分組成,其動作原理為由Reader發(fā)射特定頻率的無線電波能量給Transponder,用以驅(qū)動Transponder電路將內(nèi)部的ID CODE送出[6]。本系統(tǒng)選用MF-RC522射頻模塊作為Reader,標準S50空白卡作為Transponder。MF-RC522射頻模塊向S50卡發(fā)一組固定頻率的電磁波,卡片內(nèi)有一個LC串聯(lián)諧振電路,其頻率與讀寫器的發(fā)射頻率相同,在電磁波的激勵下,LC諧振電路產(chǎn)生共振,向電容充電,當電荷達到2 V時,此電容可作為電源為其電路提供工作電壓,將片內(nèi)的數(shù)據(jù)發(fā)射出去或讀取讀卡器的數(shù)據(jù)。
對于本系統(tǒng)而言,MF-RC522射頻模塊主要用于對射頻卡的充值操作和扣費操作。其中充值操作由后臺人員在固定操作點進行充值操作,扣費操作由洗車終端程序進行自動扣費。本系統(tǒng)由單片機利用SPI接口對RC522模塊進行編程,編程流程為模塊初始化、尋卡、防沖突、選卡、操作卡(讀卡或者寫卡)。MF-RC522射頻模塊的初始化命令如圖7所示,尋卡操作主要由單片機向射頻卡發(fā)送命令進行尋卡,完成尋卡操作并成功尋到卡后程序?qū)⑦M入防沖突操作,在防碰撞正確讀到卡的序列號后,使用select命令與卡建立通信,選卡成功后進入認證操作,認證完成之后就能進入讀寫操作了。洗車機終端主要根據(jù)水流量計或者定時器來計算消費金額,消費完成后停止出水,并將余額信息寫回射頻卡中。
圖6 MF-RC522初始化命令表
3)銀聯(lián)閃付:銀聯(lián)閃付需要在銀行辦理具有閃付支付模塊功能的POS〗機,然后設定好所需要支付的金額,并等待用戶完成付款。閃付完成后,由閃付串口向單片機發(fā)送支付完成信息,單片機接收信息后開始進行洗車操作。
云管理系統(tǒng)設計主要分為UDP服務器設計、數(shù)據(jù)庫設計和Web服務器設計,其中UDP服務器通過Python語言調(diào)用socket庫進行網(wǎng)絡編程,負責將洗車機硬件端發(fā)送過來的信息進行切片處理并連接數(shù)據(jù)庫,將信息導入數(shù)據(jù)庫[7]。數(shù)據(jù)庫采用MySQL關(guān)系型數(shù)據(jù)庫,存放洗車機終端的相關(guān)信息和運行狀態(tài)。Web服務器采用Tomcat服務器,通過連接數(shù)據(jù)庫將洗車機相關(guān)信息顯示到前端。UDP服務器和Web服務器為同一具有公網(wǎng)IP地址的主機,但是兩個服務器端口號不同,UDP服務器端口號與洗車機終端GPRS模塊綁定端口號一致為19 999,而Web服務器端口號為8080。兩個服務器共享一個數(shù)據(jù)庫,通過數(shù)據(jù)庫將兩個服務器聯(lián)系起來。
網(wǎng)絡通信運輸層協(xié)議主要有面向連接的傳輸控制協(xié)議TCP和面向無連接的用戶數(shù)據(jù)報協(xié)議UDP。本系統(tǒng)選用UDP協(xié)議進行遠程通信,UDP服務器端采用循環(huán)的方式處理來自多個客戶端的請求。由于采用的是UDP方式來通信,使得沒有一個客戶端可以總是占據(jù)著服務器,因此服務器在設計、編程、排錯和修改等工作都比較簡單[7]。
3.1.1 UDP數(shù)據(jù)包格式
基于UDP協(xié)議的數(shù)據(jù)包由UDP首部和數(shù)據(jù)兩部分組成[8]。其中UDP的首部格式固定,所以本系統(tǒng)需要對數(shù)據(jù)部分的格式進行規(guī)定,數(shù)據(jù)部分的格式可以理解為應用層協(xié)議[9]。具體數(shù)據(jù)的通信協(xié)議如表3所示。通信協(xié)議中具體的數(shù)據(jù)內(nèi)容如表4所示。
洗車機啟動后首先向服務器發(fā)送開機成功包通知服務器,之后每隔1分鐘向服務器發(fā)送心跳包保持在線,并定期向服務器報告各個傳感器的數(shù)值。由于溫度傳感器讀取數(shù)據(jù)的取值范圍為-55~+125 ℃,所以協(xié)議中溫度數(shù)據(jù)內(nèi)容從0x00到0xB4依次表示-55~+125 ℃。在交易狀態(tài)中,由0x00和0x01分別表示當前是否有交易;由0x00和0x01分別表示客戶選擇的交易類型為按照時間扣費還是按照流量扣費;由0x00、0x01和0x02分別表示客戶的付款方式為水卡支付、POS閃付還是投幣支付;另外使用3個字節(jié)表示預付費金額,其中整數(shù)部分兩個字節(jié),小數(shù)部分一個字節(jié),表示范圍為0.0~999.9。
3.1.2 服務端程序設計
UDP服務器端由Python語言進行開發(fā),需要導入的第三方庫為socket庫和MySQLdb庫。通過socket庫函數(shù)進行網(wǎng)絡編程,接收洗車機終端發(fā)送的信息,并通過MySQLdb庫函數(shù)將數(shù)據(jù)導入數(shù)據(jù)庫。在將數(shù)據(jù)導入數(shù)據(jù)庫之前,需要完成數(shù)據(jù)庫創(chuàng)建,并根據(jù)洗車機運行狀態(tài)等數(shù)據(jù)信息,完成了相關(guān)表的創(chuàng)建。服務器程序流程如圖7所示。
表3 UDP數(shù)據(jù)包數(shù)據(jù)部分格式
表4 具體數(shù)據(jù)內(nèi)容
圖7 UDP服務器程序流程圖
首先創(chuàng)建一個被動套接字,綁定好IP地址和端口號,與TCP服務器不同,UDP服務器不需要與客戶端進行三次握手連接,可以直接進入循環(huán)接收。通過調(diào)用socket庫recvfrom()方法就可以獲取客戶端的IP地址和端口號以及洗車機的相關(guān)信息。接收到信息以后,需要對信息進行一個簡單的校驗來判斷數(shù)據(jù)的準確性,如果數(shù)據(jù)準確就對信息進行切片處理,然后將信息通過調(diào)用MySQLdb庫cursor.execute(sql)方法執(zhí)行相應的SQL語句,最后通過調(diào)用db.commit()方法將數(shù)據(jù)提交到數(shù)據(jù)庫,完成一次數(shù)據(jù)的處理。
洗車機信息管理平臺需要實時顯示洗車機終端的相關(guān)數(shù)據(jù),而且對于不同地區(qū)的管理人員需要負責的洗車機終端也不盡相同,所以本系統(tǒng)的Web前端需要使用動態(tài)頁面。本系統(tǒng)選用Java語言進行Web開發(fā),并選用Tomcat作為Servlet容器,采用JSP+Servlet+MySQL體系開發(fā)。通過Servlet連接并訪問數(shù)據(jù)庫MySQL,最后將數(shù)據(jù)庫信息回傳給JSP,通過JSP顯示洗車機相關(guān)信息的頁面[10]。
3.2.1 后臺程序設計
服務器后臺程序主要是Servlet對數(shù)據(jù)庫的連接和信息處理。其主要步驟為,通過加載JDBC驅(qū)動實現(xiàn)對MySQL數(shù)據(jù)庫的連接,數(shù)據(jù)庫連接完成之后創(chuàng)建一個對象用來執(zhí)行SQL語句。由于本系統(tǒng)只需要對數(shù)據(jù)庫信息進行查詢,所以僅需要通過SQL語句查詢所需的數(shù)據(jù),同時利用JavaBean定義數(shù)組對象接收查詢結(jié)果,最后將結(jié)果返回給前端。
圖8 信息管理網(wǎng)站頁面
圖9 測試結(jié)果
3.2.2 數(shù)據(jù)庫設計
本系統(tǒng)選用MySQL關(guān)系型數(shù)據(jù)庫實現(xiàn)對數(shù)據(jù)的存取[11]。根據(jù)UDP協(xié)議數(shù)據(jù)部分,以及后臺管理人員的相關(guān)信息,所以數(shù)據(jù)庫需要建立多張表。主要是設備信息、交易記錄、統(tǒng)計查詢、管理員注冊信息和UDP監(jiān)控。設備信息中包含設備編號、設備名稱、設備放置地點、負責人姓名、設備是否處于工作狀態(tài)以及是否有水等信息;交易記錄中包含設備編號、名稱型號和付款方式等信息;統(tǒng)計查詢中包括收益情況等;管理員信息包括賬號身份信息和創(chuàng)建日期等信息;UDP監(jiān)控中包含目的地址、設備編號和數(shù)據(jù)類型等信息。
3.2.3 前端設計
前端頁面主要由傳統(tǒng)網(wǎng)頁HTML中插入Java程序段形成JSP文件,并通過JSP技術(shù)進行動態(tài)頁面顯示。信息管理網(wǎng)站包含設備信息管理、UDP數(shù)據(jù)管理和系統(tǒng)管理。其中設備信息管理包含設備信息(用于實時顯示設備編號、名稱、型號等信息)、交易記錄(用于實時顯示客戶交易方式、消費金額、交易時間等信息)和統(tǒng)計查詢(用于統(tǒng)計歸納并實時顯示每臺設備月季收入)三項基本功能。UDP數(shù)據(jù)管理包含接收數(shù)據(jù)(顯示設備目的地址、設備編號、數(shù)據(jù)類型)和UDP監(jiān)控(用于顯示設備IP地址、目標端口號等信息)兩個基本功能。系統(tǒng)管理包含系統(tǒng)菜單、初始化、數(shù)據(jù)備份、后臺管理、信息提醒、系統(tǒng)配置、操作日志、計劃任務等基本功能列表。網(wǎng)站頁面如圖8所示。
完成對系統(tǒng)的設計和實現(xiàn)之后,進行系統(tǒng)測試工作。測試內(nèi)容包括洗車機的正常運作狀態(tài)、各項數(shù)據(jù)傳感器的采集精度、GPRS通信模塊的數(shù)據(jù)傳輸準確性、以及后臺管理系統(tǒng)的運作情況。測試中,我們在學校附近設置了自助洗車點,測試時間為一周。各項傳感器采集的數(shù)據(jù)通過GPRS模塊發(fā)送到實驗室租借的云服務器上,并存儲到MySQL數(shù)據(jù)庫中,實現(xiàn)了對洗車機的遠程監(jiān)控,圖9為信息管理系統(tǒng)Web服務器連接到MySQL數(shù)據(jù)庫對洗車機終端發(fā)送的數(shù)據(jù)進行顯示的界面。
基于物聯(lián)網(wǎng)技術(shù)的自助洗車系統(tǒng)中,通過STM32對多種傳感器的實時信息采集,可以更加準確的獲取洗車機終端的詳細運行信息,并利用霍爾流量傳感器實現(xiàn)可以按照流量計費的新型計費方式。同時,將網(wǎng)絡編程技術(shù)、數(shù)據(jù)庫技術(shù)和Web開發(fā)技術(shù)相結(jié)合,能有效的搭建一個針對智能終端的信息管理系統(tǒng)。相比于傳統(tǒng)洗車方式,自助洗車機能具有更高的效率,更少的時間以及更少的水資源浪費,相信在物聯(lián)網(wǎng)技術(shù)快速發(fā)展的今天,基于物聯(lián)網(wǎng)的自助洗車系統(tǒng)能得到一個更好的應用。