Урок №12 Датчик влажности почвы
В данном уроке мы будем работать с ним используя ESP32
Описание
Этот датчик знаком нам по уроку 4. В нем мы подключали датчик влажности почвы к Arduino. Analog Capacitive Soil Moisture Sensor - это качественный аналоговый емкостной модуль влажности почвы с антикоррозийным покрытием. Применяться может в системах автополива, контроле влажности и прочее. Высокое качество материалов и антикоррозийное покрытие обеспечивают высокую работоспособность и долгий срок службы.

В комплекте с датчиком почвы идет провод с удобным разъемом. Соедините с другой стороны их с проводами папа-папа и у вас получится один длинный провод – очень удобно для втыкания датчика в почву.

Сегодня мы будем работать с ним используя ESP32 и как уже вы догадались – будем выводить данные на экран. Ну, поехали!

Что нам понадобится?
Достаньте и подготовьте необходимые детали из коробки.
Arduino Uno
Мозг нашей схемы
Популярный микроконтроллер, его мощности достаточно пока нам для начальных экспериментов
Светодиод
Любого цвета
Длинная ножка на положительно заряженный, короткая на отрицательно
Макетная плата
на 400 точек
Соединения идут параллельно, плата разделена на 2 части горизонтальной линией
Резистор
На 10 кОм
О резисторах подробно мы подробно поговорим чуть ниже в разделе "Базовые знания"
1. GND – на минус

2. 5V на плюс

3. У датчика GND – на минус, VCC на плюс, AOUT ( англ. Analog OUT – вывод аналогового сигнала) на пин № 37.

Схема подключения
Скетч
/*Обьявление переменных экрана*/
#include "SSD1306.h" 
#define SDA_PIN 4// GPIO4 -> SDA
#define SCL_PIN 15// GPIO15 -> SCL
#define SSD_ADDRESS 0x3c
SSD1306  display(SSD_ADDRESS, SDA_PIN, SCL_PIN);

int MoistureSensor = 0;

void setup() {
 /*Включаем экран*/
  pinMode(16,OUTPUT); //Обьявляем пин как выходной. Reset экрана
  digitalWrite(16, LOW);    
  delay(50); 
  digitalWrite(16, HIGH); 
  display.init();
  display.flipScreenVertically();
}

void loop() {
 int moistRead  = analogRead(37);
 MoistureSensor = 100 - map(moistRead, 2000, 3500, 0, 100);
 
 display.setFont(ArialMT_Plain_16); //Размер шрифта
 display.setTextAlignment(TEXT_ALIGN_LEFT); //Выравнивание по левому краю
 display.clear();   // Очистка дисплея
 display.drawString(0, 0, "moisture: " + String(MoistureSensor));
 display.display();
}
Программирование
В этом коде для нас все уже знакомо.

Мы можем откалибровать датчик изменяя функцию:

MoistureSensor = 100 - map(moistRead, 2000, 3500, 0, 100);

В таком виде функция принимает значения 2000 за 0, и 3500 за 100. Но может быть и иначе и нам предстоит это выяснить! Замените значения на 0 и 3500 – посмотрите как изменяться данные. Может быть ваш нижний порог это 800? Воткните датчик в очень сухую землю и проверьте – покажет ли датчик значения близкие к 0. Опустите датчик в воду – покажет ли он 100%?
Вопросы и задания
1. Выведите данные с датчика на монитор порта ( для этого вам понадобиться функции Serial.begin() и Serial.print();

2. Откалибруйте датчик изменяя пороговые значения в функции map();

3. Найдите оптимальное значение влажности почвы для растения.