0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于51单片机的超声波液位控制器设计方案

基于51单片机的超声波液位控制器设计方案

来源:
2025-11-25
类别:工业控制
eye 1
文章创建人 拍明芯城

基于51单片机的超声波液位控制器设计方案

一、项目背景与需求分析

在工业自动化与水资源管理领域,液位控制是保障系统安全运行的核心环节。传统接触式液位传感器(如浮球式、电容式)存在易腐蚀、维护成本高、精度受限等问题,尤其在强酸强碱或高温高压环境下应用受限。非接触式超声波液位检测技术凭借其高精度、抗干扰性强、安装便捷等优势,成为工业液位监测的主流方案。本设计以51单片机为核心,结合超声波传感器、LCD显示屏、继电器控制模块及报警系统,实现液位的实时监测、动态显示与自动控制,适用于水箱、储罐、水池等场景的液位管理。

image.png

二、系统总体设计框架

系统采用模块化设计,由以下核心模块构成:

  1. 主控模块:51单片机(如STC89C52)作为核心处理器,负责数据采集、逻辑判断与控制输出。

  2. 超声波液位检测模块:采用HC-SR04或URM08-RS485传感器,通过发射与接收超声波脉冲,计算液位高度。

  3. 显示模块:LCD1602液晶屏实时显示当前液位、设定阈值及系统状态。

  4. 控制模块:继电器驱动水泵启停,实现液位自动调节。

  5. 报警模块:蜂鸣器与LED指示灯联动,在液位异常时发出声光报警。

  6. 按键输入模块:通过按键设置液位上下限阈值,增强系统灵活性。

  7. 电源模块:提供5V直流稳压电源,保障系统稳定运行。

三、元器件选型与功能解析

1. 主控芯片:STC89C52单片机

选型依据

  • 性能优势:STC89C52是增强型51单片机,兼容传统8051指令集,支持最高11.0592MHz晶振频率,运算速度达1MIPS/12T,满足实时数据处理需求。

  • 资源丰富:内置8KB Flash程序存储器、512字节RAM、32位I/O口线,支持看门狗定时器与EEPROM,可扩展性强。

  • 低功耗设计:空闲模式下CPU停止工作,仅RAM、定时器等外围模块运行,适合长时间运行场景。

  • 成本效益:价格低廉(约3-5元/片),开发工具链成熟(Keil C51、STC-ISP烧录软件),降低开发成本。

功能作用

  • 读取超声波传感器数据,计算液位高度。

  • 解析按键输入,更新液位阈值设置。

  • 控制继电器通断,驱动水泵启停。

  • 驱动LCD1602显示液位信息与系统状态。

  • 触发蜂鸣器与LED报警信号。

2. 超声波液位传感器:HC-SR04或URM08-RS485

选型对比

  • HC-SR04

    • 性能参数:工作电压5V,静态电流<2mA,工作电流15mA,测量范围2-450cm,精度0.3cm,盲区2cm,波束角15°。

    • 优势:成本低(约8-15元/个)、接口简单(TTL电平)、兼容性强,适合小型水箱或低成本项目。

    • 局限:无温度补偿功能,环境温度变化可能影响声速,导致测量误差。

  • URM08-RS485

    • 性能参数:工作电压6-12V,有效量程35-550cm,分辨率1cm,误差±1%,内置温度补偿,防护等级IP67,支持RS485通信协议。

    • 优势:高精度、长距离检测、抗干扰性强,适合工业级应用(如化工储罐、污水处理池)。

    • 局限:成本较高(约80-120元/个),需配置RS485转USB模块与单片机通信。

推荐选型

  • 低成本场景:选择HC-SR04,通过软件算法补偿温度影响(如根据环境温度调整声速计算公式)。

  • 工业级场景:选择URM08-RS485,利用其高精度与温度补偿功能,确保测量稳定性。

功能作用

  • 发射40kHz超声波脉冲,经液面反射后接收回波信号。

  • 计算超声波传播时间,结合声速公式(距离=声速×时间/2)得出液位高度。

  • 通过TTL或RS485接口将数据传输至单片机。

