Модуль датчика состоит из двух частей: контактного щупа и датчика YL-38 (рис. S5.1), в комплекте также идут провода для подключения. Между двумя электродами щупа создается небольшое напряжение. Если почва сухая, то сопротивление большое, а ток небольшой. Если земля увлажняется (например, поливом), то сопротивление уменьшается, а ток немного увеличивается (рис. S5.2).
Внешний вид, назначение контактов
Рис. S5.1. Датчик влажности почвы YL-38
Рис. S5.2. Принцип работы датчика влажности почвы
В качестве датчика влажности почвы можно использовать два оцинкованных гвоздя и проволоку, как показано на рис. S5.3. Когда почва увлажнится сопротивление между гвоздями уменьшится.
Рис. S5.3. Использование гвоздей в качестве датчика влажности почвы
Основные характеристики
Наименование | Значение |
Рабочее напряжение, В | 3 ÷ 5 |
Ток потребления, мА | 15 |
Напряжение цифрового выхода, В | 3 ÷ 5 |
Напряжение аналогового выхода, В | 0 ÷ 5 |
Схема подключения
Рис. S5.4. Подключение датчика измерения влажности почвы
Программный код
Листинг S5.1. Подключение датчика влажности почвы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #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. Измерение влажности почвы с интервалом
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #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); //выключаем датчик влажности } |