
Интернет-магазин «Неглупый Дом»
На сайте уже есть проект климат-контроля теплицы на бюджетном датчике KY-015. Здесь используется HTU21D — датчик с заметно более высокой заводской точностью (см. проект сравнения с LCD1602 на сайте) — в задаче, где точность имеет значение: слишком частое или слишком редкое срабатывание вентиляции из-за погрешности датчика может заметно повлиять на урожай в теплице с чувствительными культурами.
HTU21D измеряет и температуру, и влажность одновременно по I2C, отдавая уже готовые, заводски откалиброванные значения — без необходимости строить собственную формулу пересчёта, как для дешёвых аналоговых термисторов из другого проекта на сайте. В этом проекте оба значения используются вместе: вентиляция включается, если влажность ИЛИ температура выходят за комфортный диапазон для рассады, то есть достаточно превышения любого ОДНОГО из двух параметров, а не обязательно обоих одновременно.
Как и в термостате на LM75, здесь используется гистерезис — отдельные пороги включения и выключения с разницей в пару единиц, чтобы реле не "дребезжало" частыми переключениями при показаниях, колеблющихся около одной границы.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <Wire.h>
#include <Adafruit_HTU21DF.h>
Adafruit_HTU21DF htu;
const int RELAY_PIN = 2;
const float HUMIDITY_ON = 75.0;
const float HUMIDITY_OFF = 70.0;
const float TEMP_ON = 30.0;
const float TEMP_OFF = 27.0;
bool ventOn = false;
void setup() {
Serial.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
if (!htu.begin()) {
Serial.println("HTU21D не найден!");
while (1) delay(1000);
}
}
void loop() {
float temp = htu.readTemperature();
float hum = htu.readHumidity();
Serial.print("T: "); Serial.print(temp);
Serial.print(" H: "); Serial.println(hum);
bool shouldVentOn = (hum >= HUMIDITY_ON) || (temp >= TEMP_ON);
bool shouldVentOff = (hum <= HUMIDITY_OFF) && (temp <= TEMP_OFF);
if (!ventOn && shouldVentOn) {
ventOn = true;
digitalWrite(RELAY_PIN, HIGH);
} else if (ventOn && shouldVentOff) {
ventOn = false;
digitalWrite(RELAY_PIN, LOW);
}
delay(5000);
}
Библиотека Adafruit_HTU21DF ставится через Менеджер библиотек Arduino IDE. Границы `HUMIDITY_ON`/`TEMP_ON` в примере ориентировочные — подберите под реальную культуру и сезон в вашей теплице.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 247 ₽ 222 ₽ (экономия 25 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.