陶 陶,梅金東,王小林,王愛(ài)國(guó)
(1.安徽工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 馬鞍山 243002;2.安徽工業(yè)大學(xué) 工程研究院,安徽 馬鞍山 243002)
隨著物聯(lián)網(wǎng)通信技術(shù)的快速發(fā)展和加快建設(shè)智慧城市的需求,智能燃?xì)獗黹_(kāi)始在千家萬(wàn)戶中普及開(kāi)來(lái)[1]。由于早期部分小區(qū)的天然氣管道鋪設(shè)限制,部署了傳統(tǒng)膜式燃?xì)獗淼挠脩魺o(wú)法更換新型的燃?xì)獗?,膜式燃?xì)獗硎嵌嗄昵熬屯度胧褂玫囊环N基于滾輪計(jì)數(shù)法的機(jī)械表,燃?xì)獾氖褂昧客ㄟ^(guò)滾輪上面的刻度標(biāo)識(shí)出來(lái),需要專門的工作人員上門查看燃?xì)獗頂?shù)據(jù),然后紙質(zhì)記錄。
這種方式,費(fèi)時(shí)費(fèi)力,效率低下,無(wú)法實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程管理,嚴(yán)重制約了各大燃?xì)夤?yīng)公司的管理效率。
針對(duì)上述存在的問(wèn)題,本文設(shè)計(jì)了一種采用嵌入式圖像識(shí)別技術(shù)采集燃?xì)獗頂?shù)據(jù),利用NB-IoT(Narrow band Internet of things,窄帶物聯(lián)網(wǎng))通信技術(shù)進(jìn)行數(shù)據(jù)的傳輸,實(shí)現(xiàn)燃?xì)獗頂?shù)據(jù)的遠(yuǎn)程采集功能的智能膜式燃?xì)獗硐到y(tǒng)。這種設(shè)計(jì)的優(yōu)點(diǎn)在于數(shù)據(jù)采集方式準(zhǔn)確高效,數(shù)據(jù)傳輸抗干擾能力強(qiáng),數(shù)據(jù)管理公開(kāi)透明。天然氣公司可以利用管理系統(tǒng)實(shí)時(shí)查看燃?xì)獗淼臓顟B(tài)信息,及時(shí)的處理燃?xì)獗淼母鞣N異常問(wèn)題,防止危險(xiǎn)情況的發(fā)生。用戶可以通過(guò)手機(jī)端軟件瀏覽當(dāng)前的天然氣使用量、歷史記錄等信息。智能膜式燃?xì)獗硐到y(tǒng)解決了傳統(tǒng)膜式燃?xì)獗泶嬖诘某硇实拖碌膯?wèn)題,提高了天然氣供應(yīng)公司的管理效率。
智能膜式燃?xì)獗硐到y(tǒng)框架如圖1所示。系統(tǒng)設(shè)計(jì)參照物聯(lián)網(wǎng)分層體系劃分為三層:數(shù)據(jù)感知層、網(wǎng)絡(luò)傳輸層、應(yīng)用管理層[2]。數(shù)據(jù)感知層主要完成燃?xì)獗砜潭刃畔⒌牟杉?、發(fā)送終端數(shù)據(jù)、接收控制指令等功能。網(wǎng)絡(luò)傳輸層主要將感知層數(shù)據(jù)利用NB-IoT基站發(fā)送給物聯(lián)網(wǎng)服務(wù)器,然后經(jīng)結(jié)構(gòu)化處理后存入到數(shù)據(jù)庫(kù)中。應(yīng)用管理層主要是在PC端和手機(jī)端實(shí)時(shí)的處理燃?xì)獗砉?jié)點(diǎn)的狀態(tài)信息。
圖1 系統(tǒng)框架
數(shù)據(jù)感知節(jié)點(diǎn)的低功耗、高可靠性設(shè)計(jì)是整個(gè)系統(tǒng)高效運(yùn)行的基礎(chǔ)。終端節(jié)點(diǎn)采用獨(dú)立干電池供電,主要的功耗集中于數(shù)據(jù)的采集與傳輸上,為了整體上長(zhǎng)期保持在一個(gè)低功耗的水平狀態(tài),從兩個(gè)角度進(jìn)行系統(tǒng)設(shè)計(jì),一方面對(duì)這部分程序的有效執(zhí)行時(shí)間進(jìn)行嚴(yán)格的限制,采用定時(shí)器的定時(shí)中斷思路,設(shè)置指定的時(shí)間點(diǎn)觸發(fā)數(shù)據(jù)采集模塊工作,不在此時(shí)間內(nèi)則系統(tǒng)保持待機(jī)模式,節(jié)省功耗;另一方面對(duì)程序進(jìn)行精簡(jiǎn)化設(shè)計(jì),將圖像傳感器采集到的原始圖像數(shù)據(jù)進(jìn)行數(shù)據(jù)壓縮,減少識(shí)別程序的數(shù)據(jù)處理量,從而降低指令執(zhí)行產(chǎn)生的硬件功耗。終端節(jié)點(diǎn)所處的運(yùn)行環(huán)境會(huì)隨著居民小區(qū)的位置不同而發(fā)生改變,需要考慮消除一些不穩(wěn)定的環(huán)境因素對(duì)電路造成的干擾,系統(tǒng)設(shè)計(jì)了獨(dú)立的看門狗程序,在系統(tǒng)不能正常響應(yīng)的情況下對(duì)系統(tǒng)進(jìn)行復(fù)位,并記錄故障信息供系統(tǒng)優(yōu)化作參考,從而保證系統(tǒng)的正常工作。
硬件設(shè)計(jì)結(jié)構(gòu)如圖2所示。整個(gè)硬件系統(tǒng)由STM32L471RG主控制微處理器、M5310A無(wú)線傳輸模塊、燃?xì)獗砜潭茸R(shí)別模塊、電源模塊、MQ-5燃?xì)鈾z測(cè)模塊、報(bào)警模塊、時(shí)鐘模塊構(gòu)成。各個(gè)模塊之間功能相互獨(dú)立,通過(guò)硬件接口進(jìn)行數(shù)據(jù)的交換。主控制STM32L471RG微處理器通過(guò)外置引腳與其他模塊連接,實(shí)現(xiàn)與模塊的數(shù)據(jù)傳輸與指令控制。燃?xì)獗砜潭茸R(shí)別模塊利用圖像傳感器OV7670拍攝燃?xì)獗砩厦娴目潭龋?jīng)AL422B緩存芯片輸出給主控制微處理器,微處理器運(yùn)行嵌入式圖像識(shí)別算法計(jì)算出燃?xì)庵担ㄟ^(guò)M5310A傳輸模塊發(fā)送到管理后臺(tái),從而實(shí)現(xiàn)燃?xì)鈹?shù)據(jù)的遠(yuǎn)程采集功能。電源模塊的設(shè)計(jì)基于終端節(jié)點(diǎn)的低功耗、高可靠性要求對(duì)系統(tǒng)進(jìn)行能量的管理與分配[3]。MQ-5燃?xì)鈾z測(cè)模塊是對(duì)燃?xì)獗斫涌诓课贿M(jìn)行安全監(jiān)測(cè),如果燃?xì)獍l(fā)生了泄露,會(huì)觸發(fā)報(bào)警模塊,上傳異常信息至管理系統(tǒng),以便天然氣供應(yīng)公司及時(shí)的維護(hù)和管理。
圖2 硬件設(shè)計(jì)結(jié)構(gòu)
STM32L471RG是由STMicroelectronics(意法半導(dǎo)體)公司生產(chǎn)的一款超低功耗高性能的嵌入式ARM微控制器(Micro Control Unit,MCU),基于Cortex-M4架構(gòu),CPU主頻高達(dá)80 MHz,擁有128 kB的SRAM、1 MB的Flash,采用LQFP64封裝。該芯片是系統(tǒng)的數(shù)據(jù)處理中心和指令控制中心。芯片資源滿足終端節(jié)點(diǎn)的硬件設(shè)計(jì)要求。
燃?xì)獗砜潭茸R(shí)別模塊由圖像傳感器OV7670與AL422B圖像數(shù)據(jù)存儲(chǔ)芯片共同構(gòu)成。OV7670是OmniVision公司生產(chǎn)的一款具有30 W像素的CMOS圖像傳感器模塊[4],可以輸出320*240像素大小的QVGA格式圖像數(shù)據(jù),對(duì)環(huán)境溫度要求不敏感,抗干擾能力強(qiáng),在各種復(fù)雜條件下都能對(duì)燃?xì)獗淼目潭冗M(jìn)行很好地取像。OV7670的電路原理如圖3所示。AL422B芯片是AverLogic公司生產(chǎn)的一塊存儲(chǔ)容量為384 k*8 bits的專門用于圖像數(shù)據(jù)存儲(chǔ)的FIFO芯片[5],支持高速的異步串行I/O讀寫操作。由于OV7670圖像采集速度和STM32L471RG的I/O引腳讀取速度不一致,并且直接處理OV7670采集的圖像數(shù)據(jù)對(duì)STM32L471RG的資源消耗較大,故采用AL422B芯片做圖像數(shù)據(jù)緩存區(qū)。AL422B的電路原理如圖4所示。
圖3 OV7670電路原理圖
圖4 AL422B的電路原理
OV7670的像素時(shí)鐘PLCK引腳與AL422B的數(shù)據(jù)讀入時(shí)鐘WCK引腳相連,用于寫時(shí)鐘信號(hào)控制。AL422B的DI0-DI7引腳接收OV7670的D0-D7數(shù)據(jù)輸出,STM32L471RG主控制器從AL422B的DO0-DO7引腳順序讀入圖像緩存數(shù)據(jù)。數(shù)據(jù)的輸出信號(hào)由OE引腳輸入,數(shù)據(jù)的讀取信號(hào)由RE引腳輸入,由主控制器控制。
NB-IoT是聚焦于低功耗廣域網(wǎng)(Low-Power Wide-Area Network,LPWAN)領(lǐng)域的一種新興物聯(lián)網(wǎng)數(shù)據(jù)傳輸協(xié)議[6]。相比較于LoRa、SigFox、GPRS等LPWAN領(lǐng)域的其他通信技術(shù),NB-IoT構(gòu)建于蜂窩網(wǎng)絡(luò)[7],使用License頻段,可以直接部署于GSM、UMTS或LTE網(wǎng)絡(luò)[8],消耗200 kHz左右的帶寬。
M5310A是一款基于華為海思Hi2110芯片的低功耗、深覆蓋、集成度高的工業(yè)級(jí)NB-IoT無(wú)線通信模組。模組包含的基本電路有:電源模塊、通用異步收發(fā)器(UART)模塊、射頻(radio frequency,RF)電路模塊、SIM(subscriber identity module)卡模塊、串行調(diào)試(serial wire debug,SWD)模塊、模/數(shù)轉(zhuǎn)換(analogue-to-digital conversion,ADC)模塊[9]。
M5310A模組通過(guò)串口RXD、TXD與MCU進(jìn)行的數(shù)據(jù)傳輸。發(fā)送數(shù)據(jù)的時(shí)候,MCU通過(guò)RXD引腳將燃?xì)獗頂?shù)據(jù)發(fā)送給M5310A模塊,然后A/D模塊將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)經(jīng)RF射頻電路發(fā)送出去;接收數(shù)據(jù)的時(shí)候,A/D轉(zhuǎn)換模塊將RF電路接收的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),通過(guò)TXD引腳發(fā)送給MCU。在一次數(shù)據(jù)收發(fā)結(jié)束之后,模組進(jìn)入PSM(Power Saving Mode)節(jié)電模式,停止大部分的連網(wǎng)活動(dòng),此時(shí)模組的最大耗電流為5 μA。M5310A模組與STM32L471RG主控制微處理器的通信電路如圖5所示。
圖5 M5310A通信電路
穩(wěn)定的電壓輸入直接關(guān)系到系統(tǒng)工作的穩(wěn)定性和性能的可靠性[10],考慮到各硬件模塊所需要的電壓有所差異,所以電源模塊采用四節(jié)1.5 V干電池串聯(lián)并使用低壓差線性穩(wěn)壓器TPS709系列芯片為系統(tǒng)各硬件子模塊進(jìn)行分級(jí)供電。TPS709系列芯片是德州儀器專門針對(duì)功耗敏感型應(yīng)用而設(shè)計(jì)的超低靜態(tài)電流器件,此系列芯片輸入電壓范圍是2.7~30 V,可提供固定輸出電壓范圍是1.2~6.5 V,溫度范圍內(nèi)其誤差僅為2%。其中TPS70933芯片輸出電壓3.6 V,為STM32L471RG主控制芯片供電,TPS70939芯片輸出3.9 V電壓,為圖像傳感器OV7670和AL422B緩存芯片提供工作電壓。MCU使能穩(wěn)壓芯片的EN引腳,置其為高電平,使其輸出滿足各模塊需求的工作電壓,模塊正常工作;置EN引腳為低電平,模塊處于低功耗待機(jī)模式。
整個(gè)系統(tǒng)是在Keil4集成環(huán)境下利用C語(yǔ)言進(jìn)行開(kāi)發(fā)的,按照模塊化的編程思想,將系統(tǒng)劃分為:STM32L471RG芯片驅(qū)動(dòng)設(shè)置模塊、燃?xì)獗砜潭茸R(shí)別模塊、無(wú)線通信模塊、MQ-5燃?xì)鈾z測(cè)模塊等。軟件模塊設(shè)計(jì)如圖6所示。
圖6 軟件模塊設(shè)計(jì)
主程序執(zhí)行流程如圖7所示。系統(tǒng)通電完成后,首先對(duì)各個(gè)模塊的初始化驗(yàn)證,以確定硬件可以正常上電、工作。接著判斷燃?xì)獗斫K端是否已在系統(tǒng)中進(jìn)行注冊(cè),注冊(cè)過(guò)的終端可以正常接入系統(tǒng)。MQ-5燃?xì)鈾z測(cè)子模塊初始化之后就會(huì)實(shí)時(shí)檢測(cè)燃?xì)獗碇苓叺臍怏w濃度,當(dāng)濃度過(guò)高時(shí),觸發(fā)報(bào)警機(jī)制。在燃?xì)獗碚9ぷ鞯那闆r下,系統(tǒng)處于低功耗模式,在設(shè)定的時(shí)鐘中斷被觸發(fā)的時(shí)候,調(diào)用燃?xì)獗砜潭茸R(shí)別子程序采集燃?xì)鈹?shù)據(jù),通過(guò)無(wú)線通信子程序完成數(shù)據(jù)的上報(bào),實(shí)現(xiàn)膜式燃?xì)獗頂?shù)據(jù)的遠(yuǎn)程采集功能。
圖7 主程序執(zhí)行流程
M5310A模組通信流程如圖8所示,系統(tǒng)上電后,M5310A模組首先進(jìn)行初始化,主控制器利用預(yù)先設(shè)置的AT指令對(duì)模塊進(jìn)行IMEI號(hào)、IMSI號(hào)、波特率等基礎(chǔ)參數(shù)設(shè)定,隨后檢測(cè)SIM卡狀態(tài)以及當(dāng)前的網(wǎng)絡(luò)信息強(qiáng)度,判斷是否符合入網(wǎng)要求,入網(wǎng)成功后物聯(lián)網(wǎng)云端就會(huì)記錄下這個(gè)終端設(shè)備的信息,設(shè)備激活成功。燃?xì)鈹?shù)據(jù)上報(bào)指令到來(lái)時(shí)根據(jù)NB-IoT網(wǎng)絡(luò)傳輸協(xié)議對(duì)碼表刻度數(shù)據(jù)包進(jìn)行組幀發(fā)送,發(fā)送完成之后,模組進(jìn)入低功耗待機(jī)模式,等待下一次數(shù)據(jù)發(fā)送指令的到來(lái)。
圖8 M5310A模組通信流程
燃?xì)獗砜潭茸R(shí)別模塊采用的是OV7670攝像頭模組,刻度值識(shí)別流程如圖9所示。系統(tǒng)通電后,首先會(huì)對(duì)OV7670傳感器模組及緩存芯片AL422B初始化,配置OV7670攝像頭拍攝一幀彩色圖像的分辨率為320*240,直接輸出的數(shù)據(jù)格式為RGB565,每一個(gè)像素點(diǎn)大小為2 B,一幀圖像的占用的空間為150 kB。接著根據(jù)時(shí)鐘模塊設(shè)定的采集時(shí)間去拍攝燃?xì)獗淼目潭?,將這個(gè)圖像數(shù)據(jù)寫入到AL422B芯片中,STM32L471RG微控制器讀取緩存芯片的圖像數(shù)據(jù),識(shí)別出其中的具體數(shù)值,然后通過(guò)UART串口發(fā)送給M5310A模組,最后上傳至物聯(lián)網(wǎng)服務(wù)器,服務(wù)器程序?qū)潭葦?shù)據(jù)進(jìn)行規(guī)格化處理后存入到數(shù)據(jù)庫(kù)中永久保存。一次數(shù)據(jù)采集完成之后,刻度識(shí)別模塊進(jìn)入低功耗待機(jī)模式,等待下一次時(shí)鐘中斷的到來(lái)再次執(zhí)行采集程序。嵌入式圖像識(shí)別算法的編程方法分為以下四步:
圖9 刻度值識(shí)別流程
1)圖像預(yù)處理。OV7670輸出一幀RGB565格式的圖像數(shù)據(jù)大小為150 kB,一個(gè)像素點(diǎn)大小2 B。STM32L471RG的SRAM大小為128 kB,無(wú)法直接進(jìn)行處理,所以先對(duì)圖像數(shù)據(jù)進(jìn)行壓縮,做法是從AL422B中讀取后8位,提取B通道的5位數(shù)據(jù)值,轉(zhuǎn)換成標(biāo)準(zhǔn)RGB888格式的B通道8位數(shù)據(jù)[11]。這樣一個(gè)像素點(diǎn)B通道數(shù)據(jù)占用1個(gè)字節(jié),相同分辨率的圖片大小就變成了75 kB,MCU完全有能力處理這個(gè)數(shù)據(jù)。
2)對(duì)待識(shí)別的區(qū)域進(jìn)行定位。本系統(tǒng)研究的燃?xì)獗砜潭葦?shù)值為5位,因此定位區(qū)域長(zhǎng)度只要包含5位數(shù)字字符的長(zhǎng)條區(qū)域即可,由于只要識(shí)別數(shù)字,因此,采用反向閥值對(duì)步驟①的數(shù)據(jù)處理更為合適,反向閥值后的圖像為“黑字白底”,后續(xù)的字符定位更容易處理,然后再對(duì)數(shù)字區(qū)域需要進(jìn)行上下左右定位,從而確定數(shù)字區(qū)域的邊界。
3)字符提取。對(duì)數(shù)字區(qū)域內(nèi)的字符粗分割。將步驟2)得到的數(shù)字區(qū)域進(jìn)行分割,實(shí)現(xiàn)燃?xì)獗碜址拇侄ㄎ?。由于燃?xì)獗淼臄?shù)字區(qū)域是5個(gè)字符,并且字符之間的間距都是固定的,因此可以根據(jù)中間字符的位置計(jì)算左右字符的邊界數(shù)據(jù)。然后通過(guò)自適應(yīng)閥值算法突出數(shù)字字符的特征,過(guò)濾干擾字符的信息,使得細(xì)粒度字符框內(nèi)只包含有字符數(shù)據(jù),實(shí)現(xiàn)字符的細(xì)定位。
4)字符識(shí)別。首先制作標(biāo)準(zhǔn)的字符模板庫(kù),然后使用數(shù)字模板匹配算法對(duì)細(xì)定位字符進(jìn)行數(shù)字識(shí)別,從而獲取到燃?xì)獗砜潭鹊膶?shí)際值。
在嵌入式平臺(tái)上實(shí)現(xiàn)圖像識(shí)別算法,首先要考慮的是硬件資源是否支持,其次是運(yùn)行識(shí)別算法的功耗。STM32L471RG微控制器僅有128 kB的SRAM,因此選擇在X86平臺(tái)的VS2010軟件上制作標(biāo)準(zhǔn)字符的碼表刻度數(shù)據(jù)模板然后以一維數(shù)組的形式保存下來(lái)移植到嵌入式程序中。將提取后的字符與標(biāo)準(zhǔn)模板庫(kù)進(jìn)行匹配,逐一識(shí)別出具體的刻度數(shù)字。然后將刻度數(shù)據(jù)添加上終端設(shè)備標(biāo)志信息后封裝成JSON(javaScript object notation,JS對(duì)象表示法)數(shù)據(jù)格式的字符串經(jīng)NB-IoT模塊發(fā)送給物聯(lián)網(wǎng)服務(wù)器,云端程序?qū)?shù)據(jù)進(jìn)行規(guī)格化處理,進(jìn)行持久化保存,供管理人員及居民用戶實(shí)時(shí)查看。
系統(tǒng)測(cè)試程序的開(kāi)發(fā)環(huán)境為Visual studio 2010,采用C++語(yǔ)言進(jìn)行開(kāi)發(fā)設(shè)計(jì)。測(cè)試過(guò)程中,對(duì)燃?xì)獗砜潭茸R(shí)別時(shí)間與NB-IoT模組數(shù)據(jù)傳輸時(shí)間分別進(jìn)行了記錄,其測(cè)試結(jié)果示例如表1所示。從實(shí)驗(yàn)結(jié)果中可以看出,燃?xì)獗砜潭戎档淖R(shí)別,在7次數(shù)據(jù)統(tǒng)計(jì)中,結(jié)果都在3 000 ms的時(shí)間范圍內(nèi),均值為2 428.6 ms,圖像識(shí)別算法運(yùn)行時(shí)間滿足系統(tǒng)要求,時(shí)間波動(dòng)在允許的誤差范圍內(nèi)。NB-IoT無(wú)線模組的網(wǎng)絡(luò)信號(hào)強(qiáng)度平均值在-55.1 dB,信噪比的平均值為24.2 dB。上傳36B的燃?xì)饬繑?shù)據(jù)需要的平均時(shí)間為830.3 ms,從刻度識(shí)別開(kāi)始到上傳至服務(wù)器的總耗時(shí)平均為3 544.6 ms。7次試驗(yàn)的結(jié)果均在預(yù)期范圍內(nèi),滿足遠(yuǎn)程抄表的要求。
表1 終端耗時(shí)測(cè)試結(jié)果
傳統(tǒng)的機(jī)械式膜式燃?xì)獗碓谠缙诘娜細(xì)庥?jì)量方面發(fā)揮了重要的作用,但是隨著社會(huì)信息化的發(fā)展,其存在的缺陷也逐步暴露出來(lái),抄表效率低是天然氣供應(yīng)公司亟待解決的問(wèn)題。
本文給出了一種基于NB-IoT數(shù)據(jù)傳輸方式的膜式燃?xì)獗磉h(yuǎn)程抄表解決方案。通過(guò)對(duì)不同小區(qū)環(huán)境下實(shí)驗(yàn)結(jié)果的分析得出結(jié)論:該系統(tǒng)可以在低功耗水平下穩(wěn)定準(zhǔn)確的采集燃?xì)獗頂?shù)據(jù),系統(tǒng)數(shù)據(jù)庫(kù)能夠長(zhǎng)期保存用戶的使用數(shù)據(jù),實(shí)現(xiàn)了對(duì)燃?xì)鈹?shù)據(jù)的規(guī)格化管理,很好地解決了傳統(tǒng)膜式燃?xì)獗碛捎谖锢砣毕輰?dǎo)致的抄表難、數(shù)據(jù)管理混亂等問(wèn)題,提高了天然氣供應(yīng)公司對(duì)膜式燃?xì)獗淼墓芾硇省?/p>