ELECTRONICS

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

Датчики влажности почвы и водыСкетч проверен компиляцией

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

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

Схема подключения

S+Power103103103
Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
SСигнал, аналоговый выход.
+ (VCC)3,3–5 В.
− (GND)Земля.

Характеристики

Рабочая зона
40 мм, 10 ступеней
Питание
3–5 В
Ток
менее 20 мА
Выход
аналоговый, 0 — сухо
Размер
62 × 20 мм

Что показывают числа

В воздухе датчик даёт ноль. При касании воды значение прыгает сразу на сотню-другую, дальше растёт ступенями с каждой парой дорожек и упирается в 600–700 при полном погружении. В проценты переводить не стоит: удобнее задать два-три порога — «есть вода», «половина», «полный» — и опираться на них.

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

Библиотека

не нужнаanalogRead и пороги.

Готовый скетч

const int LEVEL_PIN = A0;
const int POWER_PIN = 7;

// Пороги подберите под свой бак: значения при касании, половине и полном
const int TOUCH = 150;
const int HALF  = 400;
const int FULL  = 600;

void setup() {
  Serial.begin(9600);
  pinMode(POWER_PIN, OUTPUT);
}

void loop() {
  digitalWrite(POWER_PIN, HIGH);
  delay(50);
  int level = analogRead(LEVEL_PIN);
  digitalWrite(POWER_PIN, LOW);

  Serial.print(level);
  if (level < TOUCH)      Serial.println("  — сухо");
  else if (level < HALF)  Serial.println("  — низкий уровень");
  else if (level < FULL)  Serial.println("  — половина");
  else                    Serial.println("  — полный, стоп насос");
  delay(1000);
}

Скетч собирается arduino-cli под Arduino UNO

Питание на время замера — та же защита от электролиза, что у датчика почвы: под постоянным током дорожки чернеют за месяц.

Частые ошибки

Показания растут скачками

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

Разные жидкости — разные показания

Дистиллированная вода почти не проводит, солёная проводит отлично. Калибруйте на той воде, что будет в баке.

Через месяц значения упали

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

Датчик утонул целиком

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

Что понадобится