Умный датчик и контроллер уровня жидкости на Arduino и ультразвуковом датчике HC-SR04
Компоненты и материалы
- Arduino UNO
- Ультразвуковой датчик HC-SR04
Программное обеспечение
- Arduino IDE
О проекте
Ниже показана схема подключения ультразвукового датчика и Arduino. Модель собрана для демонстрации.
Введение
Индикаторы уровня применяются во всех отраслях промышленности. Можно реализовать аналогичное для малых задач или бытовых нужд. Мы построили датчик уровня жидкости, выдающий непрерывные данные о заполнении ёмкости. Система работает по принципу обратной связи: не только измеряет уровень, но и управляет им с помощью насоса.
Конструкция
На блок-схеме: Arduino — микроконтроллер. Ультразвуковой датчик HC-SR04 подключён к Arduino, установлен сверху бака. Использованы два погружных насоса (однонаправленные — перекачивают жидкость только в одну сторону). Можно применить двунаправленный насос. Насосам требуется 12В, поэтому нужен драйвер двигателей (на блок-схеме не показан).
Принцип работы
Для понимания разделим на две подсистемы:
- Система измерения
- Система управления
Измерение
Ультразвуковой датчик HC-SR04 работает на частоте 40 кГц. Имеет излучатель и приёмник. Излучатель посылает импульс, он отражается от поверхности жидкости и принимается приёмником. Датчик имеет 4 пина: GND, VCC (3.3В или 5В), Trig (запуск импульса), Echo (приём эха). По времени прохождения вычисляется расстояние:
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Система управления
Arduino получает данные от датчика и выдаёт сигналы насосам. Пороговые уровни задаются в коде. Если уровень превышает верхний порог — включается насос в баке, откачивающий жидкость, пока уровень не упадёт ниже порога. Если уровень ниже нижнего порога — включается насос в резервуаре, наливающий жидкость в бак. В текущей модели используется только бак и один насос.
Перспективы улучшения
- Применить двунаправленный насос снаружи бака — нужен только один насос.
- Выводить данные на OLED или LCD экран.
- Сохранять данные в облако через IoT.
- Управлять и мониторить уровень из мобильного приложения (IoT).
- Добавить звуковую сигнализацию перелива, модифицировать код для предотвращения переполнения.
Код
water level controller (Arduino)
int tankPump=3;
int reserviorPump=2;
int trigPin = 9; // white
int echoPin = 10; // brown
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){
digitalWrite(tankPump,HIGH);
digitalWrite(reserviorPump,LOW);
} else{
digitalWrite(tankPump,LOW);
}
if(distance < 6){
digitalWrite(reserviorPump,HIGH);
digitalWrite(tankPump,LOW);
} else{
digitalWrite(reserviorPump,LOW);
}
}
Схемы
Схема подключения доступна в разделе Schematics.
Производственный процесс
- Датчик артериального давления: принцип работы и ключевые применения
- Датчики напряжения: принцип работы и ключевые применения в современных системах питания
- Arduino-датчики: типы, применения и реальные проекты
- Трансмиссионная жидкость: назначение, важность и руководство по обслуживанию
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Мастерство управления датчиками и исполнительными механизмами на Raspberry Pi: акселерометр, сервопривод и потоко…
- Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности
- Проверка и калибровка датчика влажности для точных измерений
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core