🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🌀 Проект: плавная регулировка скорости вентилятора по температуре

Датчик DS18B20, MOSFET IRF520 и вентилятор

DS18B20 и MOSFET-модуль IRF520 плавно меняют скорость вентилятора через ШИМ, без резких рывков реле.

Как это работает

Обычное реле умеет только включать и выключать вентилятор целиком — скорость либо 0%, либо 100%, с рывком при каждом переключении. MOSFET-модуль IRF520, в отличие от реле, можно переключать очень быстро через `analogWrite()` (ШИМ — широтно-импульсная модуляция): управляющий сигнал на самом деле быстро мигает включено/выключено, а соотношение "включено" к общему периоду (duty cycle, 0-255) определяет среднюю мощность на вентиляторе — вентилятор физически не успевает реагировать на отдельные импульсы и крутится с плавно управляемой скоростью.

`map()` линейно переводит текущую температуру из диапазона `minTemp`...`maxTemp` в диапазон скорости 0...255, а `constrain()` обрезает температуру, если она выходит за эти границы — без него `map()` мог бы выдать значение скорости больше 255 или отрицательное при выходе температуры за заданные пределы.

Пошаговая сборка

Так как реализации модуля бывают разные, если контактов как в примере нет на вашей плате — сориентируйтесь по надписям на своей.

  1. DS18B20: сигнал → D2, резистор 4.7 кОм между сигналом и питанием.
  2. MOSFET IRF520: сигнал → обязательно ШИМ-пин с "волной" (~) рядом с номером — на Uno/Nano это D3, D5, D6, D9, D10, D11.
  3. Подключите вентилятор через MOSFET согласно схеме модуля, общий минус вентилятора и Arduino должны быть соединены.
  4. Подберите `minTemp`/`maxTemp` под комфортный для вас диапазон регулировки.

Скетч

// ВНИМАНИЕ: отладьте через монитор порта — я языковая модель, а не
// специализированный кодер, основу накидал, проверьте под свою схему.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
const int pwmPin = 9; // обязательно ШИМ-способный пин (с ~ на платах Uno/Nano)
const float minTemp = 22.0;
const float maxTemp = 35.0;

void setup() {
  Serial.begin(9600);
  sensors.begin();
  pinMode(pwmPin, OUTPUT);
}

void loop() {
  sensors.requestTemperatures();
  float t = sensors.getTempCByIndex(0);
  if (t == -127.0) { // стандартный код ошибки DallasTemperature при обрыве связи с датчиком
    Serial.println("Ошибка чтения DS18B20");
    return;
  }
  int speed = map(constrain(t, minTemp, maxTemp), minTemp, maxTemp, 0, 255);
  analogWrite(pwmPin, speed);
  delay(2000);
}
                

Ниже `minTemp` вентилятор выключен, выше `maxTemp` крутится на полную — между ними скорость растёт плавно.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 💡 автовключение фитосвета по дат…🚿 двухзонный автополив по датчик… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 155 ₽ 140 ₽ (экономия 15 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA