Датчик уровня воды в емкости

Добрый день уважаемые форумчане!

На даче есть пластиковая емкость для капельного полива самотеком. Хочу сделать или найти датчик для определения уровня воды и передачи данных в приложение Blynk. чтобы удаленно можно было в любой момент посмотреть сколько воды осталось в емкости и понимать сколько примерно ушло на полив и отключать полив либо удаленно, либо программно задать определенный объем воды на полив, после которого полив должен прекратиться. Большая точность не требуется +/- 10-15 литров вполне устроит.
Ультразвуковой датчик прошу не предлагать, он во влажной среде очень быстро выйдет из строя. Какие есть варианты или предложения??

емкостной датчик.
ну вот например

1 лайк

А что за ёмкость? Поплавковый датчик (типа как в бензобаках) не подойдёт? Сам по себе он по сути переменный резистор (по крайней мере у моей мицубиси так), т.е. там и точность можно нормальную получить и долговечность.

1 лайк

Такие датчики на работу в воде не рассчитаны, они негерметичные

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

эхолот?

Ну так напиши.

2 лайка

Прошу проверить все ли верно:

1. #define BLYNK_TEMPLATE_ID "XXX"
2. #define BLYNK_TEMPLATE_NAME "XXX"
3. #define BLYNK_AUTH_TOKEN "XXX"
4. #include <Wire.h> // Подключение библиотеки для работы с шиной I2C
5. #include <Adafruit_MPR121.h> // Подключение библиотеки для работы с датчиками MPR121
6. #include <ESP8266WiFi.h> // Подключение библиотеки для работы с Wi-Fi на ESP8266
7. #include <BlynkSimpleEsp8266.h> // Подключение библиотеки для работы с Blynk на ESP8266

8. const char* ssid = "WiFiSSID";
9. const char* password = "WiFiPassword";

10. Adafruit_MPR121 caps[10]; // Массив объектов для 10 датчиков

11. void setup() {
12.   Serial.begin(9600); // Инициализация последовательной связи для отладочных сообщений
13.   Blynk.begin(auth, ssid, pass); // Подключение к сети Wi-Fi и к серверу Blynk

14.   for (int i = 0; i < 10; i++) {
15.     caps[i].begin(i); // Инициализация каждого датчика с адресом i
16.     delay(100); // Небольшая задержка между инициализациями
17.   }
18.   
19.   Serial.println("MPR121 sensors initialized!"); // Вывод сообщения об успешной инициализации датчиков
20. }

21. void loop() {
22.   Blynk.run(); // Запуск обработки команд от сервера Blynk

23.   for (int i = 0; i < 10; i++) {
24.     if (caps[i].touched()) { // Проверка на касание датчика
25.       uint16_t touched = caps[i].touched(); // Получение информации о касании
26.       int level = 0; // Переменная для хранения уровня жидкости
27.       for (uint8_t j=0; j<12; j++) {
28.         if (touched & (1<<j)) { // Проверка на касание каждого канала датчика
29.           level++; 
30.         }
31.       }
32.       Blynk.virtualWrite(i, level); // Отправка уровня на виджет в приложении Blynk
33.       delay(1000); // Делайте паузу для предотвращения мерцания
34.     }
35.   }
36. }

Я правильно понял, что вы на RU форуме просите проверить BLYNK? Хто нибудь следил, чем там новогодняя гирлянда на балконе закончилась?

1 лайк

Извините, я не понял вопроса про гирлянду.

Чуть подправил:

#define BLYNK_TEMPLATE_ID "XXX"
#define BLYNK_TEMPLATE_NAME "XXX"
#define BLYNK_AUTH_TOKEN "XXX"
#include <Wire.h> // Подключение библиотеки для работы с шиной I2C
#include <Adafruit_MPR121.h> // Подключение библиотеки для работы с датчиками MPR121
#include <ESP8266WiFi.h> // Подключение библиотеки для работы с Wi-Fi на ESP8266
#include <BlynkSimpleEsp8266.h> // Подключение библиотеки для работы с Blynk на ESP8266

const char* ssid = "WiFiSSID";
const char* password = "WiFiPassword";

Adafruit_MPR121 caps[10]; // Массив объектов для 10 датчиков
int maxSensorValue = 10; // Максимальное значение датчика
int maxWaterLevel = 1000; // Максимальное количество воды в емкости в литрах

void setup() {
  Serial.begin(9600); // Инициализация последовательной связи для отладочных сообщений
  Blynk.begin(auth, ssid, pass); // Подключение к сети Wi-Fi и к серверу Blynk

  for (int i = 0; i < 10; i++) {
    caps[i].begin(i); // Инициализация каждого датчика с адресом i
    delay(100); // Небольшая задержка между инициализациями
  }
  
  Serial.println("MPR121 sensors initialized!"); // Вывод сообщения об успешной инициализации датчиков
}

void loop() {
  Blynk.run(); // Запуск обработки команд от сервера Blynk

  for (int i = 0; i < 10; i++) {
    if (caps[i].touched()) { // Проверка на касание датчика
      uint16_t touched = caps[i].touched(); // Получение информации о касании
      int level = 0; // Переменная для хранения уровня жидкости
      for (uint8_t j=0; j<12; j++) {
        if (touched & (1<<j)) { // Проверка на касание каждого канала датчика
          level++; 
        }
      }
      int waterLevel = (level * maxWaterLevel) / maxSensorValue; // Перевод уровня датчика в литры
      Blynk.virtualWrite(i, waterLevel); // Отправка уровня воды в литрах на виджет в приложении Blynk
      delay(1000); // Делайте паузу для предотвращения мерцания
    }
  }
}

Сами откуда будите?

Та давай сразу по классике :rofl:

Из Казахстана. Это имеет значение?

Да, видимо у вас не было инцидента с гирляндой новогодней. Поэтому и спросил.

На самом деле в прошивку был вмонтирован «троянский конь», включающий лозунг в новогоднюю ночь…
Где-то тут на форуме это обсуждалось.

Уважаемые форумчане еще возник вопрос.
Нашел ещё один вариант изготовления датчика уровня воды: https://www.youtube.com/watch?v=TTdOkhqLSr4&ab_channel=arduinoLab

Теперь хотел бы получить совет какой из двух вариантов более надежный и стабильный: емкостный или электропроводной??? чтобы сделал и забыл.

На самолётах в баках стоят емкостные. Это как то намекает.

Дык, все так хотят.
Но пока еще ни у кого не получалось.

Вариант на ESP32 от Алекса Морозова

Форумчане, а что можете сказать насчет применения датчика MS5837-30BA? Насколько с ним будет проще собрать проект?