伍敏君
(中山火炬職業(yè)技術(shù)學(xué)院光電信息學(xué)院 廣東省中山市 528400)
經(jīng)濟(jì)發(fā)展使人們生活水平不斷提高,生活用水與工業(yè)用水量大幅度增加;另一方面,要?jiǎng)討B(tài)監(jiān)測(cè)湖泊、水庫(kù)、河流等水位以研究生態(tài)環(huán)境變化、防御自然災(zāi)害,因此,水位監(jiān)測(cè)與控制至關(guān)重要[1-3]。電子技術(shù)的迅速發(fā)展,使智能化監(jiān)控已成為發(fā)展趨勢(shì)。移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)技術(shù)、傳感器技術(shù)的發(fā)展,為實(shí)時(shí)監(jiān)測(cè)提供了必要條件[4-5]。本文以水位為監(jiān)測(cè)對(duì)象,設(shè)計(jì)一款水位實(shí)時(shí)監(jiān)測(cè)報(bào)警系統(tǒng),通過(guò)傳感器采集數(shù)據(jù)并顯示于液晶顯示器中,本系統(tǒng)可應(yīng)用于日常生活中的水位監(jiān)測(cè)場(chǎng)合。
本系統(tǒng)以ArduinoUNO 控制器為核心,結(jié)合傳感器技術(shù),實(shí)現(xiàn)水位實(shí)時(shí)監(jiān)測(cè)與報(bào)警。本系統(tǒng)由控制器模塊、水位檢測(cè)模塊、顯示模塊、報(bào)警模塊等四部分組成。
本系統(tǒng)采用的控制器為ArduinoUNO,如圖1所示,其主控芯片為ATmega328P,核心處理器是AVR 單片機(jī)。ArduinoUNO 是開源的硬件,資源豐富,有14 個(gè)數(shù)字I/O 口,6 個(gè)PWM 輸出端口,6 個(gè)模擬輸入端口,1 個(gè)16MHz 晶振,1 個(gè)復(fù)位按鍵,1 個(gè)USB 接口以及1 個(gè)直流電源插孔等[6]。ArduinoUNO 的工作電壓為5V,既可用USB 供電,也可用外部供電。其價(jià)格低,穩(wěn)定性好,設(shè)有一個(gè)自恢復(fù)保險(xiǎn)絲,當(dāng)短路或電流過(guò)大時(shí),自動(dòng)斷開供電,起保護(hù)ArduinoUNO 板和計(jì)算機(jī)USB 端口的作用。
本系統(tǒng)的水位檢測(cè)模塊采用深圳科易互動(dòng)科技有限公司研發(fā)的一款水位傳感器,如圖2所示。此傳感器采用半月形凹陷防滑處理設(shè)計(jì),表面有一系列平行導(dǎo)線用于測(cè)量水滴水量的大小。模塊體積小巧,輕便簡(jiǎn)單,低功耗,靈敏性好,工作電壓為5V,工作電流低于20mA。該水位傳感器可直接與控制器相連接,有三個(gè)引腳,其中,“-”為GND 端口,“+”為VCC 端口,“S”為數(shù)據(jù)輸出端口。
圖1:ArduinoUNO 控制器
圖2:水位傳感器
圖3:LCD1602 液晶顯示器
本系統(tǒng)的顯示模塊采用液晶顯示器LCD1602 芯片,如圖3所示。該芯片能顯示2 行信息,每行可顯示16 個(gè)字符、數(shù)字或字母,各字符尺寸為2.95×4.35mm。LCD1602 的工作電壓為5.0V,工作電流為2.0mA,驅(qū)動(dòng)簡(jiǎn)單,共有16 個(gè)引腳。其中,引腳1 為電源地,引腳2 為電源正極,引腳3 為液晶顯示偏壓信號(hào),引腳4 為數(shù)據(jù)/命令選擇端,引腳5 為讀/寫選擇端,引腳6 為使能信號(hào),引腳7 ~14為數(shù)據(jù)口,引腳15 為背光源正極,引腳16 為背光源負(fù)極。
本系統(tǒng)的報(bào)警模塊采用由LED 指示燈和有源蜂鳴器組成的電路。為了使LED、有源蜂鳴器工作在額定電壓和額定電流范圍內(nèi),兩者各串聯(lián)220Ω 電阻。當(dāng)水位低于預(yù)設(shè)的報(bào)警值時(shí),報(bào)警模塊不工作;否則,觸發(fā)報(bào)警模塊工作,驅(qū)動(dòng)LED 點(diǎn)亮、蜂鳴器發(fā)響。
本系統(tǒng)的連接圖如圖4所示,LCD1602 芯片的16 個(gè)引腳,采用八位連接法與ArduinoUNO 控制器連接,即第7 ~14 引腳的數(shù)據(jù)位D0 ~D7 分別連接到ArduinoUNO 控制器的八個(gè)數(shù)字I/O 口9、8、7、6、5、4、3、2。為了便于調(diào)節(jié)液晶顯示器的對(duì)比度,第3 引腳接入10kΩ 可調(diào)電阻。
LED 和有源蜂鳴器的正極并聯(lián)后,接至ArduinoUNO 控制器的數(shù)字I/O 口13。LED 和有源蜂鳴器的負(fù)極分別串聯(lián)220Ω 電阻,再接至控制器的GND 端口。
水位傳感器的正極接至ArduinoUNO 控制器的VCC 端口,其負(fù)極接至控制器的GND 端口,S 端口接控制器的模擬輸入端口A0。
本系統(tǒng)所有模塊功能的程序均在Arduino IDE 平臺(tái)中設(shè)計(jì)與完成。在Arduino IDE 平臺(tái)上,Arduino 語(yǔ)言把AVR 單片機(jī)相關(guān)的參數(shù)設(shè)置封裝成函數(shù),減少了硬件底層的開發(fā)。
啟動(dòng)Arduino IDE 后,新建工程,系統(tǒng)已自動(dòng)在工程中添加如下內(nèi)容:
圖4:系統(tǒng)連接圖
圖5:軟件設(shè)計(jì)流程圖
圖6:水位傳感器置于空氣中
圖7:水位傳感器浸入水中
Arduino 程序中沒有C 語(yǔ)言要求的main()函數(shù),只需完成setup()和loop()兩個(gè)函數(shù)的編寫。其中,setup()只執(zhí)行一次,完成程序的一些初始化設(shè)置;loop()一直反復(fù)執(zhí)行,相當(dāng)于while(1)的循環(huán)語(yǔ)句,是實(shí)現(xiàn)程序功能的主體代碼。
本系統(tǒng)軟件部分的設(shè)計(jì)包括變量的定義與初始化、數(shù)據(jù)采集、數(shù)據(jù)分析、顯示器設(shè)置等。軟件設(shè)計(jì)流程圖如圖5所示。
當(dāng)Arduino UNO 控制器上電后,啟動(dòng)本系統(tǒng)。首先完成系統(tǒng)初始化,執(zhí)行頭文件命令,由于系統(tǒng)采用液晶顯示器,需要包含頭文件“LiquidCrystal.h”。接著完成變量的定義與初始化等。
在setup()函數(shù)里,將LED、蜂鳴器引腳配置為OUTPUT 端口,串口波特率初始化為9600,LCD1602 初始化為16 列2 行,傳感器采集第一次數(shù)據(jù)等。
在loop()函數(shù)里,定時(shí)采集傳感器數(shù)據(jù),通過(guò)analogRead 函數(shù)讀取傳感數(shù)據(jù),并作數(shù)據(jù)分析,水位數(shù)據(jù)顯示在LCD1602 中。LCD1602 第一行顯示當(dāng)前的日期,設(shè)置格式為“年-月-日”;第二行顯示“water:”字符串,其后顯示傳感數(shù)據(jù)。當(dāng)傳感數(shù)據(jù)大于預(yù)設(shè)的報(bào)警值300 時(shí),啟動(dòng)LED 燈點(diǎn)亮、蜂鳴器報(bào)警。系統(tǒng)每隔3s 自動(dòng)采集并更新數(shù)據(jù)于LCD1602 中。
為了測(cè)試系統(tǒng)的功能、穩(wěn)定性以及可行性,將系統(tǒng)分別置于空氣和水中,通過(guò)實(shí)驗(yàn)采集數(shù)據(jù),記錄相應(yīng)數(shù)值。如圖6所示,當(dāng)水位傳感器置于空氣中,此時(shí)未浸入水中,水位傳感器采集到的數(shù)據(jù)為9,通過(guò)自定義函數(shù)完成數(shù)據(jù)轉(zhuǎn)換,LCD1602 中顯示為“009”。
如圖7所示,當(dāng)水位傳感器浸入水中,將其采集到的數(shù)據(jù)顯示于LCD1602 中,本次采集數(shù)據(jù)為“611”,大于預(yù)設(shè)的報(bào)警值300,則觸發(fā)報(bào)警模塊,此時(shí)Arduino UNO 驅(qū)動(dòng)LED 點(diǎn)亮,蜂鳴器發(fā)響,實(shí)現(xiàn)水位過(guò)高的報(bào)警機(jī)制。
本文設(shè)計(jì)并制作一款基于Arduino的水位監(jiān)測(cè)報(bào)警系統(tǒng),本系統(tǒng)電路設(shè)計(jì)簡(jiǎn)明,實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè),定時(shí)更新并顯示水位的傳感數(shù)據(jù)。通過(guò)實(shí)驗(yàn)表明,系統(tǒng)采集、數(shù)據(jù)處理、數(shù)據(jù)顯示等各功能可靠,報(bào)警響應(yīng)迅速,滿足水位實(shí)時(shí)監(jiān)測(cè)的需求。