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

Датчик влажности почвы YL-38

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Модуль датчика состоит из двух частей: контактного щупа и датчика YL-38 (рис. S5.1), в комплекте также идут провода для подключения. Между двумя электродами щупа создается небольшое напряжение. Если почва сухая, то сопротивление большое, а ток небольшой. Если земля увлажняется (например, поливом), то сопротивление уменьшается, а ток немного увеличивается (рис. S5.2).

Внешний вид, назначение контактов

2-05-1-влажность почвы

Рис. S5.1. Датчик влажности почвы YL-38

5-02-влажность почвы

Рис. S5.2. Принцип работы датчика влажности почвы

В качестве датчика влажности почвы можно использовать два оцинкованных гвоздя и проволоку, как показано на рис. S5.3. Когда почва увлажнится сопротивление между гвоздями уменьшится.

2-05-4-влажность почвы

Рис. S5.3. Использование гвоздей в качестве датчика влажности почвы

Основные характеристики

Наименование Значение
Рабочее напряжение, В 3 ÷ 5
Ток потребления, мА 15
Напряжение цифрового выхода, В 3 ÷ 5
Напряжение аналогового выхода, В 0 ÷ 5

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

2-05-2-влажность почвы

Рис. S5.4. Подключение датчика измерения влажности почвы

Программный код

Листинг S5.1. Подключение датчика влажности почвы

#define sensorPin A0 //номер пина влажности почвы

int sensorValue = 0; //переменная значения влажности

void setup() {

Serial.begin(9600);

}

void loop() {

sensorValue = analogRead(sensorPin);

Serial.println(sensorValue);

delay(100);

}

В процессе эксплуатации контактный щуп окисляется, и это происходит достаточно быстро. Чтобы окисление проходило медленнее, можно подключить питание датчика на цифровой вход Arduino и подавать напряжение только на время измерения (см. https://mxjournal.ru/blog/1319). В нашем примере контакт питания от модуля влажности (VCC) следует соединить на плате Arduino Uno не с пином 5V, а с цифровым пином — например, D8 (на рис. S5.4 показано пунктиром). В этом случае код может быть переписан следующим образом (листинг S5.2) — мы вводим переменную timing, в которой будет храниться количество миллисекунд. По умолчанию значение переменной равно 0. В основной части программы проверяем условие: если количество миллисекунд с запуска микроконтроллера минус число, записанное в переменную timing, больше, чем записано в переменную interval (в минутах), то выполняется функция get_sensor().

Листинг S5.2. Измерение влажности почвы с интервалом

#define sensorPin A0 //номер аналогового пина влажности почвы

#define powerPin 8 //номер пина питания датчика влажности почвы

int sensorValue = 0; //переменная значения влажности

unsigned long timing = 0; //переменная для хранения точки отсчета

int interval=60; //интервал измерений в минутах

void setup() {

Serial.begin(9600);

pinMode (powerPin, OUTPUT); // питание датчика влажности

digitalWrite (powerPin, LOW);

digitalWrite (13, LOW);

}

void loop() {

if (abs(millis() - timing)/1000 > interval*60) { //один раз в час

get_sensor(); // снимаем показания датчика влажности почвы

timing = millis();

}

}

void get_sensor() {

digitalWrite (powerPin, HIGH); //включаем датчик влажности

digitalWrite (13, HIGH); //включаем датчик влажности

delay (3000);

sensorValue = analogRead(A0); //получение значения влажности с

//аналогового вывода датчика

Serial.println(sensorValue); //конролируем влажность на

//Мониторе порта

delay(100);

digitalWrite (powerPin, LOW); //выключаем датчик влажности

}
Добавить комментарий