На даче есть пластиковая емкость для капельного полива самотеком. Хочу сделать или найти датчик для определения уровня воды и передачи данных в приложение Blynk. чтобы удаленно можно было в любой момент посмотреть сколько воды осталось в емкости и понимать сколько примерно ушло на полив и отключать полив либо удаленно, либо программно задать определенный объем воды на полив, после которого полив должен прекратиться. Большая точность не требуется +/- 10-15 литров вполне устроит.
Ультразвуковой датчик прошу не предлагать, он во влажной среде очень быстро выйдет из строя. Какие есть варианты или предложения??
А что за ёмкость? Поплавковый датчик (типа как в бензобаках) не подойдёт? Сам по себе он по сути переменный резистор (по крайней мере у моей мицубиси так), т.е. там и точность можно нормальную получить и долговечность.
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. }
#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); // Делайте паузу для предотвращения мерцания
}
}
}