Arduino 超声波水位/温度监测系统:LCD 显示 + 多级声光报警
元件与供应
![]() | Arduino UNO | × | 1 |
![]() | 1602 LCD (白字蓝屏) | × | 1 |
![]() | HC-SR04 超声波传感器 | × | 1 |
![]() | DS18B20 防水温度传感器 | × | 1 |
| 4.75kΩ 电阻(DS18B20 上拉) | × | 1 | |
![]() | 12mm 轻触开关 | × | 1 |
![]() | 10kΩ 单圈电位器(LCD 对比度) | × | 1 |
![]() | 蜂鸣器(8mA) | × | 1 |
| LED(绿/黄/红各 1) | × | 3 | |
![]() | 221Ω 电阻(LED 限流) | × | 3 |
![]() | 面包板 | × | 1 |
![]() | 跳线 | × | 1 |
软件工具
- Arduino IDE
项目简介

监测水箱液位与温度:超声波测距换算水位,DS18B20 测温,LCD 同屏显示。三级报警逻辑:
- 水位低 (>40cm):绿灯常亮
- 水位中 (20-40cm):黄灯常亮
- 水位高 (<20cm):红灯闪烁 + 蜂鸣器鸣叫
属于大型系统第一阶段,后续将加入 6 灯循环指示水泵工作、磁性液位开关控制水泵启停。
接线说明
- 超声波:Trig→D9, Echo→D7
- DS18B20:数据线→D6,4.75kΩ 上拉 5V
- LCD:RS→D12, EN→D11, D4-D7→D5-D2
- LED:绿→D13, 黄→D8, 红→D10(与蜂鸣器共用 D10,注意电流)
- 按键/电位器按原理图接线
完整代码
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal LCD(12, 11, 5, 4, 3, 2);
int trigPin = 9, echoPin = 7;
float pingTime, targetDistance;
float speedOfSound = 776.5; // mph
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
LCD.begin(16, 2);
LCD.setCursor(0, 0); LCD.print("Distance:");
sensors.begin();
pinMode(8, OUTPUT); pinMode(10, OUTPUT); pinMode(13, OUTPUT);
}
void loop() {
// 触发测距
digitalWrite(trigPin, LOW); delayMicroseconds(2000);
digitalWrite(trigPin, HIGH); delayMicroseconds(15);
digitalWrite(trigPin, LOW); delayMicroseconds(10);
pingTime = pulseIn(echoPin, HIGH);
pingTime = pingTime / 1000000.0 / 3600.0; // 小时
targetDistance = speedOfSound * pingTime / 2 * 160934.4; // cm
sensors.requestTemperatures();
LCD.setCursor(10, 0); LCD.print(" "); // 清除
LCD.setCursor(10, 0); LCD.print((int)(targetDistance + 0.5)); LCD.print("cm ");
LCD.setCursor(0, 1); LCD.print(" "); // 清行
LCD.setCursor(0, 1);
if (targetDistance > 40) {
LCD.print("LEV LOW "); LCD.print(sensors.getTempCByIndex(0)); LCD.print((char)223); LCD.print("C");
} else if (targetDistance > 20) {
LCD.print("LEV MED "); LCD.print(sensors.getTempCByIndex(0)); LCD.print((char)223); LCD.print("C");
} else {
LCD.print("LEV HIGH "); LCD.print(sensors.getTempCByIndex(0)); LCD.print((char)223); LCD.print("C");
}
delay(2000);
// 报警输出
digitalWrite(13, targetDistance > 40 ? HIGH : LOW); // 绿灯
digitalWrite(8, (targetDistance < 40 && targetDistance > 20) ? HIGH : LOW); // 黄灯
if (targetDistance < 20) { digitalWrite(10, HIGH); delay(2000); digitalWrite(10, LOW); }
else digitalWrite(10, LOW);
}
原理图
lcd_pot_led_buzz_pb_distsens_temp_EHVdF6S1L7.fzz (Fritzing 文件)制造工艺
- 集成二维码、RFID与体温验证的门禁控制系统
- 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派多传感器温度光照监测系统:DS18B20 实战构建
- 树莓派自动化气雾栽培系统:湿度传感器智能控制
- 树莓派 + MCP9808 + InfluxDB + Grafana:家庭温度监测系统
- Portenta H7 对接 MAX6675 热电偶温度传感器教程
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- 多位置温度传感器系统,助力智能家居集成
- TM1637 数码管时钟:Arduino Nano 实现时间设定与闹钟
- 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟
- NASA戈达德实验室芯片实验室传感器:实时流量与温度监测









