
Интернет-магазин «Неглупый Дом»
YL-69 и DS18B20 вместе выводят на LCD1602 полную картину состояния почвы — влажность подскажет, нужен ли полив, а температура покажет, не слишком ли холодно для корней.
Два датчика измеряют совершенно разные физические величины разными способами. YL-69 — это аналоговый датчик, который оценивает влажность почвы по электрическому сопротивлению между двумя металлическими зубцами: чем больше воды в почве, тем лучше она проводит ток и тем ниже сопротивление, что плата видит как изменение напряжения на аналоговом входе. DS18B20 — цифровой датчик температуры, который можно закопать прямо в землю (он герметичный в проводном исполнении) и получать температуру корневой зоны, а не воздуха.
Оба значения выводятся одновременно на один дисплей LCD1602, подключённый через I2C-переходник — это позволяет использовать всего 2 провода (SDA и SCL) вместо 6-7 при прямом подключении дисплея, что освобождает пины под сами датчики.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес 0x27 или 0x3F в зависимости от переходника
const int soilPin = A0;
void setup() {
Serial.begin(9600);
sensors.begin();
lcd.init();
lcd.backlight();
}
void loop() {
sensors.requestTemperatures();
float t = sensors.getTempCByIndex(0);
int soil = analogRead(soilPin); // чем суше почва, тем выше значение (меньше проводимость)
int soilPercent = map(soil, 1023, 300, 0, 100); // калибруется под свою почву
soilPercent = constrain(soilPercent, 0, 100); // на случай если реальные показания выйдут за калибровочные границы
lcd.setCursor(0, 0);
lcd.print("Soil: ");
lcd.print(soilPercent);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(t);
lcd.print("C ");
Serial.print("Влажность: "); Serial.print(soilPercent);
Serial.print("%, сырое значение: "); Serial.print(soil);
Serial.print(", температура: "); Serial.println(t);
delay(2000);
}
Границы `map()` для влажности (1023 и 300) — ориентировочные, их стоит уточнить по своей почве в сухом и влажном состоянии через Serial-монитор.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 217 ₽ 195 ₽ (экономия 22 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.