4.4. Как подключить датчик уровня воды
Одна из главных задач умного дома — заботиться о своей сохранности, не допускать взломов, пожаров, затоплений, и прочих повреждений. Вот о защите от протечек и затопления мы сегодня и поговорим. Точнее сказать, пока только об обнаружении протечек.
Для обнаружения протечек будем использовать датчик воды. Датчики воды предназначены для определения уровня воды в различных емкостях, где недоступен визуальный контроль, с целью предупреждения перенаполнения емкости водой через критическую отметку. Данный датчик воды (рис. 4.12) – погружной. Чем больше погружение датчика в воду, тем меньше сопротивление между двумя соседними проводами.
T1592P

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

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

•    + – питание датчика;
•    - – земля;
•    S -  аналоговое значение.

На вывод S подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений. Датчик имеет красный светодиод, сигнализирующих о наличие поступающего на датчик питания.
Рассмотрим подключение датчика уровня воды к плате Arduino Mega и модулю NodeMcu ESP8266.

4.4.1. Подключение датчика уровня воды к плате Arduino Mega

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


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

Загрузим на плату Arduino Mega скетч получения данных с датчика уровня воды, перевода аналогового значения в см (0 – 4) и вывода в последовательный порт Arduino. Получение данных влажности оформим в виде отдельной процедуры get_data_levelwater(). Содержимое скетча представлено в листинге 4.8.
Листинг 4.8

#define INTERVAL_GET_DATA 2000  // интервал измерений, мс
#define LEVELWATERPIN A9      // пин подключения контакта S
// пороговое значение протечки 
#define LEVELWATER 100

// переменная для интервала измерений
unsigned long millis_int1=0;

void setup(void) {
   // запуск последовательного порта
   Serial.begin(9600);
}

void loop(void) {
   if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
      // получение данных c датчика уровня воды
      float  levelwater= get_data_levelwater();
      // вывод в монитор последовательного порта
      Serial.print("levelwater =");Serial.println(levelwater);
      if(levelwater>LEVELWATER)
         Serial.println(" flood !!!");
      // старт интервала отсчета
      millis_int1=millis();
   }
}

// получение данных с датчика уровня воды
float get_data_levelwater()  {
  // получение значения с аналогового вывода датчика
  int avalue=analogRead(LEVELWATERPIN);
  return (float) avalue;
}


Загрузим скетч на плату Arduino Mega, откроем монитор последовательного порта и видим вывод данных, получаемых с датчика уровня воды (рис. 4.21). При попадание воды на датчик выводим пообщение о протекании. Подберите практическим путем аналоговое значения для константы LEVELWATER (пороговое значение погружения).


 
Рис. 4.21. Вывод данных уровня затопления в монитор последовательного порта

Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .

4.4.2. Подключение датчика уровня воды к модулю NodeMcu ESP8266

Теперь рассмотрим подключение датчика уровня воды к модулю NodeMcu ESP8266.

Схема соединений представлена на рис. 4.22.

Рис. 4.22. Схема подключений датчика Soil Moisture к NodeMcu ESP8266

Загрузим на модуль Node Mcu скетч получения данных с датчика уровня воды и вывода в последовательный порт Arduino.  Получение данных влажности оформим в виде отдельной процедуры get_data_soilmoisture(). Для выбора аналогового входа мультиплексора y1 подаем на контакты D7, D8 сигнал низкого уровня LOW, а на контакт D5 – высокого уровня HIGH. Содержимое скетча представлено в листинге 4.9.
Листинг 4.9

#define INTERVAL_GET_DATA 2000  // интервал измерений, мс
#define LEVELWATERPIN A0      // аналоговый пин 
// пороговое значение протечки 
#define LEVELWATER 100

// переменная для интервала измерений
unsigned long millis_int1=0;

void setup(void) {
   // входы подключения к мультиплексору D5, D7, D8 (GPIO 14, 13, 15) 
   // как OUTPUT
   pinMode(14,OUTPUT);
   pinMode(13,OUTPUT);
   pinMode(15,OUTPUT);  
   // запуск последовательного порта
   Serial.begin(9600);
}

void loop(void) {
   if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
      // получение данных c датчика уровня воды
      float  levelwater= get_data_levelwater();
      // вывод в монитор последовательного порта
      Serial.print("levelwater =");Serial.println(levelwater);
      if(levelwater>LEVELWATER)
         Serial.println(" flood !!!");
      // старт интервала отсчета
      millis_int1=millis();
   }
}

// получение данных с датчика уровня воды
float get_data_levelwater()  {
  // выбор входа мультиплексора CD4051 – y1 (001)
  digitalWrite(14,HIGH);
  digitalWrite(13,LOW);
  digitalWrite(15,LOW);
  // получение значения с аналогового вывода датчика
  int avalue=analogRead(LEVELWATERPIN);
  return (float) avalue;
}


Загрузим скетч на модуль Node Mcu, откроем монитор последовательного порта и видим вывод данных, получаемых с датчика уровня воды (рис. 4.23). При попадание воды на датчик выводим пообщение о протекании. Подберите практическим путем аналоговое значения для константы LEVELWATER (пороговое значение погружения).
 


Рис. 4.23. Вывод данных уровня затопления в монитор последовательного порта

Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .



1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33 

 

Вверх