孫康亞,高紅亮,段玉龍,周成子
(湖北師范大學(xué) 電氣工程與自動(dòng)化學(xué)院,黃石 435000)
用電安全一直是一個(gè)非常重點(diǎn)的話題,電路中的各個(gè)參數(shù),不管是電流、電壓還是電功率只要有一個(gè)不在安全范圍內(nèi)都會導(dǎo)致一些不安全事故的發(fā)生,輕則損害用電設(shè)備,重則引起火災(zāi),危害人的生命財(cái)產(chǎn)安全。目前,在電路參數(shù)監(jiān)測方面,最廣泛使用的方法還是人在用電設(shè)備旁時(shí)刻觀察電參數(shù)的變化,但是這種方法不但費(fèi)時(shí)費(fèi)力,而且當(dāng)發(fā)生危險(xiǎn)時(shí),人手動(dòng)去關(guān)用電器的開關(guān)過于危險(xiǎn)。本系統(tǒng)的設(shè)計(jì)將電路參數(shù)監(jiān)測和電路控制與物聯(lián)網(wǎng)云平臺相結(jié)合,實(shí)現(xiàn)了遠(yuǎn)程監(jiān)測和控制電路,不但提高了安全性而且更智能化。
本系統(tǒng)主要是通過ADC 采集獲取電路的電壓、電流和功率這3 種電路參數(shù),并通過WiFi 模塊和阿里云服務(wù)器,實(shí)現(xiàn)微信小程序與STM32 主控單元之間的雙向通信,其中包括數(shù)據(jù)的遠(yuǎn)程監(jiān)測、整個(gè)電路的通斷以及報(bào)警器的開關(guān)。
系統(tǒng)主要由數(shù)據(jù)采集單元、主控單元、執(zhí)行單元和微信小程序數(shù)據(jù)處理單元這4 部分組成。數(shù)據(jù)采集單元包括通過分壓電路獲取電路電壓值和通過ACS712 電流傳感器獲取電路電流值這2 部分組成。主控單元主要是STM32 對采集到的數(shù)據(jù)進(jìn)行進(jìn)一步處理[1];執(zhí)行單元主要是對STM32 處理過后的數(shù)據(jù)進(jìn)行本地執(zhí)行,這包括OLED 顯示,繼電器控制電路的通斷和超過設(shè)定閾值自動(dòng)報(bào)警這3 部分;微信小程序數(shù)據(jù)處理單元一部分為對阿里云服務(wù)器內(nèi)的數(shù)據(jù)進(jìn)行訂閱,實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程監(jiān)測,另一部分為向阿里云服務(wù)器上傳命令,再通過WiFi 模塊將命令下發(fā)給STM32 主控單元來控制電路的通斷以及報(bào)警器的開關(guān)。系統(tǒng)的總體框圖如圖1 所示。
圖1 系統(tǒng)的總體框圖Fig.1 Overall diagram of system
STM32F103 系列芯片有3 個(gè)ADC,且ADC 的模式非常多,功能非常強(qiáng)大,但是它的缺點(diǎn)是只能采集到0~3.3 V 的電壓值,不能完全滿足日常使用的需求,所以需要在外部并聯(lián)一個(gè)分壓電路,使得電壓測量范圍擴(kuò)大為-20 V~20 V。根據(jù)基爾霍夫定律,節(jié)點(diǎn)流入的電流等于流出的電流可以得到關(guān)系式:
式中:VI為輸入端的電壓值;VO為輸出端的電壓值。根據(jù)對應(yīng)關(guān)系代入2 組數(shù)據(jù)對公式(1)進(jìn)行化簡可以得到:
ACS712 電流傳感器完全基于霍爾感應(yīng)的原理設(shè)計(jì),該芯片由一個(gè)精確的低偏移線性霍爾傳感器電路與位于接近IC 表面的銅箔組成,電流流過銅箔時(shí),產(chǎn)生一個(gè)磁場,霍爾元件根據(jù)磁場感應(yīng)出一個(gè)線性的電壓信號,經(jīng)過內(nèi)部的放大、濾波、斬波與修正電路,輸出一個(gè)電壓信號。該型號的傳感器芯片靈敏度系數(shù)為185 mV/A,其供電電壓為5 V,輸出電壓與檢測電流的關(guān)系為公式(3)所示:
式中:V 表示輸出電壓值;IP表示檢測電流值。
本系統(tǒng)的執(zhí)行單元電路主要包括3 部分。第1部分為OLED 顯示部分,它的主要功能是對經(jīng)過STM32 處理器處理過后的數(shù)據(jù)進(jìn)行直接顯示,包括電路的實(shí)時(shí)電流值、電壓值和功率值這3 組數(shù)據(jù);第2 部分為繼電器電路,繼電器串聯(lián)到電路中,用按鍵1 來控制繼電器的通斷,按鍵每按下一次繼電器就進(jìn)行一次反轉(zhuǎn),通過控制繼電器的通斷來控制整個(gè)電路的通斷;第3 部分為聲光報(bào)警電路,通過設(shè)置電流、電壓、功率這3 組數(shù)據(jù)的閾值來設(shè)置報(bào)警條件,這3 組數(shù)據(jù)只要有一個(gè)超過設(shè)定閾值,蜂鳴器就會發(fā)出報(bào)警聲,同時(shí)LED 燈會不停的閃爍,可以通過控制繼電器斷開電路或者是通過按下按鍵2關(guān)閉聲光報(bào)警[2]。
本系統(tǒng)的軟件設(shè)計(jì)可以分為ADC 采集數(shù)據(jù)的處理、ESP8266-01S 模塊的數(shù)據(jù)通信、微信小程序3部分,系統(tǒng)的軟件設(shè)計(jì)主流程如圖2 所示。
圖2 軟件流程Fig.2 Software flow chart
本系統(tǒng)的設(shè)計(jì)在ADC 采集部分選用了雙ADC采集,在電路電壓采集電路部分用的是ADC1 采集通道,在電流采集電路部分用的是ADC2 采集通道,采集到的數(shù)值存儲到DMA 中[3]。所以在軟件設(shè)計(jì)方面首先進(jìn)行了DMA 的相關(guān)配置,這包括外設(shè)的地址、存儲器的地址、數(shù)據(jù)的來源、數(shù)據(jù)的大小這些基本配置,以及將傳輸模式設(shè)置為循環(huán)傳輸模式,將DMA傳輸通道的優(yōu)先級配置為最高這兩項(xiàng)高級配置。ADC1 和ADC2 的配置完全一樣,全部配置為掃描模式,連續(xù)轉(zhuǎn)換模式,軟件開啟轉(zhuǎn)換,轉(zhuǎn)換結(jié)果右對齊,ADC 時(shí)鐘進(jìn)行8 分頻,即9 MHz,采樣時(shí)間設(shè)置為55.5 個(gè)時(shí)鐘周期。
ADC1 采集端口用來采集電路中的電壓大小,將ADC 端口與外部并聯(lián)的分壓電路的OUT 口相連接,將采集到的模擬量先經(jīng)過模數(shù)轉(zhuǎn)換后求出采集到的實(shí)際電壓值,再根據(jù)并聯(lián)電路分壓的原理計(jì)算出整個(gè)分壓前對應(yīng)的電壓值,即電路的電壓值。轉(zhuǎn)換過程代碼如下:
ADC2 采集端口與ACS712 電流傳感器的OUT端口相連接,ACS712 的輸出端輸出的模擬量經(jīng)過模數(shù)轉(zhuǎn)換后的電壓值與電路中的實(shí)際電流值是一個(gè)線性關(guān)系,只需按照這個(gè)線性關(guān)系進(jìn)行計(jì)算即可求出電路中的實(shí)際電流值,這一部分的轉(zhuǎn)換代碼如下:
經(jīng)過上面這兩步的轉(zhuǎn)換和計(jì)算就可以求出電路中的實(shí)時(shí)電壓值和電流值,由于電路中的電功率等于電壓和電流的乘積,所以只要將上述求出的電壓和電流值做一下乘法便可以求出電路中的實(shí)時(shí)功率。
本系統(tǒng)使用ESP8266-01S 模塊作為主要通訊模塊,通過它可以實(shí)現(xiàn)將數(shù)據(jù)上傳至云服務(wù)器,也可使STM32 通過它來接收來自云端的數(shù)據(jù)或者命令,它相當(dāng)于連接STM32 和云服務(wù)器之間的橋梁[4]。
在ESP8266 初始化配置過程中,首先通過AT指令測試STM32 與WiFi 模塊的通訊是否正常,通訊正常則繼續(xù)通過AT 指令進(jìn)行軟件復(fù)位,然后再利用AT 指令將其設(shè)置為STATION 模式并設(shè)置WiFi的名稱和密碼,進(jìn)行WiFi 的連接(此時(shí)手機(jī)、電腦和ESP8266-01S 模塊構(gòu)成局域網(wǎng))。然后進(jìn)行TCP連接,在代碼中將MQTT 服務(wù)器的IP 地址和端口進(jìn)行封裝處理,并利用“AT+CIPSTART”指令將封裝好的數(shù)據(jù)發(fā)送給云平臺,等待平臺響應(yīng)后獲取返回的數(shù)據(jù),這樣便完成了WiFi 模塊與云服務(wù)器之間的連接。
系統(tǒng)通過程序設(shè)定一個(gè)5 s 的周期,每5 s 系統(tǒng)將前面通過STM32 處理過后的電路參數(shù)(電壓、電流、功率)數(shù)據(jù)進(jìn)行封裝處理后向云服務(wù)發(fā)送一次,這樣便實(shí)現(xiàn)了電路數(shù)據(jù)向云端實(shí)時(shí)傳輸?shù)墓δ躘5]。WiFi 模塊向云服務(wù)器發(fā)送數(shù)據(jù)的具體流程如圖3所示。
圖3 WiFi 模塊向云服務(wù)器發(fā)送數(shù)據(jù)流程Fig.3 Flow chart of WiFi module sending data to cloud server
本系統(tǒng)的上位機(jī)使用的是微信小程序,開發(fā)設(shè)計(jì)小程序使用的是微信開發(fā)者工具。小程序首先需要連接到與上述MQTT 服務(wù)器相同的IP 地址和端口才可以實(shí)現(xiàn)正常通訊[6],服務(wù)器連接成功后訂閱數(shù)據(jù)的Topic 就可以成功接收上述ESP8266-01S 封裝上傳給云平臺的數(shù)據(jù)。小程序接收到數(shù)據(jù)后會根據(jù)數(shù)據(jù)對應(yīng)的名稱在相關(guān)位置顯示出來。
微信小程序除了接收數(shù)據(jù),還可以向STM32 下發(fā)命令來控制聲光報(bào)警器的開關(guān)和整個(gè)電路通斷的開關(guān)。當(dāng)按下小程序中的相應(yīng)控制按鈕后,小程序會向云端發(fā)布命令的Topic 發(fā)送一個(gè)cJSON 格式的數(shù)據(jù),然后STM32 通過WiFi 模塊訂閱這個(gè)Topic接收到此cJSON 格式的數(shù)據(jù)后,緊接著對這個(gè)cJSON數(shù)據(jù)進(jìn)行解析,根據(jù)解析內(nèi)容做出相應(yīng)操作。小程序向云端發(fā)送cJSON 格式的數(shù)據(jù)代碼如下:
TM32 通過WiFi 模塊訂閱這個(gè)Topic 接收到此cJSON 格式的數(shù)據(jù),對這個(gè)cJSON 數(shù)據(jù)進(jìn)行解析的相關(guān)代碼如下:
在測試過程中設(shè)置電流閾值為3 A,可以看出當(dāng)電流超過3 A 時(shí),小程序上的“報(bào)警”按鈕會自動(dòng)打開,同時(shí)設(shè)備上的報(bào)警燈會不停閃爍,蜂鳴器會不停鳴叫。此時(shí)的小程序界面如圖4 所示,斷電后小程序界面如圖5 所示,系統(tǒng)實(shí)物圖如圖6 所示。此時(shí)可通過STM32 上按鍵關(guān)閉聲光報(bào)警也可通過小程序上的“報(bào)警”按鈕關(guān)閉報(bào)警。
圖4 超過閾值小程序界面Fig.4 Exceeding threshold in mini program interface
圖5 斷電后小程序界面Fig.5 Mini program interface after power outage
圖6 超過閾值實(shí)物圖Fig.6 Physical image exceeding threshold
當(dāng)需要關(guān)閉電路時(shí),可以通過STM32 的另一個(gè)按鍵控制繼電器,也可以通過小程序上的“斷電”按鈕控制繼電器,當(dāng)繼電器被打開后,整個(gè)電路直接被短路,設(shè)備上的電流、電壓、電功率值全部變?yōu)?。打開繼電器后的小程序如圖5 所示,“斷電”按鈕為打開狀態(tài),電路的3 組參數(shù)值全為0,設(shè)備的實(shí)物圖如圖7 所示,代表繼電器開啟的指示燈亮起,整個(gè)電路斷路。
圖7 斷電后實(shí)物圖Fig.7 Physical image after power outage
這款基于STM32F103 開發(fā)板和MQTT 協(xié)議的物聯(lián)網(wǎng)遠(yuǎn)程電路參數(shù)監(jiān)測系統(tǒng),除了在設(shè)備端實(shí)時(shí)顯示電路的參數(shù)外還可以在微信小程序上實(shí)時(shí)監(jiān)測電路參數(shù)的變化,實(shí)現(xiàn)了數(shù)據(jù)的遠(yuǎn)程監(jiān)測,當(dāng)電路參數(shù)超過設(shè)定閾值后,設(shè)備端和微信小程序端都會收到報(bào)警信息,同時(shí)設(shè)備端和小程序端都可以控制電路的通斷。經(jīng)過反復(fù)測試,整個(gè)系統(tǒng)基本的實(shí)時(shí)性好、靈敏度高,而且相較于現(xiàn)在的用人工現(xiàn)場監(jiān)測電路參數(shù)和控制電路來說,這種方法更智能化更安全,具有一定的實(shí)際應(yīng)用意義。