Монитор уровня и температуры воды на Arduino: ультразвук, LCD и тревога
Компоненты и материалы
| Arduino UNO | ×1 |
| LCD 16×2 (белый на синем) | ×1 |
| Ультразвуковой датчик HC-SR04 | ×1 |
| Цифровой термометр DS18B20 (1-Wire) | ×1 |
| Резистор 4.75 кОм (подтяжка для DS18B20) | ×1 |
| Тактовая кнопка 12 мм | ×1 |
| Потенциометр 10 кОм (контраст LCD) | ×1 |
| Пьезоизлучатель (buzzer, 8 мА) | ×1 |
| Светодиоды: зеленый, желтый, красный | ×1 каждого |
| Резисторы 221 Ом (для LED) | ×3 |
| Беспаечная макетная плата | ×1 |
| Провода-перемычки | ×1 комплект |
Приложения
- Arduino IDE
О проекте

Проект показывает уровень воды в баке и температуру. Ультразвуковой датчик измеряет расстояние до поверхности воды, DS18B20 — температуру в баке. На LCD выводятся расстояние и температура. Три светодиода индицируют уровень: зеленый — низкий (>40 см), желтый — средний (20–40 см), красный мигает + buzzer — высокий (<20 см).
Это часть крупного проекта: вторая часть — 6 бегущих LED в кольце для индикации работы насоса, третья — автоматический запуск/остановка насоса по магнитным контактам (в разработке). Для реальной установки используется водонепроницаемый ультразвуковой датчик — код и схема не меняются. Показания при высокой влажности могут дрейфовать, поэтому этот блок — только информационный, управление насосом — отдельно.
Программный код
#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;
int echoPin = 7;
int myCounter = 0;
float pingTime;
float targetDistance;
float speedOfSound = 776.5; // миль/ч (в коде используется для расчета в см)
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); // Желтый LED
pinMode(10, OUTPUT); // Красный LED + buzzer
pinMode(13, OUTPUT); // Зеленый LED
}
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; // секунды
pingTime = pingTime / 3600.0; // часы
targetDistance = speedOfSound * pingTime; // мили
targetDistance = targetDistance / 2.0; // туда-обратно
targetDistance = targetDistance * 160934.4; // мили → см
// Температура
sensors.requestTemperatures();
// Вывод на LCD
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) { // 20-40 см
LCD.print("LEV MED ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
} else { // < 20 см
LCD.print("LEV HIGH ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
}
delay(2000);
// Управление индикаторами
if (targetDistance > 40) {
digitalWrite(13, HIGH); // Зеленый
} else {
digitalWrite(13, LOW);
}
if (targetDistance > 20 && targetDistance <= 40) {
digitalWrite(8, HIGH); // Желтый
} else {
digitalWrite(8, LOW);
}
if (targetDistance < 20) {
digitalWrite(10, HIGH); // Красный + buzzer
delay(2000);
digitalWrite(10, LOW);
} else {
digitalWrite(10, LOW);
}
}
Примечание: В оригинале формула скорости звука в милях/ч с последующим переводом в см работает, но неочевидна. Стандартный расчет: distance = pulseIn * 0.01715 (см). Используйте тот вариант, который понятнее.
Схемы
Файл схемы для Fritzing: lcd_pot_led_buzz_pb_distsens_temp_EHVdF6S1L7.fzz
Производственный процесс
- Интегрированная система контроля доступа с QR, RFID и верификацией температуры
- Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности
- Создайте домашний монитор температуры на Raspberry Pi с MCP9808, InfluxDB и Grafana
- Интеграция термопары с Arduino Portenta H7 через MAX6675
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код
- Лабораторный чип NASA Goddard обеспечивает мониторинг потока и температуры в реальном времени