当前位置: 首页 > news >正文

基于51单片机的超声波液位检测OLED显示设计

1 系统功能介绍

本设计是一个 基于 51 单片机的超声波液位检测与控制系统。其核心思想是利用超声波传感器来测量水面的高度,从而计算出实际水深,再结合设定的低水位和高水位阈值,智能地控制水泵与排水阀(舵机),并通过 OLED 显示屏实时显示相关信息。

该系统具有 自动水位调节、声光报警、参数可调、掉电保存、无线扩展 等多重功能,适用于水箱、储水池、工业液位控制等场合,保证了用水的安全性和便捷性。

主要功能如下:

  1. 实时测量与显示

    • OLED 显示屏实时显示:超声波到水底距离、到水面的距离、计算后的水深、低水位阈值、高水位阈值以及水位状态提示。
  2. 自动控制逻辑

    • 当水位低于低水位阈值时:蜂鸣器报警,水泵启动加水,舵机关闭排水;
    • 当水位高于高水位阈值时:蜂鸣器报警,舵机打开排水阀,水泵关闭;
    • 当水位在正常范围时:所有执行机构保持关闭状态,OLED 提示“水位正常”。
  3. 参数设置与掉电保存

    • 通过按键设置水箱总深度(超声波到水底距离)、低水位阈值、高水位阈值;
    • 阈值数据保存在 EEPROM 中,掉电不丢失。
  4. 无线扩展功能(选配蓝牙/WIFI 模块)

    • 手机 APP 可以实时查看水位数据;

    • APP 能够下发指令设置参数,例如:

      • *SA138# → 设置总深度 1.38m;
      • *SL085# → 设置低水位阈值 0.85m;
      • *SH100# → 设置高水位阈值 1.0m。
    • 数据显示与 OLED 保持一致。


2 系统电路设计

2.1 单片机最小系统

采用 STC89C52 单片机作为核心控制器。其具备丰富的 I/O 资源,可同时处理超声波测距、OLED 显示、按键输入、EEPROM 存储和外设控制。最小系统包括:

  • 晶振电路:11.0592MHz 晶振+电容;
  • 复位电路:上电复位保证程序运行可靠;
  • 电源电路:提供 5V 稳定电压。

2.2 超声波测量模块

超声波传感器采用 HC-SR04,主要通过发射和接收超声波计算水面高度:

  • Trig 脚由单片机输出高电平触发,发射 8 个 40kHz 声波脉冲;

  • Echo 脚返回高电平,持续时间与距离成正比;

  • 单片机通过计时计算出超声波到达水面的距离:

    距离=时间×声速2 距离 = \frac{时间 × 声速}{2} 距离=2时间×声速

  • 系统安装时,传感器固定在水箱上方,测得的“水面距离”与“水底距离”相减,得到实时水深。


2.3 显示模块(OLED)

采用 0.96 寸 OLED 屏(I2C 接口),具有分辨率高、功耗低的特点。显示内容包括:

  • 总深度(超声波到水底距离);
  • 当前水面距离;
  • 实际水深;
  • 低水位和高水位阈值;
  • 当前水位状态(加水中、排水中、水位正常)。

2.4 蜂鸣器驱动电路

使用有源蜂鸣器,单片机通过 GPIO 控制:

  • 水位异常时开启蜂鸣器报警;
  • 水位正常时关闭蜂鸣器。

2.5 水泵与舵机驱动电路

  • 水泵驱动:通过继电器控制水泵电源,当水位低于下限时开启加水;
  • 舵机驱动:用于模拟排水阀控制,当水位高于上限时,舵机转动打开阀门排水。

2.6 按键电路

设计了 3 个按键:

  • K1:进入设置模式;
  • K2:数值加 1;
  • K3:数值减 1。

配合 OLED 界面上的“<<”或“>>”提示,用户可方便地设置总深度、低水位、高水位阈值。


2.7 无线模块(可选)

可选用 HC-05 蓝牙模块ESP8266 WiFi 模块

  • 通过串口与单片机通信;
  • 支持 APP 查看数据和发送控制命令;
  • 实现远程液位管理。

3 程序设计

3.1 主程序框架

#include <reg52.h>
#include "oled.h"
#include "ultrasonic.h"
#include "eeprom.h"
#include "key.h"
#include "relay.h"
#include "servo.h"
#include "beep.h"
#include "uart.h"unsigned int depth_set = 100;   // 总深度 (cm)
unsigned int low_set = 30;      // 低水位阈值 (cm)
unsigned int high_set = 80;     // 高水位阈值 (cm)unsigned int water_surface;     // 水面距离
unsigned int water_depth;       // 实际水深void main()
{System_Init();EEPROM_ReadConfig(&depth_set,&low_set,&high_set);while(1){water_surface = Ultrasonic_Measure();water_depth = depth_set - water_surface;Display_Info(water_surface, water_depth, low_set, high_set);Key_Scan();Auto_Control();Uart_Process(); // 无线模块命令处理}
}

3.2 超声波测距程序

unsigned int Ultrasonic_Measure(void)
{unsigned int time;unsigned int distance;Trig = 1;Delay10us();Trig = 0;while(!Echo);TR0 = 1;while(Echo);TR0 = 0;time = TH0*256 + TL0;distance = (time * 0.017); // cmreturn distance;
}

3.3 自动控制逻辑

void Auto_Control(void)
{if(water_depth < low_set){Relay_On();      // 开启水泵加水Servo_Close();   // 关闭排水阀Beep_On();OLED_ShowString(0,6,"加水中..");}else if(water_depth > high_set){Relay_Off();     // 关闭水泵Servo_Open();    // 打开排水阀Beep_On();OLED_ShowString(0,6,"排水中..");}else{Relay_Off();Servo_Close();Beep_Off();OLED_ShowString(0,6,"水位正常 ");}
}

3.4 按键设置程序

void Key_Scan(void)
{if(K1 == 0){DelayMs(20);if(K1 == 0){Enter_SettingMode();}}
}

设置模式下,OLED 上会显示 << 光标,用户通过 K2 加K3 减 修改参数,修改完成后自动写入 EEPROM。


3.5 EEPROM 数据存储

void EEPROM_SaveConfig(unsigned int depth, unsigned int low, unsigned int high)
{IapWriteByte(0x0000, depth);IapWriteByte(0x0002, low);IapWriteByte(0x0004, high);
}

该部分保证用户设置掉电不丢失。


3.6 无线模块命令解析

void Uart_Process(void)
{if(RxFlag){if(strncmp(rx_buf,"*SA",3)==0){depth_set = atoi(rx_buf+3);}else if(strncmp(rx_buf,"*SL",3)==0){low_set = atoi(rx_buf+3);}else if(strncmp(rx_buf,"*SH",3)==0){high_set = atoi(rx_buf+3);}RxFlag=0;}
}

4 总结

本设计基于 STC89C52 单片机,通过 超声波测距+OLED 显示+按键设置+EEPROM 保存+蜂鸣器报警+水泵与舵机控制 等模块,实现了一个功能完善的 智能水位检测与控制系统

其优势主要体现在:

  1. 检测准确:超声波测距避免了电极法易腐蚀问题,适合长期使用;
  2. 功能全面:支持自动/手动调节,报警提示,掉电不丢失;
  3. 交互性强:OLED 图文清晰,按键操作直观;
  4. 可扩展性好:增加蓝牙/WIFI 模块后,用户可通过手机 APP 查看和控制水位。

该设计不仅适用于家庭水箱液位控制,还能推广到农业灌溉、工业液位管理等领域,具有较高的实用价值和应用前景。

http://www.dtcms.com/a/344516.html

相关文章:

  • MySQL InnoDB表空间深度解析:从原理到性能优化
  • Seaborn数据可视化实战:Seaborn与Plotly交互式图表入门
  • 图像处理中的伪影
  • ASPICE过程能力确定——度量框架
  • 美国对华科技政策思路变化:产业影响与投资逻辑解析
  • C/C++三方库移植到HarmonyOS平台详细教程
  • 2025年推理大模型有哪些以及优势对比
  • C++函数重载与引用详解
  • 线段树01
  • 合同差异智能比对,有效规避“阴阳合同”
  • 白名单过滤的文件上传如何bypass:boot2root靶机之fristileaks
  • 基于 SkyWalking + Elasticsearch + Grafana 的可落地调用链监控方案
  • 易混淆的CommonJS和ESM(ES Module)及它们区别
  • 工控/医疗设备没有连接网络,贝锐向日葵Q1破解远程运维难题
  • 【ElasticSearch】IK分词器安装,配置修改,支持新增词组,中文常用mapping使用案例
  • Python 中 SQLAlchemy 和 MySQLdb 的关系
  • MongoDB 分片集群把非分片集合转成分片集合
  • MySQL 错误码
  • Flutter Provider 详解:从状态管理痛点到实战落地
  • Linux权限详解
  • 电子基石:硬件工程师的器件手册 (十三) - 电源管理IC:能量供给的艺术
  • 使用html+css+javascript练习项目布局--创建导航栏
  • 高并发场景数据与一致性的简单思考
  • 理解音频响度:LUFS 标准及其计算实现
  • 在灵码中配置MCP服务
  • Basic Threejs (2)
  • Unity中国小游戏行业沙龙:抖音小游戏平台分析与规划
  • Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
  • AWS OpenSearch 是什么
  • 复合设计模式