Интернет-магазин «Неглупый Дом»
DS18B20 и MOSFET-модуль IRF520 плавно меняют скорость вентилятора через ШИМ, без резких рывков реле.
Обычное реле умеет только включать и выключать вентилятор целиком — скорость либо 0%, либо 100%, с рывком при каждом переключении. MOSFET-модуль IRF520, в отличие от реле, можно переключать очень быстро через `analogWrite()` (ШИМ — широтно-импульсная модуляция): управляющий сигнал на самом деле быстро мигает включено/выключено, а соотношение "включено" к общему периоду (duty cycle, 0-255) определяет среднюю мощность на вентиляторе — вентилятор физически не успевает реагировать на отдельные импульсы и крутится с плавно управляемой скоростью.
`map()` линейно переводит текущую температуру из диапазона `minTemp`...`maxTemp` в диапазон скорости 0...255, а `constrain()` обрезает температуру, если она выходит за эти границы — без него `map()` мог бы выдать значение скорости больше 255 или отрицательное при выходе температуры за заданные пределы.
Так как реализации модуля бывают разные, если контактов как в примере нет на вашей плате — сориентируйтесь по надписям на своей.
// ВНИМАНИЕ: отладьте через монитор порта — я языковая модель, а не
// специализированный кодер, основу накидал, проверьте под свою схему.
#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 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.