Как сделать индикатор уровня воды с помощью Arduino

Используем плату Ардуино и ультразвуковой модуль для создания своими руками проекта по определению уровня воды в баке.

Когда может пригодиться?

Представим ситуацию, когда у вас на дачном участке есть душ, основу которого составляет бак с водой, который наполняется либо через насос либо дождевой водой.

Часто узнать количество воды в резервуаре может быть утомительной задачей. Обычно вы поднимаетесь по лестнице и проверяете уровень вручную или вы услышите что вода переполняется сверху.

 

В наши дни появилось много разных электронных индикаторов уровня воды, но они часто имеют высокую цену и обычно сложны в установке. Большинство доступных систем используют электроды или поплавковые переключатели, которые могут быть головной болью в долгосрочной перспективе.

Мы решим эту задачу с совершенно другим подходом к знанию уровня воды - с использованием ультразвукового модуля и Ардуино. Преимущество этого метода заключается в том, что он бесконтактный, поэтому такие проблемы, как коррозия электродов, не будут влиять на эту систему. Кроме того, этот индикатор уровня воды Arduino намного проще устанавливать, чем обычные системы.

Как работает индикатор уровня воды Arduino?

Этот индикатор уровня воды Ардуино использует ультразвуковой датчик или, по-другому, Ping датчик для определения уровня воды в баке. Датчик Ping измеряет расстояние, используя гидролокатор.

Из аппарата передается ультразвуковой импульс (значительно выше человеческого слуха), а расстояние до цели определяется путем измерения времени, необходимого для возврата эха. На выходе Ping датчика импульс переменной ширины, который соответствует расстоянию до цели. Затем он подается в микроконтроллер, который определяет уровень воды и отображает его через ряд светодиодов.

Этот проект может быть реализован на одной из плат Arduino, если микроконтроллером платы является непосредственно микроконтроллер ATmega 328.

Комплектующие

По традиции переходим к комплектующим, набор деталей довольно большой:

1 Микроконтроллер ATMega328P или плата Arduino
1 HC-SR04 ультразвуковой модуль (также известный как датчик PING)
1 10K резистор
1 Кристалл 16 МГц
2 22pf дисковые конденсаторы
Провода-перемычки
1 Регулятор LM7805 5V
1 9В батарея и разъем
1 Электролитический конденсатор 10uF
1 Макетная плата (или печатная плата)
1 Инструмент для зачистки проводов

Схема соединений

Все детали нужно собрать соответственно диаграмме выше. Сразу заметим, что в данной схеме на макетную плату размещается микроконтроллер ATmega328. Если вы используете плату Arduino, вы можете просто установить соединения для светодиодов и ультразвукового датчика.

Скетч для Ардуино

Скопируйте прилагаемый ниже скетч в Arduino IDE и найдите строку "int d = 18;" и измените «18» на глубину вашего резервуара в сантиметрах.

// Обратите внимание, что нумерация контактов arduino 
// отличается от выводов микроконтроллера

int d = 18; // Введите глубину вашего резервуара в сантиметрах

int trig = 11; // Прикрепите триггер ультразвукового датчика к пину 11
int echo = 10; // Прикрепите эхо ультразвукового датчика к контакту 10
int pin1 = 2; // Высший уровень
int pin2 = 3;
int pin3 = 4;
int pin4 = 5;
int pin5 = 6;
int pin6 = 7; // Самый низкий уровень

void setup() {
pinMode (pin1, OUTPUT); // Установка контактов для управления вводом / выводом
pinMode (pin2, OUTPUT);
pinMode (pin3, OUTPUT);
pinMode (pin4, OUTPUT);
pinMode (pin5, OUTPUT);
pinMode (pin6, OUTPUT);
}

void loop()
{ digitalWrite(pin1, LOW); // Сброс светодиодов
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin5, LOW);

// Установите переменные для продолжительности пинга,
// и расстояние в дюймах и сантиметрах:

long duration, in, cm; // 'in' - дюймы и 'cm' - сантиметры

// PING запускается HIGH-импульсом в 2 или более микросекундах.
// Дайте короткий LOW импульс заранее, чтобы обеспечить чистый HIGH-импульс:

pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);

// Этот же вывод используется для считывания сигнала от PING: 
// HIGH-импульс, продолжительность которого - это время (в микросекундах) 
// от отправки пинга до приема его эха от объекта

pinMode(echo, INPUT);
duration = pulseIn(echo, HIGH);

// Преобразовать время в расстояние

in = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

delay(100); 
if (in < 6 * d / 7)
digitalWrite(pin1, HIGH);
else if (in < 5 * d / 6)
digitalWrite(pin2, HIGH);
else if (in < 4 * d / 6)
digitalWrite(pin3, HIGH);
else if (in < 3 * d / 6)
digitalWrite(pin4, HIGH);
else if (in < 2 * d / 6)
digitalWrite(pin5, HIGH);
else if (in < 1 * d / 6)
digitalWrite(pin5, HIGH);
}

long microsecondsToInches(long microseconds)
{
// Согласно таблице Parallax для PING, есть 73.746 микросекунд на дюйм 
// (т.е. звук перемещается со скоростью 1130 футов в секунду). 
// Это дает расстояние, пройденное пингом, исходящим и возвратным, 
// поэтому мы делимся на 2, чтобы получить расстояние от препятствия.

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// Скорость звука составляет 340 м/с или 29 микросекунд на сантиметр. 
// Пинг выходит и обратно, поэтому, чтобы найти расстояние от объекта, 
// мы берем половину пройденного расстояния.

return microseconds / 29 / 2;
}

Загрузите код для индикатора уровня воды Arduino непосредственно на плату Arduino или в микроконтроллер ATMega328P.

Ультразвуковой датчик и водный резервуар

Закрепите датчик так, чтобы он непосредственно смотрел на воду в баке. Основная плата управления со светодиодами может быть закреплена внутри дома в любом удобном положении. Любые многожильные кабели (Ethernet-кабель) могут использоваться для соединения датчика и остальной части схемы.

Имейте в виду, что очень не рекомендуется иметь расстояние между компонентами более 20 метров.

Теперь просто подключите аккумулятор (питание) и ваш индикатор уровня воды Ардуино готов к использованию.

12.05.2018 | Уроки | | Автор:
Ардуино+