
Собираем автоматический вентилятор на Arduino с датчиком температуры LM35 и реле. Вентилятор включается при превышении заданной температуры. Полный код, схема и объяснение.
В жаркий день хочется, чтобы вентилятор включался сам, без нашего вмешательства. Именно такую систему мы соберём: датчик температуры LM35 непрерывно измеряет окружающую температуру, Arduino сравнивает показания с заданным порогом, и при его превышении включает вентилятор через реле. Когда температура падает — вентилятор выключается.
Это классический проект термостата. Он демонстрирует аналоговое чтение датчика, преобразование сигнала в физическую величину, принятие решений в коде и управление мощной нагрузкой. Подходит для учеников 7-9 классов. Сборка занимает 1-1.5 часа.

Датчик LM35 — аналоговый и предельно простой. Он выдаёт напряжение, прямо пропорциональное температуре: 10 милливольт на каждый градус Цельсия. При 25 градусах на выходе будет 250 мВ, при 30 — 300 мВ. Не нужны библиотеки, не нужен цифровой протокол. Одна строка кода analogRead() — и у вас есть температура. Это делает LM35 идеальным выбором для первого проекта с температурным датчиком.
Для школьного проекта подойдёт маленький вентилятор на 5V — его можно питать напрямую через реле без внешнего источника. Для мощного вентилятора или кулера от компьютера понадобится отдельное питание.
Датчик LM35 (3 вывода — если смотреть на плоскую сторону слева направо):
Модуль реле:
Вентилятор:
Если используете внешний источник питания, обязательно соедините его GND с GND Arduino.

```cpp
// Умный вентилятор на Arduino с датчиком LM35
// Включается автоматически при превышении пороговой температуры
// Пин аналогового входа для LM35
const int tempPin = A0;
// Пин управления реле
const int relayPin = 2;
// Пин встроенного светодиода (индикация)
const int ledPin = 13;
// Пороговая температура включения (градусы Цельсия)
const float tempOn = 28.0;
// Пороговая температура выключения (гистерезис)
const float tempOff = 26.0;
// Текущее состояние вентилятора
bool fanRunning = false;
void setup() {
// Настраиваем пины
pinMode(relayPin, OUTPUT);
pinMode(ledPin, OUTPUT);
// Всё выключено при старте
digitalWrite(relayPin, LOW);
digitalWrite(ledPin, LOW);
// Запускаем монитор порта
Serial.begin(9600);
Serial.println("=== Умный вентилятор ===");
Serial.print("Включение при: ");
Serial.print(tempOn);
Serial.println(" C");
Serial.print("Выключение при: ");
Serial.print(tempOff);
Serial.println(" C");
}
void loop() {
// Считываем значение с датчика LM35
int adcValue = analogRead(tempPin);
// Преобразуем в напряжение, затем в температуру
// АЦП Arduino: 1024 шага, опорное напряжение 5V
// Каждый шаг = 5000 мВ / 1024 = 4.88 мВ
// LM35 выдаёт 10 мВ на градус Цельсия
float voltage = adcValue * 4.88; // напряжение в мВ
float temperature = voltage / 10.0; // температура в °C
// Выводим данные в монитор порта
Serial.print("АЦП: ");
Serial.print(adcValue);
Serial.print(" | Напряжение: ");
Serial.print(voltage, 1);
Serial.print(" мВ | Температура: ");
Serial.print(temperature, 1);
Serial.print(" C | Вентилятор: ");
// Логика с гистерезисом
if (!fanRunning && temperature >= tempOn) {
// Температура поднялась выше порога — включаем
fanRunning = true;
digitalWrite(relayPin, HIGH);
digitalWrite(ledPin, HIGH);
Serial.println("ВКЛ");
} else if (fanRunning && temperature <= tempOff) {
// Температура опустилась ниже нижнего порога — выключаем
fanRunning = false;
digitalWrite(relayPin, LOW);
digitalWrite(ledPin, LOW);
Serial.println("ВЫКЛ");
} else {
Serial.println(fanRunning ? "ВКЛ" : "ВЫКЛ");
}
// Пауза 1 секунда между измерениями
delay(1000);
}
`
Преобразование АЦП в температуру. Это ключевой момент проекта. АЦП Arduino имеет 10-битное разрешение: 1024 шага на 5 вольт. Один шаг равен 5000/1024 = 4.88 мВ. Датчик LM35 выдаёт 10 мВ на каждый градус. Значит, формула простая: считываем значение АЦП, умножаем на 4.88 — получаем напряжение в милливольтах, делим на 10 — получаем температуру в градусах Цельсия.
Гистерезис. Если бы мы использовали один порог (например, 28 градусов), то при колебании температуры между 27.9 и 28.1 вентилятор постоянно включался и выключался бы каждую секунду. Это вредно для мотора и раздражает. Поэтому используются два порога: включение при 28, выключение при 26. Разница в 2 градуса обеспечивает стабильную работу. Этот же принцип применяется в домашних кондиционерах и холодильниках.
Реле. Модуль реле позволяет Arduino управлять устройствами, потребляющими значительно больший ток. Цифровой пин выдаёт сигнал 5V с током до 20 мА — этого хватает только для светодиода. Реле же может коммутировать нагрузку до 10 ампер. Когда Arduino подаёт HIGH на управляющий вход, электромагнит внутри реле замыкает контакты и пропускает ток к вентилятору.
Встроенный светодиод. Пин 13 на Arduino Uno имеет встроенный светодиод на плате. Мы используем его как индикатор состояния: горит — вентилятор работает, не горит — вентилятор выключен. Это удобно для отладки без подключения к компьютеру.
Этот проект наглядно объясняет принцип работы термостата. Начните урок с вопроса: «Как холодильник знает, когда включаться?» — и переходите к сборке. Предложите ученикам подобрать оптимальные пороги температуры для своего класса и записать показания в таблицу.
Для расширения проекта замените digitalWrite на analogWrite — ШИМ-сигнал позволит плавно регулировать скорость вентилятора в зависимости от того, насколько жарко. Добавьте LCD-дисплей для отображения текущей температуры. Подключите потенциометр к пину A1, чтобы пользователь мог регулировать пороговую температуру без перепрошивки кода.
На школьной выставке поставьте фен рядом с датчиком — зрители смогут нагреть LM35 и увидеть, как система реагирует. Это превращает демонстрацию в интерактивный эксперимент.
В Alashed Hardware можно собрать виртуальную схему с датчиком LM35 и реле, протестировать код до работы с реальными компонентами. CodeStudio позволяет ученикам писать Arduino-скетчи в браузере, а учитель видит код каждого ученика в реальном времени и может помочь с отладкой дистанционно.
Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.