Все статьиHardware

Умный вентилятор на Arduino с датчиком температуры LM35

БА
Бексултан Айтен
CTO, Alashed
8 мая 2025 г.
8 мин чтения
Умный вентилятор на Arduino с датчиком температуры LM35

Собираем автоматический вентилятор на Arduino с датчиком температуры LM35 и реле. Вентилятор включается при превышении заданной температуры. Полный код, схема и объяснение.

Идея проекта

В жаркий день хочется, чтобы вентилятор включался сам, без нашего вмешательства. Именно такую систему мы соберём: датчик температуры LM35 непрерывно измеряет окружающую температуру, Arduino сравнивает показания с заданным порогом, и при его превышении включает вентилятор через реле. Когда температура падает — вентилятор выключается.

Это классический проект термостата. Он демонстрирует аналоговое чтение датчика, преобразование сигнала в физическую величину, принятие решений в коде и управление мощной нагрузкой. Подходит для учеников 7-9 классов. Сборка занимает 1-1.5 часа.

Собранный умный вентилятор на Arduino с датчиком температуры
Собранный умный вентилятор на Arduino с датчиком температуры

Почему LM35

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

Список компонентов

  • Arduino Uno — 1 шт.
  • Датчик температуры LM35 — 1 шт.
  • Модуль реле 5V (одноканальный) — 1 шт.
  • Вентилятор 5V постоянного тока (или мотор с пропеллером) — 1 шт.
  • Макетная плата — 1 шт.
  • Соединительные провода — 10 шт.
  • USB-кабель для программирования
  • Внешний блок питания 5V (если вентилятор потребляет больше 200 мА)

Для школьного проекта подойдёт маленький вентилятор на 5V — его можно питать напрямую через реле без внешнего источника. Для мощного вентилятора или кулера от компьютера понадобится отдельное питание.

Схема подключения

Датчик LM35 (3 вывода — если смотреть на плоскую сторону слева направо):

  • Левый вывод (VCC) — к 5V Arduino
  • Средний вывод (OUT) — к аналоговому пину A0 Arduino
  • Правый вывод (GND) — к GND Arduino

Модуль реле:

  • VCC — к 5V Arduino
  • GND — к GND Arduino
  • IN (управляющий вход) — к цифровому пину D2 Arduino

Вентилятор:

  • Подключается через контакты COM и NO (нормально разомкнутые) реле
  • Плюс вентилятора — к COM реле
  • Плюс источника питания — к NO реле (или к 5V Arduino для маленьких вентиляторов)
  • Минус вентилятора — к GND

Если используете внешний источник питания, обязательно соедините его GND с GND Arduino.

Схема подключения вентилятора с LM35 и реле к Arduino
Схема подключения вентилятора с LM35 и реле к 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 помогает

В Alashed Hardware можно собрать виртуальную схему с датчиком LM35 и реле, протестировать код до работы с реальными компонентами. CodeStudio позволяет ученикам писать Arduino-скетчи в браузере, а учитель видит код каждого ученика в реальном времени и может помочь с отладкой дистанционно.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо