Датчик воды на полу arduino своими руками

Обновлено: 18.04.2024

Рассмотрим на этом занятии аналоговый датчик протечки воды (уровня жидкости). Расскажем, как подключить датчик к аналоговому порту на Arduino. Самостоятельно напишем скетч для вывода показаний датчика протечки воды на серийный порт. Рассмотрим команды Serial.begin и Serial.print в языке программирования C++ для вывода информации с микроконтроллера Arduino на серийный монитор порта.

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

Датчик уровня жидкости (Water Sensor Arduino)

Рабочее напряжение аналогового сенсора — 5v. Выходное напряжение (показания датчика) зависит от степени погружения датчика в жидкость и от параметров, влияющих на коэффициент передачи напряжения, например, проводимость жидкости. Это простой в использование и недорогой датчик уровня жидкости, который широко применяется в системах автоматизации и при разработке Умного дома.

Как вы уже заметили на фото к этому занятию, датчик уровня жидкости имеет три контакта. Правый контакт (-) подключается к Земле (GND), средний к питанию 5v, а левый к аналоговому входу, например, A0. При полностью сухом датчике выходное напряжение и показания на аналоговом входе будут равны нулю, чем больше датчик будет погружен в воду, тем больше будут его показания (от 0 до 1023).

Как подключить датчик воды к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • датчик воды;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».

Перед тем как, подключить датчик протечки воды к плате Ардуино, следует написать скетч. Откройте программу Arduino IDE и вы увидите скетч, где уже прописаны процедуры void setup() и void loop() . Для начала зададим переменную water с помощью оператора int . Переменную мы будем использовать для хранения данных в памяти и присваивания ей значения, получаемого с датчика воды.

В процедуре void setup() мы прописываем режим работы аналогового порта, как вход — команда pinMode(AO,INPUT) и подключаем монитор порта с помощью Serial.begin(9600) . Далее в процедуре void loop() получаем значение с аналогового порта с помощью команды water = analogRead(A0); и передаем значение на монитор порта Arduino IDE Serial.println(water); и ставим паузу для нашего удобства.

Скетч для датчика воды (water sensor)

Пояснения к коду:

  1. в первой строчке мы присвоили переменной int имя water для хранения значений c входа A0, значения water могут принимать только целое число.

После загрузки скетча вы сможете получить данные с датчика на мониторе порта. Для этого перейдите в Arduino IDE в Панель меню — Инструменты — Монитор порта. Или используйте для открытия сочетание клавиш Ctrl + Shift + M. После того, как мы узнали показания датчика при его увлажнении, мы можем добавить в скетч функцию автоматического включения светодиода при превышении какого-либо значения.

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

Данный датчик можно будет использовать при создании проектов «умного» полива грядок или комнатных цветов. Благодаря недорогим компонентам и простоте своей работы датчик воды для Ардуино можно сделать самостоятельно. Чтобы сделать датчик протечки воды своими руками потребуется: два гвоздя, несколько проводов, резистор на 220 Ом, клеммники и небольшой набор инструментов.

Как сделать аналоговый датчик своими руками

Для этого проекта потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • самодельный датчик воды;
  • 1 светодиод и резистор на 220 Ом;
  • провода «папа-папа» и «папа-мама».

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

Далее необходимо ослабить контакты, выкрутив винты. Согласно схеме на фото вставьте в крайние контакты гвозди и зачищенные концы проводов. Левый и средний контакт следует соединить резистором с номиналом 220 Ом. В правый контакт также вставляется зачищенный конец провода. Осталось лишь подготовить контакты на всех проводах, для подключения датчика воды к плате Ардуино.

Проверка самодельного датчика на Ардуино

Теперь вы знаете, как сделать датчик воды своими руками для Ардуино, осталось лишь проверить правильность работы и показания прибора. Для этого мы используем скетч из предыдущего занятия «Кружка робототехники на Ардуино» и соберем схему с автоматическим включением и выключением светодиода, подключив самодельный датчик воды к Ардуино (смотри фото сборки схемы выше).

Скетч для самодельного датчика воды Ардуино

В первой строчке скетча мы присвоили имя x для значений c входа A0. С помощью оператора int , мы указали, что значения x могут принимать только целое число. Условный оператор if позволяет нам определить действие при истинном условии. Показания датчиков могут разниться — это зависит от токопроводимости материалов. Добавьте в воду соль и наблюдайте за изменениями показания с датчика.


