Компьютерапия

    • Офис
      • MS Excel
      • MS Word
      • MS PowerPoint
      • MS Access
    • Веб
      • Joomla
      • WordPress
      • Сайтостроение
      • Уроки HTML
      • Bootstrap 3
      • Web Разработка
      • Web Сервисы и Службы
      • Основы AJAX
      • Изучаем AngularJS
      • Основы CSS
    • Программер
      • Android
      • VBA
      • Основы php
      • JavaScript
      • Основы Arduino
    • Полезные книги
      • Android
      • Assembler
      • Excel
      • linux
      • CSS
      • Delphi
      • Java
      • JavaScript
      • Joomla
      • Web
      • PHP
      • Unity
    • Полезные советы
      • Установки на Virtualbox
      • Продвижение YouTube канала
      • Как заказывать товары на AliExpress
    • Видео уроки
      • Уроки Word
      • Уроки Excel
      • Уроки сайтостроения
      • Уроки Joomla 3
      • Уроки Android
      • Уроки WordPress
      • Полезные советы
      • Уроки PowerPoint
      • Основы Arduino
      • Основы MacOS
      • Основы Vbox
      • Основы Python
    • Блог
    Основы Arduino
    18 июня 2019
    11 апреля 2026
    Просмотров: 25629

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

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

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


    Управление погружным насосом на 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 на relay – LOW, relayLed – HIGH, в mstop - relay – HIGH, relayLed – LOW, то есть наоборот.

    
    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


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

     С уважением, авторы сайта Компьютерапия

    Понравилось? Поделись этим видео с друзьями!

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


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

     С уважением, авторы сайта Компьютерапия

    Понравилось? Поделись этим видео с друзьями!

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


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

     С уважением, авторы сайта Компьютерапия

    Понравилось? Поделись этим видео с друзьями!

    Tags: arduino
    Вступайте в группу ВКонтакте

    Свежие записи 2025

    ВПР на Python, без Excel 16 мая 2026
    Python 3 на Android. Запускаем Ping 28 марта 2026
    Блютуз подключение в Android (проект для Arduino). Часть 2 18 января 2025
    Анимация в PowerPoint - (видео) 09 января 2025
    Меняем имена в GoPro 10 18 июля 2023
    YouTube все - ютубКапут - (видео) 20 марта 2022
    Как сделать презентацию в PowerPoint, презентация с нуля в Рower Point 2016 20 февраля 2022
    Как изменять текст в word с помощью языка Python в среде PyCharm Меняем параграфы таблицы и шрифты - (видео) 09 февраля 2022
    Как преобразовать doc в docx на языке python в PyCharm Массовая конвертация старых файлов в docx - (видео) 09 февраля 2022
    Как установить blender 3.0? Покажу два способа, как установить блендер версии 3.0 на свой комп! - (видео) 05 февраля 2022

    ТОП-10 статей 2025

    • 15 лучших эффектов переходов между слайдами в Power Point
    • Функции даты-времени в VBA. Работа с датой и временем
    • Добавление номеров страниц в колонтитул в Word
    • Массивы в VBA: как работать с массивами
    • Сортировка и фильтрация записей в Access
    • Форматирование и настройка оглавления в Word
    • Методы PHP GET и POST, переменная $_REQUEST
    • Создание форм в Access
    • Установка Android Studio, настройка SDK
    • Работа со строками в VBA: InStr, LCASE, UCase, Left, Right, Mid, LTrim, RTrim, Trim, Len, Replace, Space, StrComp, String, StrReverse
    • Офис
      • MS Excel
      • MS Word
      • MS PowerPoint
      • MS Access
    • Веб
      • Joomla
      • WordPress
      • Сайтостроение
      • Уроки HTML
      • Bootstrap 3
      • Web Разработка
      • Web Сервисы и Службы
      • Основы AJAX
      • Изучаем AngularJS
      • Основы CSS
    • Программер
      • Android
      • VBA
      • Основы php
      • JavaScript
      • Основы Arduino
    • Полезные книги
      • Android
      • Assembler
      • Excel
      • linux
      • CSS
      • Delphi
      • Java
      • JavaScript
      • Joomla
      • Web
      • PHP
      • Unity
    • Полезные советы
      • Установки на Virtualbox
      • Продвижение YouTube канала
      • Как заказывать товары на AliExpress
    • Видео уроки
      • Уроки Word
      • Уроки Excel
      • Уроки сайтостроения
      • Уроки Joomla 3
      • Уроки Android
      • Уроки WordPress
      • Полезные советы
      • Уроки PowerPoint
      • Основы Arduino
      • Основы MacOS
      • Основы Vbox
      • Основы Python
    • Блог

    Категории

    • Уроки Word
    • Уроки Excel
    • Уроки PowerPoint
    • Уроки Access
    • Основы Сайтостройения
    • Уроки HTML
    • Уроки Joomla
    • Уроки WordPress
    • Уроки Bootstrap 3
    • Уроки Android
    • Уроки VBA
    • Основы Arduino

    Разное

    • О сайте
    • Полезные советы
    • Скачать книги
    • Карта сайта
    • Правила сайта

    Видео уроки

    • Уроки Word
    • Уроки Excel
    • Уроки сайтостроения
    • Уроки Joomla 3
    • Уроки Android
    • Уроки WordPress
    • Полезные советы
    • Уроки PowerPoint
    • Основы Arduino

    Подпишитесь в соцсетях

    • Канал на RuTube
    • Группа ВКонтакте
    • Группа в Одноклассниках
    • Канал на YouTube
    © 2019 Компьютерапия - Советы и секреты новичкам в области IT технологий: программирование, сайтостроение, уроки HTML, Word, Excel, Android, Open Server, Joomla, WordPress,PowerPoint, Aliexpress, YouTube, Arduino, видеоуроки.. Все права защищены.
    Перепечатка материалов без согласования допустима при наличии dofollow-ссылки на страницу-источник.