Вентиляторы, применяемые для охлаждения электроники, бывают двух видов. Одни - миниатюрные, их направляют непосредственно на охлаждаемые компоненты, другие - крупнее, они прогоняют воздух через всё пространство корпуса. Лучше всего, когда оба вида вентиляторов применяются совместно. Нередко вентиляторы второго вида постоянно "молотят" на полную мощность, даже если в этом нет необходимости.
Схема устройства:
От этого быстрее изнашивается подшипник, а пользователю мешает слишком сильный шум. Простейший контактный термостат может включать и выключать вентилятор, ресурс подшипника при этом расходуется лишь при работе двигателя, но резко появляющийся и исчезающий шум может раздражать ещё больше. Более сложный термостат - например, предложенный автором Instructables под ником AntoBesline - регулирует частоту вращения двигателя вентилятора ШИМом и поддерживает её необходимой и достаточной для достижения заданной температуры. Прогонять воздух через пространство корпуса целесообразно снизу вверх, а располагать датчик температуры - сверху. Можно также установить фильтры, предотвращающие попадание в корпус пыли, но они снизят производительность.
Датчик температуры и влажности типа DHT11 подходит как раз для термостата, управляющего вентилятором второго вида, так как измеряет он температуру именно воздуха, а не какой-либо поверхности.
Если необходимо оборудовать термостатом вентилятор первого вида, придётся применить другой датчик, измеряющий температуру поверхности охлаждаемого компонента. Программу тогда придётся переделать, а библиотеки потребуются другие, ведь у датчика может отличаться как интерфейс, так и структура передаваемых им данных.
При помощи следующей иллюстрации мастер показывает, что такое ШИМ, большинству читателей это и так известно. За счёт того, что выходной транзистор всегда либо полностью закрыт, либо полностью открыт, на нём всегда выделяется очень малая мощность. Как известно, мощность равна произведению тока на напряжение, а тут при закрытом транзисторе очень мал ток, а при открытом - мало падение напряжения на нём. Один из двух множителей всегда оказывается малым, а значит, и их произведение - тоже. Практически вся мощность в ШИМ-регуляторе достаётся нагрузке, а не транзистору.
Здесь питается от 5-вольтового источника, вентилятор - от 12-вольтового. Если применить 5-вольтовый вентилятор, можно обойтись одним источником с достаточной нагрузочной способностью, запитав Arduino через простейший LC-фильтр. Диод, подключённый параллельно вентилятору в обратном направлении, нужен, если двигатель - коллекторный (как в некоторых современных USB-вентиляторах). При применении компьютерного вентилятора с датчиком Холла и электронным управлением обмотками этот диод необязателен.
Текст составленной мастером программы довольно короткий, он приведён ниже:
#include "DHT.h"
#define dht_apin A1
#include
LiquidCrystal lcd(7,6,5,4,3,2);
DHT dht(dht_apin, DHT11);
int fan = 11;
int led = 8;
int temp;
int tempMin = 30;
int tempMax = 60;
int fanSpeed;
int fanLCD;
void setup()
{
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
lcd.begin(16, 2);
dht.begin();
lcd.print("Room Temp Based");
lcd.setCursor(0, 1);
lcd.print("Fan speed Ctrl ");
delay(3000);
lcd.clear();
}
void loop()
{
float temperat;
temperat=dht.readTemperature();
temp = temperat; // store the temperature value in temp variable
Serial.print( temp );
if(temp < tempMin) // if temp is lower than minimum temp
{
fanSpeed = 0; // fan is not spinning
analogWrite(fan, fanSpeed);
fanLCD=0;
digitalWrite(fan, LOW);
}
if((temp >= tempMin) && (temp <= tempMax)) // if temperature is higher than minimum temp
{
fanSpeed = temp;//map(temp, tempMin, tempMax, 0, 100); // the actual speed of fan//map(temp, tempMin, tempMax, 32, 255);
fanSpeed=1.5*fanSpeed;
fanLCD = map(temp, tempMin, tempMax, 0, 100); // speed of fan to display on LCD100
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
}
if(temp > tempMax) // if temp is higher than tempMax
{
digitalWrite(led, HIGH); // turn on led
}
else // else turn of led
{
digitalWrite(led, LOW);
}
lcd.print("TEMP: ");
lcd.print(temp); // display the temperature
lcd.print("C ");
lcd.setCursor(0,1); // move cursor to next line
lcd.print("FANS: ");
lcd.print(fanLCD); // display the fan speed
lcd.print("%");
delay(200);
lcd.clear();
}
Так же выкладываю вам файл
На следующих фото показана сборка прототипа устройства на пакетной плате типа breadboard:
Собрав прототип, мастер испытывает его. Температура отображается в градусах Цельсия, действующее значение напряжения на вентиляторе - в процентах от максимума.