Главная / Электроника

Датчик уровня воды на Arduino

Датчик уровня воды будет использоваться в бане в емкостях для холодной и горячей воды. Устройство расчитано на глубину до 5 метров и имеет точность 0,5 см. Основой является датчик давления MPXV5050 расчитанный на 50кПа. Это эквивалентно водяному столбу высотой 5 метров.

Принцип действия

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

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

В воду опускается медная трубка маленького диаметра почти до самого дна. Нижний срез открыт, а к верхнему подключается датчик давления. В итоге датчик фиксирует давление водяного столба на нижнем срезе трубы. 1 кПа = 10 см

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

  • чтобы труба была постоянного сечения
  • знать длину трубы
P - измеренное давление внутри турбы.
Pa - изначальное атмосферное давление

Т.к.  кол-во воздуха в трубе не меняется, а температуру считаем постоянной, то

Pa * V1 = P * V2       
, где 
V1 - изначальный обхем воздуха
V2 - объем после погружения

Т.к. сечение (площадь) трубы постоянно, то можно перейти к длинам.

Pa * L1 = P * L2
, где 
L1 - длина всей трубы 
L2 - длина трубы от сенсора до H1

L2 = (Pa * L)/P

Посчитаем, на сколько сожмется воздух если опустить трубку длиной 1 метр, на глубину 1 метр. Атмосферное давление 100кПа. Давление водяного столба высотой 1 метра равено 10кПа (плюс атмосфера сверху, итого 110 кПа). Получаем:

L2 = (100*1м)/(100 + 10) = 0.9 м

Т.е. вода зайдет на 10 см.

Но хватит теории, давайте к практике.

Подключение MPXV5050 к Arduino

Datasheet

Пины

  • 2 - Vcc
  • 3 - Gnd
  • 4 - Signal

Скетч

double L = 100.0; // длина трубки в см

void setup() {
  Serial.begin(9600);
}

void loop() {
  double p = analogRead(A0);

  // Давление водяного столба в кПа
  double h = (p/1024 - 0.04)/0.018; // kPa

  // Расчитываем поправку в см
  // double l = L - L * 100 / (100 + h);
  double l = L * h / (100 + h); 

  double total = h * 10 + l;
  Serial.println(total); 
}

Ссылки