3. 显示模块:LCD1602液晶屏

选型依据

  • 显示能力:支持2行×16字符显示,可同时展示当前液位、设定阈值与系统状态。

  • 接口简单:采用并行接口(8位数据总线+3位控制线),与51单片机I/O口直接连接,无需额外驱动芯片。

  • 低功耗:工作电流仅2mA(5V电压下),适合电池供电场景。

  • 成本低:价格约10-15元/个,性价比高。

功能作用

  • 实时显示当前液位(C值)、容器总高度(D值)、最高阈值(H值)与最低阈值(L值)。

  • 显示系统状态(如“Normal”“Alarm”“Pump On/Off”)。

4. 控制模块:继电器与水泵

继电器选型

  • 型号:SRD-05VDC-SL-C(5V继电器模块)。

  • 参数:触发电压5V,触点容量10A/250VAC或10A/30VDC,支持高频通断。

  • 优势:隔离性强,可驱动大功率水泵(如220V交流水泵),保护单片机I/O口免受高压冲击。

水泵选型

  • 直流水泵:适用于小型水箱,如12V直流微型水泵(流量1-5L/min,扬程0.5-3m),通过继电器控制启停。

  • 交流水泵:适用于大型储罐,如220V交流潜水泵(流量10-50L/min,扬程5-10m),需配置交流接触器与继电器联动控制。

功能作用

  • 继电器根据单片机输出信号通断,控制水泵电源回路。

  • 水泵实现液位调节:液位低于下限时启动注水,高于上限时启动排水。

5. 报警模块:蜂鸣器与LED指示灯

蜂鸣器选型

  • 型号:5V有源蜂鸣器(如SMT-8530)。

  • 参数:工作电压5V,工作电流30mA,声压级≥85dB,频率2-4kHz。

  • 驱动方式:通过三极管(如8550)放大单片机输出信号,控制蜂鸣器鸣叫。

LED指示灯选型

  • 红色LED:液位高于上限时亮起,表示报警状态。

  • 黄色LED:液位低于下限时亮起,表示报警状态。

  • 绿色LED:液位处于正常范围时亮起,表示系统运行正常。

功能作用

  • 蜂鸣器在液位异常时发出持续或间歇鸣叫,提醒用户处理。

  • LED指示灯直观显示液位状态,增强系统交互性。

6. 按键输入模块:轻触按键与电阻

按键选型

  • 型号:6mm×6mm轻触按键(如TS-1187)。

  • 参数:触点容量50mA/12VDC,机械寿命≥10万次。

  • 功能:设置键(进入阈值调整模式)、增加键(上调阈值)、减小键(下调阈值)、复位键(恢复默认设置)。

电阻选型

  • 上拉电阻:10kΩ电阻连接按键与VCC,确保按键未按下时单片机I/O口为高电平。

  • 限流电阻:1kΩ电阻串联LED指示灯,限制电流防止烧毁。

7. 电源模块:LM7805稳压芯片

选型依据

  • 输入电压范围:7-35V(交流或直流),适应多种电源输入(如12V直流适配器、24V工业电源)。

  • 输出电压:稳定5V直流,纹波电压<50mV,满足单片机与传感器供电需求。

  • 保护功能:内置过流保护、过热保护与短路保护,提高系统可靠性。

功能作用

  • 将输入电压转换为稳定的5V直流,为单片机、LCD、超声波传感器等模块供电。

四、元器件采购与数据手册查询

采购平台推荐

  • 拍明芯城:提供元器件型号查询、品牌对比、价格参考、国产替代方案、供应商厂家信息、封装规格、数据手册下载等服务。用户可通过平台搜索“STC89C52”“HC-SR04”“LCD1602”等关键词,获取详细采购信息与中文数据手册。

数据手册关键内容

  • STC89C52:引脚图、电气特性、寄存器配置、时序图、开发工具链说明。

  • HC-SR04:时序图、测量范围、精度参数、接口定义、应用电路。

  • LCD1602:指令集、显示模式、初始化流程、接口时序、背光控制方法。

  • URM08-RS485:通信协议(Modbus RTU)、命令格式、温度补偿算法、安装尺寸。

五、系统工作原理与流程

  1. 初始化阶段

    • 单片机上电后,初始化I/O口器、中断与LCD显示屏。

    • 读取EEPROM中存储的液位阈值(H/L值)与容器总高度(D值),显示于LCD。

  2. 液位检测阶段

    • 单片机触发超声波传感器发射脉冲,启动定时器计时。

    • 传感器接收回波信号后,产生高电平脉冲,单片机捕获脉冲宽度(时间t)。

    • 根据声速公式(v=331.4+0.6×T,T为环境温度)计算液位高度(C=D-v×t/2)。

  3. 显示与控制阶段

    • 单片机将当前液位(C值)与阈值(H/L值)对比,更新LCD显示与LED状态。

    • 若C>H,触发蜂鸣器报警,继电器断开注水阀,闭合排水阀。

    • 若C<L,触发蜂鸣器报警,继电器闭合注水阀,断开排水阀。

    • 若L≤C≤H,系统保持当前状态,蜂鸣器停止报警。

  4. 阈值设置阶段

    • 按下设置键进入调整模式,通过增加/减小键修改H/L值。

    • 修改完成后,按下复位键保存设置至EEPROM,退出调整模式。

六、软件设计与代码实现

开发环境

  • 编译器:Keil C51(支持C语言与汇编语言混合编程)。

  • 烧录工具:STC-ISP(通过串口将HEX文件烧录至单片机)。

核心代码逻辑

#include <reg52.h>  // 包含51单片机寄存器定义
#include <intrins.h> // 包含_nop_()延时函数

// 定义引脚
sbit TRIG = P1^0;  // 超声波触发引脚
sbit ECHO = P1^1;  // 超声波接收引脚
sbit BUZZER = P2^0; // 蜂鸣器控制引脚
sbit RELAY_IN = P2^1; // 注水阀控制引脚
sbit RELAY_OUT = P2^2; // 排水阀控制引脚
sbit LED_RED = P3^0;   // 红色LED(高位报警)
sbit LED_YELLOW = P3^1; // 黄色LED(低位报警)
sbit LED_GREEN = P3^2;  // 绿色LED(正常状态)
sbit SET_KEY = P3^3;    // 设置键
sbit INC_KEY = P3^4;    // 增加键
sbit DEC_KEY = P3^5;    // 减小键
sbit RESET_KEY = P3^6;  // 复位键

// 全局变量
unsigned int distance = 0; // 当前液位高度(cm)
unsigned int H_threshold = 80; // 最高阈值(cm)
unsigned int L_threshold = 30; // 最低阈值(cm)
unsigned int D_total = 100;   // 容器总高度(cm)
bit setting_mode = 0;         // 设置模式标志

// 延时函数
void delay_us(unsigned int us) {
   while(us--);
}

void delay_ms(unsigned int ms) {
   unsigned int i, j;
   for(i=0; i<ms; i++)
       for(j=0; j<114; j++);
}

// 超声波测距函数
unsigned int get_distance() {
   unsigned int time = 0;
   TRIG = 1;       // 触发超声波发射
   _nop_(); _nop_();
   TRIG = 0;
   while(!ECHO);    // 等待回波信号上升沿
   TR0 = 1;        // 启动定时器0
   while(ECHO);     // 等待回波信号下降沿
   TR0 = 0;        // 停止定时器0
   time = TH0 * 256 + TL0; // 读取定时器值
   TH0 = 0; TL0 = 0; // 清零定时器
   // 计算距离(声速v=340m/s=0.034cm/us)
   distance = (time * 0.034) / 2;
   return distance;
}

// LCD显示函数(简化版)
void display_lcd() {
   // 显示容器总高度D
   LCD_Write_String(0, 0, "D:");
   LCD_Write_Num(0, 3, D_total, 3);
   // 显示最高阈值H
   LCD_Write_String(0, 8, "H:");
   LCD_Write_Num(0, 11, H_threshold, 3);
   // 显示最低阈值L
   LCD_Write_String(1, 0, "L:");
   LCD_Write_Num(1, 3, L_threshold, 3);
   // 显示当前液位C
   LCD_Write_String(1, 8, "C:");
   LCD_Write_Num(1, 11, distance, 3);
}

// 按键扫描函数
void key_scan() {
   if(SET_KEY == 0) {
       delay_ms(10); // 消抖
       if(SET_KEY == 0) {
           setting_mode = ~setting_mode; // 切换设置模式
           while(!SET_KEY); // 等待按键释放
       }
   }
   if(setting_mode) {
       if(INC_KEY == 0) {
           delay_ms(10);
           if(INC_KEY == 0) {
               if(H_threshold < D_total) H_threshold++;
               while(!INC_KEY);
           }
       }
       if(DEC_KEY == 0) {
           delay_ms(10);
           if(DEC_KEY == 0) {
               if(L_threshold > 0) L_threshold--;
               while(!DEC_KEY);
           }
       }
       if(RESET_KEY == 0) {
           delay_ms(10);
           if(RESET_KEY == 0) {
               H_threshold = 80; // 恢复默认值
               L_threshold = 30;
               while(!RESET_KEY);
           }
       }
   }
}

// 主函数
void main() {
   // 初始化
   LCD_Init();          // 初始化LCD
   Timer0_Init();       // 初始化定时器0(用于超声波测距)
   IO_Init();           // 初始化I/O口
   // 主循环
   while(1) {
       distance = get_distance(); // 获取当前液位
       display_lcd();             // 更新LCD显示
       key_scan();               // 扫描按键
       // 液位控制逻辑
       if(distance > H_threshold) {
           BUZZER = 1;          // 蜂鸣器报警
           RELAY_IN = 1;        // 关闭注水阀
           RELAY_OUT = 0;       // 打开排水阀
           LED_RED = 1;         // 红色LED亮
           LED_YELLOW = 0;
           LED_GREEN = 0;
       } else if(distance < L_threshold) {
           BUZZER = 1;          // 蜂鸣器报警
           RELAY_IN = 0;        // 打开注水阀
           RELAY_OUT = 1;       // 关闭排水阀
           LED_YELLOW = 1;      // 黄色LED亮
           LED_RED = 0;
           LED_GREEN = 0;
       } else {
           BUZZER = 0;          // 蜂鸣器停止
           RELAY_IN = 1;        // 保持当前状态
           RELAY_OUT = 1;
           LED_GREEN = 1;       // 绿色LED亮
           LED_RED = 0;
           LED_YELLOW = 0;
       }
       delay_ms(200); // 延时200ms,降低采样频率
   }
}

七、系统优化与扩展方向

  1. 抗干扰设计

    • 在超声波传感器与单片机之间增加光耦隔离电路,防止高压干扰。

    • 采用数字滤波算法(如中值滤波、滑动平均滤波)消除测量噪声。

  2. 多传感器融合

    • 增加压力传感器或浮球传感器作为备用测量手段,提高系统可靠性。

  3. 无线通信功能

    • 集成ESP8266或NRF24L01模块,实现液位数据远程监控与报警推送。

  4. 上位机软件

    • 开发PC端或手机APP,通过串口或WiFi接收液位数据,绘制历史曲线与统计报表。

  5. 低功耗设计

    • 在空闲模式下关闭LCD背光与部分I/O口,降低系统功耗。

八、总结

本设计以51单片机为核心,结合超声波传感器、LCD显示屏与继电器控制模块,实现了液位的实时监测、动态显示与自动控制。通过合理选型与模块化设计,系统具有成本低、精度高、抗干扰性强等优势,适用于水箱、储罐、水池等场景的液位管理。未来可进一步集成无线通信与上位机软件,拓展系统应用范围,提升智能化水平。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告