基于Arduino与超声波HC-SR04的智能液位传感器与控制器
组件与物料
![]() | Arduino UNO | × | 1 |
![]() | 超声波传感器 HC-SR04 (通用) | × | 1 |
应用与在线服务
![]() | Arduino IDE |
项目介绍
下图展示了超声波传感器与 Arduino 的连接,模型仅为演示用途。
简介
液位指示器广泛应用于各工业领域,也可用于小型或家用场景。我们构建了一个液位传感器系统,可持续读取数据,指示水箱内液体占比。本系统是一个反馈控制系统:不仅显示液位,还通过水泵自动控制液位。
结构
上图是系统简化框图。Arduino 作为主控单元,HC-SR04 超声波传感器安装在水箱顶部。演示模型使用两个潜水泵(单向,只能单向输送液体);实际应用可用双向泵。两泵均由 Arduino 控制信号驱动,泵需 12V 供电,因此需配合电机驱动模块(框图中未画出)。
工作原理
为便于理解,分为感知系统和控制系统两部分:
感知系统
使用 HC-SR04 超声波传感器,工作频率 40kHz(超声波 >20kHz)。传感器包含发射头和接收头。发射头发出 40kHz 超声波,液面反射后被接收头接收。传感器 4 引脚:GND 接 Arduino GND,VCC 接 3.3V 或 5V,Trig 引脚发送触发信号,Echo 引脚接收回波。通过测量回波时间计算距离:
duration = pulseIn(echoPin, HIGH); // 获取回波高电平持续时间(微秒)
distance = duration * 0.034 / 2; // 换算距离(cm),声速约340m/s
控制系统
Arduino 读取传感器数据,根据代码中设定的阈值控制水泵:
- 液位超过上限阈值 → 启动水箱内水泵排液,直到液位低于阈值
- 液位低于下限阈值 → 启动储液罐水泵注液
- 实际应用中水箱通常只用一个水泵
未来改进方向
- 使用安装在水箱外的双向泵,仅需一台泵
- 增加 OLED 或 LCD 显示屏实时显示液位
- 接入物联网上传数据到云端
- 开发手机 App 远程监控和控制液位
- 添加溢出报警蜂鸣器,或在代码中增加防溢出逻辑
代码
液位控制器 Arduino
int tankPump = 3;
int reserviorPump = 2;
int trigPin = 9; // 白线
int echoPin = 10; // 棕线
long duration;
int distance;
void setup() {
Serial.begin(9600);
pinMode(tankPump, OUTPUT);
pinMode(reserviorPump, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
ultrasound();
pump();
}
void ultrasound() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance:");
Serial.println(distance);
delay(1000);
}
void pump() {
if (distance > 10) { // 液位低于10cm(距离大) -> 注液
digitalWrite(tankPump, HIGH);
digitalWrite(reserviorPump, LOW);
} else {
digitalWrite(tankPump, LOW);
}
if (distance < 6) { // 液位高于6cm(距离小) -> 排液
digitalWrite(reserviorPump, HIGH);
digitalWrite(tankPump, LOW);
} else {
digitalWrite(reserviorPump, LOW);
}
}
原理图
制造工艺


