В теплице нет «средней температуры по больнице». Утром нормально, в обед уже перегрев, вечером сырость и конденсат. Если форточки открываются вручную, вы платите за это урожаем и лишними рисками по болезням. Для фермы это не «мелочь», а реальный операционный убыток.
В этой статье даём рабочий шаблон, по которому вы соберёте свою автоматику вентиляции: ESP32 + датчик + привод форточки. Это не «магическая коробка», а понятный каркас, который можно подстроить под любую теплицу — от небольшого блока до фермерской секции. Если будут вопросы по реализации под ваши условия, мы поможем разобрать конфигурацию и логику.
Что вы получаете из материала
- Готовую логику управления форточкой (пороги, гистерезис, аварийный режим)
- Базовую схему подключения без «лишней электроники»
- Рабочий код-шаблон для ESP32, который можно сразу запускать и донастраивать
- Порядок калибровки привода, чтобы не ломать механику
Важно: список комплектующих ниже — упрощённый стартовый. Это не догма. Выбирайте детали под вашу механику, питание, длину тяг, влажность в теплице и режим эксплуатации.
Комплект (упрощённый): от чего стартовать
- Контроллер: ESP32 DevKit
- Датчик климата: DHT22 или SHT31
- Привод форточки: MG996R (если створка лёгкая/средняя) или линейный актуатор 12 В (если створка тяжёлая)
- Питание: БП 12 В + DC-DC 12→5 В
- Механика: тяга, кронштейн, ограничители хода
- Защита: гермобокс IP65, нормальная клеммная разводка
Диапазон бюджета обычно 3 000–7 000 ₽ в зависимости от привода и качества механики. Экономить на механике и питании — плохая идея: именно там потом простои.
Как работает шаблон управления
- Контроллер каждые 10 секунд читает температуру и влажность
- Считает целевой процент открытия форточки
- Плавно переводит привод в нужное положение
- При перегреве включает максимум проветривания
- В ночном окне закрывает форточку по расписанию (или по температуре)
Ключевая вещь — гистерезис. Без него форточка будет «дёргаться» туда-сюда вблизи порога и убивать ресурс привода.
Базовые пороги для старта (шаблон)
- до 23 °C — 0% (закрыто)
- 23–30 °C — плавное открытие 20–80%
- выше 30 °C — 90–100%
- аварийный порог 35 °C — всегда 100%
Это не универсальные значения. Для огурца, томата, рассады и разных фаз вегетации пороги отличаются. Начните с этих чисел как с черновика и поправьте под свой технологический регламент.
Схема подключения (минимально рабочая)
БП 12V (+) -> LM2596 IN+
БП 12V (-) -> LM2596 IN-
LM2596 OUT+ (5V) -> ESP32 VIN
LM2596 OUT- (GND) -> ESP32 GND
LM2596 OUT+ (5V) -> Servo VCC
LM2596 OUT- (GND) -> Servo GND
ESP32 GPIO18 -> Servo SIGNAL
ESP32 3V3 -> DHT22 VCC
ESP32 GND -> DHT22 GND
ESP32 GPIO4 -> DHT22 DATA
Общая земля обязательна. И не запитывайте силовой привод от пина платы ESP32 — только от отдельного стабильного источника.
Код-шаблон (ESP32)
#include <Arduino.h>
#include <DHT.h>
#include <ESP32Servo.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define SERVO_PIN 18
const int SERVO_CLOSED = 20;
const int SERVO_OPEN = 120;
const float T_MIN_OPEN = 23.0;
const float T_FULL_OPEN = 30.0;
const float HYST = 1.0;
DHT dht(DHTPIN, DHTTYPE);
Servo ventServo;
int currentPercent = -1;
float lastTargetTemp = -1000;
int tempToPercent(float t) {
if (t <= T_MIN_OPEN) return 0;
if (t >= T_FULL_OPEN) return 100;
float k = (t - T_MIN_OPEN) / (T_FULL_OPEN - T_MIN_OPEN);
return (int)(k * 100.0f + 0.5f);
}
int percentToAngle(int p) {
p = constrain(p, 0, 100);
return SERVO_CLOSED + (SERVO_OPEN - SERVO_CLOSED) * p / 100;
}
void setVentPercentSmooth(int targetPercent) {
targetPercent = constrain(targetPercent, 0, 100);
if (currentPercent < 0) currentPercent = targetPercent;
int step = (targetPercent > currentPercent) ? 2 : -2;
while (currentPercent != targetPercent) {
currentPercent += step;
if ((step > 0 && currentPercent > targetPercent) ||
(step < 0 && currentPercent < targetPercent)) {
currentPercent = targetPercent;
}
ventServo.write(percentToAngle(currentPercent));
delay(40);
}
}
void setup() {
Serial.begin(115200);
dht.begin();
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ventServo.setPeriodHertz(50);
ventServo.attach(SERVO_PIN, 500, 2400);
setVentPercentSmooth(0);
}
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
delay(5000);
return;
}
int target = tempToPercent(t);
if (abs(t - lastTargetTemp) < HYST && currentPercent >= 0) {
target = currentPercent;
}
if (t >= 35.0) target = 100;
setVentPercentSmooth(target);
lastTargetTemp = t;
Serial.printf("T=%.1f H=%.1f target=%d%% angle=%d\n", t, h, target, percentToAngle(target));
delay(10000);
}
Этот код — именно шаблон. Под вашу механику и культуру вы меняете: углы, пороги, шаг движения, интервал опроса, правила ночного режима.
Калибровка под фермерский сценарий
- Сначала гоняете привод без тяги и проверяете крайние углы
- Ставите тягу, уменьшаете крайние точки до безопасных
- Прогоняете 30–50 циклов «открыть/закрыть»
- Проверяете работу в пиковую жару и вечером
- Только потом закрепляете финальные настройки в коде
Если привод греется, трещит или держит створку «в упоре» — механика настроена неправильно. Снимайте нагрузку и уменьшайте ход.
Типовые ошибки, из-за которых система «не взлетает»
- Слабый привод для тяжёлой форточки
- Плохое питание (просадки по напряжению)
- Отсутствие гистерезиса
- Датчик поставили в «тёплую точку» рядом с электроникой
- Нет ручного режима/override для аварийных ситуаций
Кому подходит этот подход
В первую очередь — фермерам и небольшим хозяйствам, которым нужна предсказуемая вентиляция без дорогой промышленной автоматики на старте. Для дачников материал тоже применим, но статья написана под эксплуатацию в фермерском режиме: надёжность, повторяемость, обслуживание и масштабирование.
Поддержка внедрения
Ещё раз: здесь не «рецепт на все случаи», а шаблон, по которому вы собираете решение под себя. Если упрётесь в механику форточки, подбор привода, пороги или логику — напишите нам, поможем донастроить под вашу теплицу и культуру.



