Вентиляторы, применяемые для охлаждения электроники, бывают двух видов. Одни - миниатюрные, их направляют непосредственно на охлаждаемые компоненты, другие - крупнее, они прогоняют воздух через всё пространство корпуса. Лучше всего, когда оба вида вентиляторов применяются совместно. Нередко вентиляторы второго вида постоянно "молотят" на полную мощность, даже если в этом нет необходимости. 

 

 

Схема устройства:

   От этого быстрее изнашивается подшипник, а пользователю мешает слишком сильный шум. Простейший контактный термостат может включать и выключать вентилятор, ресурс подшипника при этом расходуется лишь при работе двигателя, но резко появляющийся и исчезающий шум может раздражать ещё больше. Более сложный термостат - например, предложенный автором 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:

Собрав прототип, мастер испытывает его. Температура отображается в градусах Цельсия, действующее значение напряжения на вентиляторе - в процентах от максимума.