● 4.3. Подключаем датчик влажности почвы

Опубликовано: 23.01.2018

Домашний уют — это атмосфера тепла в вашей квартире, желание возвращаться туда после трудного дня. Уют и комфорт в вашем доме оказывают непосредственное влияние на ваше самочувствие и настроение. Необходимое условие в создании уюта имеет использование комнатных цветов. Они доступны каждому из нас и при этом лучше любой мебели помогут создать уют и комфорт, и как ни что другое просто вдохнуть в ваш дом чистую энергию.
Но чтобы домашние цветы  радовали вас красотой, следует выполнять общие правила по уходу за комнатными растениями – необходимо создать благоприятный для них режим температуры воздуха, влажности и освещения.
Модуль влажности почвы (рис. 4.12) предназначен для определения влажности земли, в которую он погружен. Он позволяет узнать о недостаточном или избыточном поливе ваших домашних или садовых растений. Модуль состоит из двух частей:  контактного щупа YL-28 и датчика YL-38, щуп YL-28 соединен с датчиком YL-38 по двум проводам. Между двумя электродами щупа YL-28 создаётся небольшое напряжение. Если почва сухая, сопротивление велико и ток будет меньше. Если земля влажная — сопротивление меньше, ток — чуть больше. По итоговому аналоговому сигналу можно судить о степени влажности.
Подключение данного модуля к контроллеру позволяет автоматизировать процесс полива ваших растений (своего рода  "умный полив").


Рис. 4.12. Датчик увлажненности почвы Soil Moisture

Кроме контактов соединения с щупом,  датчик YL-38 имеет четыре контакта для подключения к контроллеру.

•    Vcc – питание датчика;
•    GND – земля;
•    A0 -  аналоговое значение;
•    D0 – цифровое значение уровня влажности.

Датчик YL-38 построен на основе компаратора LM393, который выдает напряжение на выход D0 по принципу: влажная почва – низкий логический уровень, сухая почва – высокий логический уровень. Уровень определяется пороговым значением, которое можно регулировать с помощью потенциометра. На вывод A0 подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений.
Датчик YL-38 имеет два светодиода, сигнализирующих о наличие поступающего на датчик питания и уровня цифрового сигналы на выходе D0. Наличие цифрового вывода D0 и светодиода уровня D0 позволяет использовать модуль автономно, без подключения к контроллеру.
Рассмотрим подключение датчика увлажненности почвы Soil Moisture к плате Arduino Mega и модулю NodeMcu ESP8266.

4.3.1. Подключение датчика Soil Moisture к плате Arduino Mega

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


 
Рис. 4.13. Схема подключений датчика Soil Moisture к Arduino Mega

Загрузим на плату Arduino Mega скетч получения данных с датчика температуры DS18B20 и вывода в последовательный порт Arduino.  Получение данных влажности оформим в виде отдельной процедуры get_data_soilmoisture(). Содержимое скетча представлено в листинге 4.5.
Листинг 4.5

#define INTERVAL_GET_DATA 2000  // интервала измерений, мс
#define SOILMOISTUREPIN A8      // пин подключения контакта A0
// значение полного полива
#define MINVALUESOILMOISTURE 220
// значение критической сухости
#define MAXVALUESOILMOISTURE 900

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

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

void loop(void) {
   if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
      // получение данных c датчика SoilMoisture
      float  moisture= get_data_soilmoisture();
      // вывод в монитор последовательного порта
      Serial.print("soilmoisture =");Serial.println(moisture);
      Serial.println(" %");
      // старт интервала отсчета
      millis_int1=millis();
   }
}
// получение данных с датчика SoilMoisture
float get_data_soilmoisture()  {
  // получение значения с аналогового вывода датчика
  int avalue=analogRead(SOILMOISTUREPIN);
  // масштабируем значение в проценты
  avalue=constrain(avalue, MINVALUESOILMOISTURE,MAXVALUESOILMOISTURE);
  int moisture=map(avalue, MINVALUESOILMOISTURE, 
                   MAXVALUESOILMOISTURE,100,0);
  return (float)moisture;
}



Загрузим скетч на плату Arduino Mega, откроем монитор последовательного порта и видим вывод данных, получаемых с датчика Soil Moisture (рис. 4.14). Подберите практическим путем аналоговые значения для констант MINVALUESOILMOISTURE (полный полив) и MINVALUESOILMOISTURE (критическая сухость).
 


Рис. 4.14. Вывод данных с датчика Soil Moisture в монитор последовательного порта

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

4.3.2. Расширение аналоговых входов – мультиплексор CD4051

Модуль Node Mcu  имеет один канал АЦП доступный для пользователей. Однако нам понадобится их гораздо больше. Как увеличить количество аналоговых входов? Для этого будем использовать мультиплексор CD4051 (см. рис. 4.15).

Рис. 4.15. Мультиплексор CD4051

Микросхема 4051 является 8-канальным аналоговым мультиплексор/ демультиплексором, имеющим 8 входов (y0 – y7) и 1 выход Z (см. рис. 4.16). Выбор считываемого входа осуществляется подачей цифровых сигналов на выходы s0 – s2. Т.е. для подключения к модулю Node Mcu 8 аналоговых датчиков необходимо задействовать 3 цифровых выхода модуля и 1 аналоговый вход.
 


Рис. 4.16. Контакты мультиплексора CD4051

И в листинге 4.6. представлен скетч циклического опроса 8 аналоговых датчиков, подключенных к 8 входам мультиплексора и через вход Z к аналоговому входу A0 модуля Node Mcu.
Листинг 4.6

// список пинов для подключения к s0, s1, s2 мультиплексора
// D5, D7, D8 (GPIO 14, 13, 15)
int pins[]={14, 13, 15};
// Массив двоичных числ определяющих номер выбранного входа/выхода 
// микросхемы 4051, с 1 по 8. 
int bin [] = { B000, B001, B010, B011, B100, B101, B110, B111 } ;
// служебные переменные
int row;
int r0 = 0;
int r1 = 0;     
int r2 = 0;
int  avalue =0;

void setup(void) {
   // входы подключения к мультиплексору как OUTPUT
   for(int i=0;i<3;i++) {
      pinMode(pins[i],OUTPUT);
   }
   // запуск последовательного порта
   Serial.begin(9600);
}

void loop(void) {
   for(int i=0;i<8;i++) {
      // выбор входа мультиплексора
      
      row = bin [i] ;      
      r0 = row & 0x01 ;      
      r1 = (row >> 1) & 0x01 ; // 
      r2 = (row >> 2) & 0x01 ; // 
      digitalWrite (pins[i], r0) ;      
      digitalWrite (pins[i], r1) ;      
      digitalWrite (pins[i], r2) ;      
      // получение данных c A0
      avalue= analogRead(A0);
      // вывод в монитор последовательного порта
      Serial.print("analog input =");Serial.print(i);
      Serial.println(" = "); Serial.println(avalue);
   }
   // пауза
   delay(2000);
}



4.3.3. Подключение датчика Soil Moisture к модулю NodeMcu ESP8266

Теперь рассмотрим подключение датчика Soil Moisture к модулю NodeMcu ESP8266. Датчик Soil Moisture подключаем к входу y0 мультиплексора. Для выбора аналогового входа мультиплексора используем контакты D5, D7, D8 модуля Node Mcu. Схема соединений представлена на рис. 4.17.
 


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

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

#define INTERVAL_GET_DATA 2000  // интервала измерений, мс
#define SOILMOISTUREPIN A0      // аналоговый вход
// значение полного полива
#define MINVALUESOILMOISTURE 220
// значение критической сухости
#define MAXVALUESOILMOISTURE 900

// переменная для интервала измерений
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 датчика SoilMoisture
      float  moisture= get_data_soilmoisture();
      // вывод в монитор последовательного порта
      Serial.print("soilmoisture =");Serial.print(moisture);
      Serial.println(" %");
      // старт интервала отсчета
      millis_int1=millis();
   }
}
// получение данных с датчика SoilMoisture
float get_data_soilmoisture()  {
  // выбор входа мультиплексора CD4051 – y0 (000)
  digitalWrite(14,LOW);
  digitalWrite(13,LOW);
  digitalWrite(15,LOW);
  // получение значения с аналогового вывода датчика
  int avalue=analogRead(SOILMOISTUREPIN);
  Serial.print("avalue =");Serial.println(avalue);
  // масштабируем значение в проценты
  avalue=constrain(avalue, MINVALUESOILMOISTURE,MAXVALUESOILMOISTURE);
  int moisture=map(avalue, MINVALUESOILMOISTURE, 
                    MAXVALUESOILMOISTURE,100,0);
  return (float)moisture;
}



Загрузим скетч на модуль Node Mcu, откроем монитор последовательного порта и видим вывод данных, получаемых с датчика Soil Moisture (рис. 4.18). Подберите практическим путем аналоговые значения для констант MINVALUESOILMOISTURE (полный полив) и MINVALUESOILMOISTURE (критическая сухость).
 


Рис. 4.18. Вывод данных Soil Moisture в монитор последовательного порта

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


Главное меню

Каталог

Полезные ссылки

Цена
от
до