伍敏君
(中山火炬职业技术学院光电信息学院 广东省中山市 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的水位监测报警系统,本系统电路设计简明,实现实时监测,定时更新并显示水位的传感数据。通过实验表明,系统采集、数据处理、数据显示等各功能可靠,报警响应迅速,满足水位实时监测的需求。