1. 系统功能介绍
本设计的题目是基于51单片机水塔水箱液水位WIFI监控报警设计。整个系统由主机与从机两部分组成,二者通过WiFi模块ESP8266进行通信,实现远程水位监测与报警控制。其设计目的是为了解决传统水箱监测中无法实时远程传输、报警不及时等问题,从而实现更加智能化的管理方式。
在本系统中,主机安装在水箱处,负责液位传感器的数据采集与处理;从机安装在用户端或值班室内,主要负责数据接收、报警提示以及液位状态指示。主从机通过WiFi无线通信互联,确保数据能够实时传输与反馈。
系统的主要功能总结如下:
- 主机通过液位传感器检测水位,当检测到液位达到最低液位或最高液位时,立即通过WiFi模块将信息传输给从机。
- 从机接收到主机的液位信息后,如果水位处于最低或最高点,则蜂鸣器自动报警;在正常范围内,蜂鸣器不报警。
- 从机端配备了状态指示灯,可以实时显示水位状态。如果主从机之间通信异常,则所有指示灯熄灭,并通过黄灯闪烁提醒用户系统出现掉线或故障。
- 主从机电路和程序严格区分,配置参数不可互换,否则将导致系统失效。
该系统的实现具有低成本、安装简单、实时性强和可扩展性好的特点,适用于居民住宅、学校、工厂及农业灌溉等多种场景。
2. 系统电路设计
系统电路主要由主机电路和从机电路组成。主机侧重于水位检测与数据传输,从机则重点在于接收与报警。
2.1 主机电路设计
主机的电路由STC89C52单片机核心电路、液位传感器电路、ESP8266 WiFi模块电路、电源电路等部分构成。
2.1.1 单片机核心电路
STC89C52作为主控芯片,内置多个I/O口,可以用于接收液位传感器信号,并通过串口与ESP8266通信。其最小系统电路包括上电复位电路、按键复位电路以及12MHz晶振电路,保证系统稳定运行。
2.1.2 液位传感器电路
液位检测采用电极式或浮球式液位传感器,传感器输出高低电平信号,直接输入单片机I/O口。当液位达到设定点时,电平发生变化,从而实现最高和最低液位的检测。
2.1.3 WiFi模块电路
ESP8266模块通过UART与STC89C52单片机通信。主机端作为数据上传端,负责将检测到的液位状态打包并通过WiFi传输到从机模块。模块供电为3.3V,因此需加稳压电路保证其正常工作。
2.1.4 电源电路
主机采用DC 5V供电,通过AMS1117-3.3稳压芯片为ESP8266提供稳定的3.3V电压,同时为单片机和液位传感器提供5V电源。
2.2 从机电路设计
从机电路由STC89C52单片机核心电路、蜂鸣器报警电路、状态指示灯电路、ESP8266 WiFi模块电路、电源电路组成。
2.2.1 单片机核心电路
与主机相同,从机单片机也以STC89C52为核心,主要负责接收WiFi模块传来的液位信息并进行逻辑处理,控制蜂鸣器和指示灯工作。
2.2.2 蜂鸣器报警电路
蜂鸣器通过三极管驱动与单片机I/O口连接。当水位异常或超过设定阈值时,单片机输出高电平驱动三极管导通,蜂鸣器鸣响。
2.2.3 状态指示灯电路
从机端设计三种状态灯:
- 红灯:水位过高报警
- 绿灯:水位正常
- 黄灯:掉线或故障提醒
当系统断开连接时,单片机周期性点亮和熄灭黄灯,以闪烁提示用户。
2.2.4 WiFi模块电路
从机WiFi模块与主机模块建立TCP/UDP连接,负责接收主机端发送的液位数据。数据解析后由单片机执行相应控制逻辑。
2.2.5 电源电路
与主机相同,从机采用5V电源,并使用AMS1117-3.3稳压为ESP8266供电。
3. 程序设计
系统软件部分分为主机程序和从机程序。主机程序主要负责液位检测与数据上传,从机程序主要完成数据接收与报警逻辑。
3.1 主机程序设计
主机的主要功能是液位信号采集与WiFi传输,包括传感器检测、串口初始化、WiFi模块初始化和数据打包发送。
3.1.1 液位检测模块
液位传感器的输出高低电平通过I/O口读取,当最低或最高液位被触发时,主机将状态写入数据包。
3.1.2 WiFi通信模块
主机通过UART向ESP8266发送AT指令,完成模块配置及数据上传。
3.1.3 主机代码示例
c
#include <reg52.h>
#include <intrins.h>
sbit LEVEL_LOW = P1^0; // 最低液位传感器
sbit LEVEL_HIGH = P1^1; // 最高液位传感器
void UartInit(void) {
SCON = 0x50; // 串口模式1
TMOD |= 0x20; // 定时器1方式2
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
TR1 = 1; // 启动定时器
}
void SendByte(unsigned char dat) {
SBUF = dat;
while(!TI);
TI = 0;
}
void SendString(char *s) {
while(*s) {
SendByte(*s++);
}
}
void main() {
UartInit();
while(1) {
if(LEVEL_LOW == 0) {
SendString("LOW\n"); // 水位过低
} else if(LEVEL_HIGH == 0) {
SendString("HIGH\n"); // 水位过高
} else {
SendString("NORMAL\n");// 正常
}
}
}
3.2 从机程序设计
从机的主要功能是接收WiFi数据并根据水位状态控制蜂鸣器与指示灯。
3.2.1 数据接收模块
从机串口接收主机发送的数据帧,并进行字符串匹配,根据不同状态执行不同动作。
3.2.2 报警与指示灯控制模块
当接收到"LOW"或"HIGH"数据时,蜂鸣器启动并点亮红灯;当接收到"NORMAL"时,绿灯点亮蜂鸣器关闭;若长时间未收到数据,黄灯闪烁提示掉线。
3.2.3 从机代码示例
c
#include <reg52.h>
#include <string.h>
sbit LED_RED = P2^0;
sbit LED_GREEN = P2^1;
sbit LED_YELLOW = P2^2;
sbit BEEP = P2^3;
char buffer[10];
unsigned char count = 0;
void UartInit(void) {
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
}
void Uart_ISR(void) interrupt 4 {
if(RI) {
buffer[count++] = SBUF;
RI = 0;
if(SBUF == '\n') {
buffer[count] = '\0';
count = 0;
}
}
}
void main() {
UartInit();
while(1) {
if(strstr(buffer, "LOW")) {
LED_RED = 0; LED_GREEN = 1;
BEEP = 0;
} else if(strstr(buffer, "HIGH")) {
LED_RED = 0; LED_GREEN = 1;
BEEP = 0;
} else if(strstr(buffer, "NORMAL")) {
LED_GREEN = 0; LED_RED = 1;
BEEP = 1;
} else {
LED_YELLOW = 0; // 通讯异常时闪烁
}
}
}
4. 总结
本系统实现了基于STC89C52单片机 与ESP8266 WiFi模块的水塔水箱液位监控与报警设计。主机负责液位检测并通过WiFi模块发送数据,从机接收数据后通过蜂鸣器和LED指示灯实现状态提醒。
该设计不仅能实时监控水位,还能在通信异常时及时提示用户,极大提高了系统的可靠性与实用性。同时,由于系统采用了模块化设计,未来可扩展到手机APP远程监控、云平台数据记录等功能,具有良好的应用前景。