Приветствую всех читателей блога MYSKU! В сегодняшней статье хочу рассказать об одном из своих датчиков протечки воды. Данная версия датчика работает на модуле(YJ-17029) с микроконтроллером nRF52832, модуль оснащен усилителем RFX2401. Устройство питается от батарейки 1/2 AA (14250) 3.6V, рассчитано на длительный срок эксплуатации.

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

Mysensors это сообщество разработчиков програмного обеспечения с открытым исходным кодом. Данный протокол разработан сообществом для создания радио и проводных сетей. Первоначально проект разрабатывался для платформы Arduino. Стандартная Mysensors сеть состоит из гейта(шлюза), ретранстяторов и конечных устройств(ноды). В одной сети может быть до 254 устройств, каждое из устройств может быть оснащено до 254-мя сенсорами, датчиками, исполнительными узлами. Модуль Mysensors в Мажордомо (который выполняет роль контролера сети) поддерживает мультигейтовость, соответственно сетей может быть намного больше одной управляемых одним контролером.

Поддерживаемые аппаратные платформы: Linux / Raspberry Pi / Orange Pi | ATMega 328P | ESP8266 | ESP32 | nRF5x | Atmel SAMD, используемое в Arduino Zero (Cortex M0) | Teensy3(MK66FX1M0VMD18) | STM32F1.

Поддерживаемые радиопередатчики: NRF24L01 | RFM69 | RFM95 (LoRa) | nRF5x

Поддерживаемый проводной тип связи: RS485

Поддерживаемые типы связи между гейтом и контролером: MQTT | Serial USB | WiFi | Ethernet | GSM

Описываемая модификация датчика протечки с радиоусилителем и батарейкой 14250 была сделана из стандатной версии на радиомодуле без усилителя и батарейках cr2450, сr2477. Предпологается, что данная версия может быть применена в удаленых местах, местах с низкой проходимостью радиосигнала, если нет возможности разместить контролер протечки(управление перекрывающими редукторами) или репитер рядом с местом установки датчиков протечки. Идея данной версии была предложена одним из пользователей сообщества в телеграм чате Mysensors.

Основной элемент датчика это детектор жидкости. Детектор построен на основе логической микросхемы SN74LVC1G00. Один электрод датчика подключен к земле, второй электрод датчика подключен к выводам микросхемы A и В через резистор 100Oм, так же к этой линии подключен плюс через резистор 1М. Когда контакта с жидкостью нет на ножках микросхемы A и В логическая единица, соответственно на ножке Y подключенной к ножке МК (настроенной на детектирование прерывания через встроенный компоратор) логический ноль. Как только произойдет контакт с жидкостью и на ножках A и B будет низкий уровень и сигнал на ножке микросхемы SN74LVC1G00 так же инвертируется, что вызовет прерывание, которое в свою очередь выведет МК из сна.

Устройство так же имеет тактовую кнопку для реализации сервисных режимов, таких как привязка устройства, обнуление устройства и т.п. Кнопка заведена на ту же ножку МК что и детектор протечки. Обе линии разделены диодами Шотки.

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

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


Плату устройства я разрабатывал в программе Диптрейс. Первый прототип изготавливался под ЛУТ. Из нюансов это увеличенная ширина трасс, увеличенные растояния между трассами, увеличенные площадки под межслойные переходы(для более удобного сверления отверстий), отсутствие заливки пустых областей.

Корпус устройства был разработан в редакторе СолидВоркс. Печать выполнялась на SLA 3D принтере ANICUBIC PHOTON. После печати была выполнена обработка наждачной бумагой 320 и 1000 для подгонки стыков крышки и дна корпуса.

Управления ножками TXEN и RXEN усилителя осуществляется из кода основной программы, что не очень правильно, наверное имеет смысл добавить управление ножками в файл драйвера внутри библиотеки.

Если вы когда-нибудь взрывали водонагреватель или когда-либо пытались изготовить погружную электронику, то знаете, как важно определить, есть ли вокруг вода. С этим датчиком уровня воды сделать это очень просто!

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

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

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

Обзор аппаратного обеспечения

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

Эти дорожки чередуются так, что между каждыми двумя питающими дорожками есть одна чувствительная дорожка.

Обычно эти дорожки не соединены между собой, но при погружении они соединяются водой.

Рисунок 1 Датчик уровня воды

Рисунок 1 – Датчик уровня воды

На плате расположен индикатор питания, который загорается при подаче на плату напряжения питания.

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

Работа датчика уровня воды довольно проста.

Ряд открытых параллельных проводников вместе действует как переменный резистор (потенциометр), сопротивление которого изменяется в зависимости от уровня воды.

Изменение сопротивления соответствует расстоянию от верхушки датчика до поверхности воды.

Рисунок 2 – Демонстрация работы датчика уровня воды

Сопротивление обратно пропорционально высоте воды:

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

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

Распиновка датчика уровня воды

Данный датчик уровня воды очень прост в использовании и имеет только 3 контакта для подключения.

Рисунок 3 Распиновка датчика уровня воды

Рисунок 3 – Распиновка датчика уровня воды

Вывод S (Signal) – это аналоговый выход, который будет подключен к одному из аналоговых входов вашей платы Arduino.

Вывод + (VCC) обеспечивает питание датчика. Датчик рекомендуется питать напряжением от 3,3 до 5 В. Обратите внимание, что напряжение на аналоговом выходе будет зависеть от того, какое напряжение питания подается на датчик.

Подключение датчика уровня воды с Arduino

Давайте подключим датчик уровня воды к Arduino.

Сначала вам нужно подать питание на датчик. Для этого вы можете подключить вывод +(VCC) на модуле к выводу 5V на Arduino, а вывод -(GND) модуля к выводу GND Arduino.

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

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

Самый простой способ сделать это – подключить вывод VCC к цифровому выводу Arduino и устанавливать на нем высокий или низкий логический уровень, когда это необходимо. Итак, давайте подключим вывод VCC модуля к цифровому выводу 7 Arduino.

Наконец, подключите вывод S (Signal) к выводу A0 аналого-цифрового преобразователя Arduino.

Схема соединений показана на следующем рисунке.

Рисунок 4 Схема подключения датчика уровня воды к Arduino

Рисунок 4 – Схема подключения датчика уровня воды к Arduino

Базовый пример определения уровня воды

После того, как схема будет собрана, загрузите в Arduino следующий скетч.

Как только скетч будет загружен, откройте окно монитора последовательного порта, чтобы увидеть вывод Arduino. Вы должны увидеть значение 0, когда датчик ничего не касается. Чтобы увидеть, как определяется вода, вы можете взять стакан воды и медленно погрузить в него датчик.

Рисунок 5 Вывод показаний датчика уровня воды

Рисунок 5 – Вывод показаний датчика уровня воды

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

Объяснение

Скетч начинается с объявления выводов Arduino, к которым подключены выводы датчика + (VCC) и S (сигнал) .

Далее мы определяем переменную val , в которой хранится текущее значение уровня воды.

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

В функции loop() мы периодически вызываем функцию readSensor() с интервалом в одну секунду и выводим возвращаемое значение.

Функция readSensor() используется для получения текущего уровня воды. Она включает датчик, ждет 10 миллисекунд, считывает аналоговое значение с датчика, выключает датчик и затем возвращает аналоговое значение.

Калибровка

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

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

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

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

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

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

Проект определения уровня воды

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

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

Мы будем использовать схему из предыдущего примера. Но на этот раз нам нужно просто добавить несколько светодиодов.

Подключите три светодиода к цифровым выводам 2, 3 и 4 через токоограничивающие резисторы 220 Ом.

Соберите схему, как показано ниже:

Рисунок 7 Индикация уровня воды с помощью светодиодов

Рисунок 7 – Индикация уровня воды с помощью светодиодов

Код Arduino

После того, как схема будет собрана, загрузите в Arduino следующий скетч.

В этом скетче объявлены две переменные, а именно lowerThreshold и upperThreshold . Эти переменные представляют наши пороговые уровни.

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


Я опубликовал немало обзоров по поводу дачной автоматики, во многих из них фигурировали манипуляции с водой. Часто требуется узнать уровень жидкости, либо факт её отсутствия. Такую информацию удобно использовать в своих поделках, направленных на избавление от рутинных процедур. Чтобы узнать уровень многие, и я, в том числе, используют поплавковые датчики на герконах, основной проблемой при их применении является необходимость дырявить ёмкость, согласитесь, это не добавляет надежности и универсальности применения ёмкости, да и сверление с последующей герметизацией — не самые приятные манипуляции. Обозреваемое устройство (появилось в продаже недавно) призвано избавить от этого, обеспечив масштабируемость и перестраиваемость системы… Посмотрим что за зверь под катом.

