Урок №4 Измеряем влажность почвы
В этом уроке мы научим плату определять насколько влажная среда вокруг датчика почвы.
Описание датчика
Этот датчик используется во многих проектах по автоматизации теплиц и очень удобен в использовании.

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


Его работа основана на изменении электрического сопротивления почвы в зависимости от уровня ее влажности. Между двумя электродами создаётся небольшое напряжение. Если почва сухая, сопротивление велико и ток будет меньше. Если земля влажная — сопротивление меньше, ток — чуть больше. По итоговому аналоговому сигналу можно судить о степени влажности.

Сенсор при работе потребляет ток около 35 мА. Напряжение питания 3,3—5 В. Возвращаемый сигнал при питании от 5 В: 0—4,2 В. Отобразив эти значения на 10-битный диапазон, можно воспользоваться следующими приближениями:

  • 0—300: сухая почва
  • 300—700: влажная почва
  • 700—950: датчик в вод
Датчик подключается к управляющей электронике через 3 провода.

  • GND – минус-земля;
  • CC – питание;
  • AOUT – Analog Output – аналоговый сигнал ( подключается к аналоговым портам, отмеченными буквами А

Характеристики

Максимальная глубина погружения в почву: 40 мм
Максимальный потребляемый ток: 50 мА
Напряжение питания: 3,3–5 В


Что нам понадобится?
Достаньте и подготовьте необходимые детали из коробки.
Arduino Uno
Мозг нашей схемы
Популярный микроконтроллер, его мощности достаточно пока нам для начальных экспериментов
Светодиод
Любого цвета
Длинная ножка на положительно заряженный, короткая на отрицательно
Макетная плата
на 400 точек
Соединения идут параллельно, плата разделена на 2 части горизонтальной линией
Резистор
На 10 кОм
О резисторах подробно мы подробно поговорим чуть ниже в разделе "Базовые знания"
Подключение
Скетч
int MoistureSensor = 0;
void setup() {
 Serial.begin(9600);
}
void loop() {
 int moistRead  = analogRead(37);
 MoistureSensor = 100 - map(moistRead, 0, 3500, 0, 100);
 Serial.println(MoistureSensor + " %");
 delay(100);
}
Программирование
Здесь мы видим новую для нас фукнцию analogRead()

Функция считывает значение с указанного аналогового входа. Большинство плат Arduino имеют 6 каналов (А0 – А5) c 10-битным аналого-цифровым преобразователем (АЦП). Напряжение поданное на аналоговый вход, обычно от 0 до 5 вольт будет преобразовано в значение от 0 до 1023.

Функция map это специальная функция, упрощающая преобразование диапазонов значений. Вы передаете ей значение и два диапазона (исходный и требуемый), а функция возвращает новое значение, которое будет также относиться к границам требуемого диапазона как и к границам исходного.

То есть map(0,1023,0,100) – значит перевести значение от 0 до 1023 в значение от 0 до 100.

В нашем коде пример использования функции map совместно с функцией analogRead ():

Serial.println(map(val,0,3500,0,100)); Вернет значение аналогового порта в диапазоне от 0 до 100. При этом 0 будет соответствовать 0, а 100– 3500.

Вопросы и задания
  1. Замерьте какое значение покажет датчик, погруженный в стакан чистой воды?
  2. Начните разводить соль в стакане воды – отметьте как поменяются значения.
  3. Намочите ладонь и сожмите датчик, посмотрите насколько изменится значения
  4. Погрузите датчик в сухую почву растения, затем полейте водой в количестве достаточном для этот растения, замерьте показания.