伍敏君
(中山火炬職業技術學院光電信息學院 廣東省中山市 528400)
經濟發展使人們生活水平不斷提高,生活用水與工業用水量大幅度增加;另一方面,要動態監測湖泊、水庫、河流等水位以研究生態環境變化、防御自然災害,因此,水位監測與控制至關重要[1-3]。電子技術的迅速發展,使智能化監控已成為發展趨勢。移動互聯網、物聯網技術、傳感器技術的發展,為實時監測提供了必要條件[4-5]。本文以水位為監測對象,設計一款水位實時監測報警系統,通過傳感器采集數據并顯示于液晶顯示器中,本系統可應用于日常生活中的水位監測場合。
本系統以ArduinoUNO 控制器為核心,結合傳感器技術,實現水位實時監測與報警。本系統由控制器模塊、水位檢測模塊、顯示模塊、報警模塊等四部分組成。
本系統采用的控制器為ArduinoUNO,如圖1所示,其主控芯片為ATmega328P,核心處理器是AVR 單片機。ArduinoUNO 是開源的硬件,資源豐富,有14 個數字I/O 口,6 個PWM 輸出端口,6 個模擬輸入端口,1 個16MHz 晶振,1 個復位按鍵,1 個USB 接口以及1 個直流電源插孔等[6]。ArduinoUNO 的工作電壓為5V,既可用USB 供電,也可用外部供電。其價格低,穩定性好,設有一個自恢復保險絲,當短路或電流過大時,自動斷開供電,起保護ArduinoUNO 板和計算機USB 端口的作用。
本系統的水位檢測模塊采用深圳科易互動科技有限公司研發的一款水位傳感器,如圖2所示。此傳感器采用半月形凹陷防滑處理設計,表面有一系列平行導線用于測量水滴水量的大小。模塊體積小巧,輕便簡單,低功耗,靈敏性好,工作電壓為5V,工作電流低于20mA。該水位傳感器可直接與控制器相連接,有三個引腳,其中,“-”為GND 端口,“+”為VCC 端口,“S”為數據輸出端口。

圖1:ArduinoUNO 控制器

圖2:水位傳感器

圖3:LCD1602 液晶顯示器
本系統的顯示模塊采用液晶顯示器LCD1602 芯片,如圖3所示。該芯片能顯示2 行信息,每行可顯示16 個字符、數字或字母,各字符尺寸為2.95×4.35mm。LCD1602 的工作電壓為5.0V,工作電流為2.0mA,驅動簡單,共有16 個引腳。其中,引腳1 為電源地,引腳2 為電源正極,引腳3 為液晶顯示偏壓信號,引腳4 為數據/命令選擇端,引腳5 為讀/寫選擇端,引腳6 為使能信號,引腳7 ~14為數據口,引腳15 為背光源正極,引腳16 為背光源負極。
本系統的報警模塊采用由LED 指示燈和有源蜂鳴器組成的電路。為了使LED、有源蜂鳴器工作在額定電壓和額定電流范圍內,兩者各串聯220Ω 電阻。當水位低于預設的報警值時,報警模塊不工作;否則,觸發報警模塊工作,驅動LED 點亮、蜂鳴器發響。
本系統的連接圖如圖4所示,LCD1602 芯片的16 個引腳,采用八位連接法與ArduinoUNO 控制器連接,即第7 ~14 引腳的數據位D0 ~D7 分別連接到ArduinoUNO 控制器的八個數字I/O 口9、8、7、6、5、4、3、2。為了便于調節液晶顯示器的對比度,第3 引腳接入10kΩ 可調電阻。
LED 和有源蜂鳴器的正極并聯后,接至ArduinoUNO 控制器的數字I/O 口13。LED 和有源蜂鳴器的負極分別串聯220Ω 電阻,再接至控制器的GND 端口。
水位傳感器的正極接至ArduinoUNO 控制器的VCC 端口,其負極接至控制器的GND 端口,S 端口接控制器的模擬輸入端口A0。
本系統所有模塊功能的程序均在Arduino IDE 平臺中設計與完成。在Arduino IDE 平臺上,Arduino 語言把AVR 單片機相關的參數設置封裝成函數,減少了硬件底層的開發。
啟動Arduino IDE 后,新建工程,系統已自動在工程中添加如下內容:

圖4:系統連接圖



圖5:軟件設計流程圖

圖6:水位傳感器置于空氣中

圖7:水位傳感器浸入水中
Arduino 程序中沒有C 語言要求的main()函數,只需完成setup()和loop()兩個函數的編寫。其中,setup()只執行一次,完成程序的一些初始化設置;loop()一直反復執行,相當于while(1)的循環語句,是實現程序功能的主體代碼。
本系統軟件部分的設計包括變量的定義與初始化、數據采集、數據分析、顯示器設置等。軟件設計流程圖如圖5所示。
當Arduino UNO 控制器上電后,啟動本系統。首先完成系統初始化,執行頭文件命令,由于系統采用液晶顯示器,需要包含頭文件“LiquidCrystal.h”。接著完成變量的定義與初始化等。
在setup()函數里,將LED、蜂鳴器引腳配置為OUTPUT 端口,串口波特率初始化為9600,LCD1602 初始化為16 列2 行,傳感器采集第一次數據等。
在loop()函數里,定時采集傳感器數據,通過analogRead 函數讀取傳感數據,并作數據分析,水位數據顯示在LCD1602 中。LCD1602 第一行顯示當前的日期,設置格式為“年-月-日”;第二行顯示“water:”字符串,其后顯示傳感數據。當傳感數據大于預設的報警值300 時,啟動LED 燈點亮、蜂鳴器報警。系統每隔3s 自動采集并更新數據于LCD1602 中。
為了測試系統的功能、穩定性以及可行性,將系統分別置于空氣和水中,通過實驗采集數據,記錄相應數值。如圖6所示,當水位傳感器置于空氣中,此時未浸入水中,水位傳感器采集到的數據為9,通過自定義函數完成數據轉換,LCD1602 中顯示為“009”。
如圖7所示,當水位傳感器浸入水中,將其采集到的數據顯示于LCD1602 中,本次采集數據為“611”,大于預設的報警值300,則觸發報警模塊,此時Arduino UNO 驅動LED 點亮,蜂鳴器發響,實現水位過高的報警機制。
本文設計并制作一款基于Arduino的水位監測報警系統,本系統電路設計簡明,實現實時監測,定時更新并顯示水位的傳感數據。通過實驗表明,系統采集、數據處理、數據顯示等各功能可靠,報警響應迅速,滿足水位實時監測的需求。