Датчики доехали за 14 дней, упакованы были достаточно хорошо. Сами датчики в пакетиках:


Распаковываем:

Длина шнурка порядка 45 см:

Размеры:




Датчик очень легкий, вес:

Разъем имеет 4 контакта:

Слева направо:
— коричневый — питание
— желтый — сигнал
— синий — земля
— черный настройка
На датчике имеется индикатор, который при обнаружении воды, должен загораться, судя по описанию продавца. Питаться датчик умеет в диапазоне от 5 до 24 Вольта, что очень удобно. Корпус влагозащищенный (ip67), что позволяет размещать датчик на улице, либо во влажном помещении, не заботясь о его защите. чтобы сходу не ломать разъем, подключим модельные проводки:

У меня на даче имеется встроенный в стену самодельный регулируемый блок питания, подключим питание, 12 Вольт:


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

Если поднять выше уровня воды — индикатор гаснет:

Кстати если прислонить руку, индикатор также загорается:

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

Далее: минус на землю, а плюс на вывод сигнала:

Подносим к бутылке и видим на выходе напряжение питания:

Если отвести датчик, напряжение на сигнальном выходе пропадает:

Выходной ток датчика в диапазоне 1-50 мА.
Продавец, заявляет работоспособность при питании в диапазоне 5-24 Вольта, попробуем снизить напряжение питания до 4-х Вольт:

Датчик отлично работает, попробуем снизить до 3-х Вольт:

Уверенная работа датчиков, позволяет сделать вывод об удачном его использовании с esp8266 без всяких преобразований — а это отличная новость!
При других напряжениях, датчик также хорошо работает:


Выходить за пределы 24-х Вольт я не решился.
Выставим 5 Вольт:

Датчик реагирует на свой пакетик:

Со стороны пробки бутылки тоже реагирует:

Приклеим двухсторонним скотчем 3М к бутылке:


Датчик отлично реагирует. При двух слоях скотча, датчик не всегда срабатывает:


Потребление составляет порядка 5-6 мА:


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

Светодиод подключим к выводу D3 и земле, а сигнальный выход датчика к выводу A0 (D14 — так как мы будем его использовать в цифровом режиме), также на датчик подадим питание от контроллера:

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

Я прокомментировал все строчки, чтобы было все понятно. Инициализируем выходы и проверяем смену состояния сигнального выхода датчика с защитой от дребезга контактов. В данном коде, защитный интервал составляет 3000 мс = 3 секунды, часто этот интервал целесообразно увеличить до минуты, чтобы исключить влияние волн от насоса. Код простой, однако на его основе легко, например, организовать защиту от сухого хода насоса (очень нежелательно большинству насосов работать без воды), такие устройства стоят неразумных денег, а тут можно вполне обойтись малой кровью, да еще и реализовать автовосстановление работы насоса при появлении воды и еще ряд приятных плюшек — типа индикации. Для этого нужно такой датчик приклеить или как то закрепить ближе ко дну ёмкости, а насос подключить через реле управляемое контроллером. По умолчанию насос будет включен, как датчик распознает отсутствие воды — контроллер отключит насос, а при появлении воды — включит. Также на этом датчике можно организовать защиту от протечек, особенно учитывая его влагозащищенность, в общем, каждый сможет приспособить этот простой код под свои нужды. А главное датчики можно перемещать по ёмкости без ее повреждения — регулируя под себя уровни.

Видео иллюстрирующее работу датчика и контроллера с указанным кодом:


Я собрал такой макет для тестирования разных емкостей:

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

Время реакции датчика составляет порядка 500 мс. Толщина стенки сосуда из диэлектрика может достигать 1 см.

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


Просили проверить чувствительность, так вот иллюстрация лучше всяких слов:

Как датчик протечек будет работать отлично.

с этим вообще никак — левый спирт:

фэри:

толстая канистра 40 литров:

дистиллированная вода:

крепкие напитки:


бутыль кулера в самом толстом месте:

уайт спирит — нет:

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



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

Если будет интересно, продолжу писать про свои дачные поделки.
Спасибо всем, кто дочитал этот обзор до конца, надеюсь кому-то данная информация окажется полезной. Всем полного контроля над своими водными ресурсами и добра!

Читайте также: