Всем привет, сегодня я хочу показать свой проект, это уже будет более-менее осмысленно устройство. Напишем скетч, вернее покажу как я его писал, покажу схему устройства для управления насосом на Arduino. Чуть позже я вам покажу, на рисунке, что в общем-то у меня должно получиться по задумке.

Смотрите видео: Управление погружным насосом на Arduino

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

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

схема колодца с насосом

Таким образом я смогу выбирать этот диапазон воды из колодца, управлять питанием на 220 Вольт.

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

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

поплавок геркон с алиэкспресс

Существует много различных на AliExpress поплавков, но я выбрал такой тип, он наиболее дешёвый, простой по конструкции и достаточно герметичен, по идее должен прослужить некоторое время, несколько лет, пока провода не окисляться из-за влажности.

От двух поплавков наверх пойдет 4 провода, надо будет использовать герметичный кабель, или кинуть витую пару, в ней 8 проводников, можно будет попарно соединить, и у меня получится на 2 датчика четыре провода.

Ну вот так примерно выглядит задача, которую я хотел бы решить с помощью Arduino, а использовать я буду Arduino Nano, поскольку, я сначала хотел сделать более компактную схему, поместить в небольшую коробочку, ну максимум тут реле управления насосом, но я столкнулся с проблемой, как запитать собственно Arduino, и пришлось заказывать дополнительно Shield, который имеет разъем для подачи питания на 9 вольт. Теперь можно будет от адаптера подать напряжение и дальше уже всё это использовать.

Shield для Arduino NANO и вид элементов схемы

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

принципиальная схема

В данный момент, как будто бы воды сейчас нет, и поплавки находится в сухом положение.

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

Насос будет работать пока нижний поплавок не разомкнет цепь, то есть на него перестанет давить вода.

поплавки на макете

Использовал проводники, заказывал дополнительно, это всё еще сейчас монтажная схема.

А вот блок, который находится слева, где находится сопротивления и светодиоды, это всё будет у меня уже позже распаяно на отдельной плате.

Красный светодиод у меня отвечает за верхний уровень, за нижний уровень отвечает синий светодиод, ну и зелёный светодиод будет сигнализировать о включении и работе насоса.

Использовались контакты на плате D2 это красный светодиод – верхний поплавок, D3 синий светодиод – нижний поплавок.

Зеленый светодиод подключен к D11, горит при включении и работе насоса и включенном реле.

Сигнальный контакт реле подключен к D12. На этом Shield ближний ряд это пины Arduino, средний ряд – питание 5 вольт, и крайний ряд – GRD.

Пины D4 и D5 я использую как входящие для датчиков. 5 вольт идет с платы на геркон поплавка, допустим на верхний датчик, при замыкании контактов, питание идет в D5, но он замкнут через сопротивление 220 ом на землю, пока геркон не замкнут. Если этого не делать, то реле сходит с ума и начинает хаотично замыкаться и размыкаться.

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

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

При погружении в воду или подъеме уровня воды, замкнется геркон нижнего поплавка, загорится синий светодиод.

замкнут нижний поплавок, горит синий светодиод

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

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

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

насос работает, реле замкнуто, идет откачка воды, горят зеленый и синий светодиоды

Как только вода уходит ниже поплавка, гаснут красный и зеленый светодиоды, отключается реле и выключается насос.

вода откачана, реле и насос откл, светодиоды погасли

При наборе воды снова сработает нижний датчик и весь цикл повторится.

Питать плату буду от 9 вольтового адаптера, так как реле потребляет лишний ток, да и не везде удобно питать Arduino от USB.

адаптеры на 9 вольт для питания arduino

Останется распаять навесные элементы(светодиоды, резисторы), привести в порядок провода и можно будет приступать к полевым испытаниям.

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

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

#define downLed 2
#define upLed 3
#define relayLed 11

keyPin1 это нижний датчик на четвёртом контакте, keyPin2 5 контакт, это у нас верхний датчик.

#define keyPin1 4 //нижний датчик
#define keyPin2 5 //верхний датчик

Объявляем разъем для реле D12, объявляем две переменные – булевые: down, up для определения в каком положении находятся у нас поплавки.

#define relay 12
bool down;
bool up;

Так же ещё одна переменная Trigger, присвоим ей сразу значение ложь.

bool trigger=false;

В setup и это важно,

pinMode(keyPin1, INPUT);//нижний датчик

данные будут приниматься с нижнего датчика. С верхнего датчика будем принимать данные

pinMode(keyPin2, INPUT);//верхний датчик

Через pinMode присвоим индикаторам нижнего, верхнего уровня, и реле значение OUTPUT.

pinMode(upLed, OUTPUT);
pinMode(downLed, OUTPUT);
pinMode(relayLed, OUTPUT);

Исходящее значение для самого реле, и через digitalwrite (relay, HIGH) подаем на реле напряжения, реле работает наоборот. То есть, если мы сейчас подаем напряжение, то реле разомкнуто, если мы здесь будем писать LOW то реле будет замкнуто.

pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);

В цикле loop сделаем проверку: если на разъёме D4 есть напряжение, то промежуточная переменная down примет истинное значение, если нет, то ложь;

if (digitalRead(keyPin1) == HIGH )
  {
    down = true;
  }
   else
  {
    down = false;
   }

если на разъёме D5 есть напряжение, то промежуточная переменная up примет истинное значение, если нет, то ложь.

if (digitalRead(keyPin2) == HIGH )
  {
    up = true;
  }
  else
  {
    up = false;
  }

Если на Верхнем датчик есть напряжение, а это свидетельствует о том, что верхний датчик замкнут, то up истина, если нет, то up ложь.

Идём дальше. Если keyPin1 - LOW и keyPin2 - LOW, то Trigger ложь. Оба датчика разомкнуты.

if (digitalRead(keyPin1) == LOW && digitalRead(keyPin2) == LOW){
    trigger=false;
}

В принципе здесь можно было использовать если up==false и down==false, и наоборот, то Триггер равно ложь, но как сделал так сделал.))))

И еще одно проверка: если keyPin1 - HIGH и keyPin2 - HIGH, то Trigger истина. Оба датчика замкнуты.

if (digitalRead(keyPin1) == HIGH && digitalRead(keyPin2) == HIGH){
    trigger=true;
}

С общими проверками закончили. Идем дальше.

После цикла loop напишем две функции mstart и mstop, в которых через digitalWrite на реле и светодиод включения насоса, будем подавать питание. В mstart на relayLOW, relayLedHIGH, в mstop - relayHIGH, relayLedLOW, то есть наоборот.

void mstart() {
  digitalWrite(relay, LOW); //насос работает
  digitalWrite(relayLed, HIGH); //насос работает
  }
  
void mstop() {
  digitalWrite(relay, HIGH); //насос не работает
  digitalWrite(relayLed, LOW); //насос не работает
  
}

Снова в loop пойдёт куча проверок, если up равно True и Триггер равно false, погружено в воду идёт набор воды, насос не включён – то насос включим и Триггер поменяет свое состояние.

if (up == true && trigger == false)
 {
 mstart();
 trigger=true;
 }

Если теперь Триггер стал True, то мы повторяем эти же действия.

if (up == true && trigger == true)
 {
 mstart();
 trigger=true;
 }

Если нижний, верхний уровни и Триггер равны истине, то есть насос уже работает, продолжаем действием.

if (down == true && up == true && trigger == true)
 {
 mstart();
 trigger=true;
 }

Если нижний уровень еще замкнут, то есть вода ещё в Нижнем уровне есть, в верхнем уже нет и триггер True, продолжаем, Триггер всё ещё равен true.

if (down == true && up == false && trigger == true)
 {
 mstart();
 trigger=true;
 }

Если нижний уровень уже равен ложь, то есть вода откачана, верхний уровень само собой пройден, и триггер равен True, то есть насос все еще работает, и только теперь мы мотор останавливаем, вызываем mstop, триггер делаем равным ложь.

if (down == false && up == false && trigger==true)
 {
 mstop();
 trigger=false;
}

И ещё одна проверка и даже не одна, необходимо указать все возможные варианты, какие только могут быть, если нижний уровень ложь, верхний уровень ложь, Trigger ложь, то чтоб не было никаких ложных срабатываний, мы опять посылаем mstop, стоп мотор, опять пишем триггер ложь.

if (down == false && up == false && trigger==false)
 {
  mstop();
  trigger=false;
}

И вот теперь последняя проверка: если нижний уровень уже True, верхней ещё false и Триггер равно ложь, мы ещё шлём, что мотор не должен включаться.

if (down == true && up == false && trigger==false)
 {
  mstop();
  trigger=false;
}

Пришлось перечислить практически все вот эти комбинации, и они идут последовательно. То есть у нас up cработает, когда поднимется до верхнего уровня и потом в цикле пойдёт опять. Триггер у нас пришел снизу со значением ложь, именно в такой последовательности всё это работает. По крайней мере в моём случае.

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

if (up == true) {
    digitalWrite(downLed, HIGH);
  }
  else
  {
    digitalWrite(downLed, LOW);
  }

Если замкнут нижний датчик, то мы подаем напряжение на верхний красный светодиод если нет - то наоборот…

if (down == true) {
    digitalWrite(upLed, HIGH);
  }
  else
  {
    digitalWrite(upLed, LOW);
  }

Я не помню почему у меня так получилось, но я этот кусок кода я оставил, может быть потом в комментариях отпишусь, почему именно так сделал.

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

Главное, что схема работает, вот весь код, сохраним скетч. Проверим на ошибки, ошибок нет, в принципе в таком виде схема должна работать.

Cкачать архив для ознакомления - скетч управления погружным насосом на Arduino и схема:


ZIP архив с проектом


UPD. При сборе этой схемы в реальных условиях, по просьбам трудящихся, параллельно с верхним поплавком была припаяна кнопка, позволяющая включать насос, не дожидаясь пока сработает автоматика.

Таким образом, схема работает сразу в двух режимах: можно качать воду в большую ёмкость на несколько кубов в автоматическом режиме, пока через край не польется(можно добавить еще геркон и в бочку, для разрыва работы схемы) и можно при необходимости полить огород, не дожидаясь максимального наполнения воды в колодце, не опасаясь, что насос схватит воздух.

Смотрите видео: Управление погружным насосом на Arduino




Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Связанные статьи

Предыдущие статьи

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok