Управление скоростью вращения компьютерного вентилятора через arduino
Применение
Там где надо поддерживать определенные условия, например влажность или температуру, чтобы не пересушить или не переохладить/перегреть что либо. А так же для снижения шума и экономии электроэнергии.
Что потребуется:
- arduino (любая, в примере arduino pro mini)
- Компьютерный вентилятор 12В
- Датчик DS18B20
- Резисторы 1k; 4.7k;
- Диод: 1N4007
- Транзистор: BD139 (аналог КТ815Г)
- Электр.конденсатор 100мкФ 16В.
Подключение
Цоколевка КТ815 в корпусе ТО-220
Диод 1N4007
Скетч
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int tempPin = ONE_WIRE_BUS; // выход LM35
int fan = 11; // вывод на вентилятор
int temp;
int tempMin = 28; // температура начала вращения вентилятора
int tempMax = 35; // максимальная температура, когда вентилятор вращается на 100%
int fanSpeed;
void setup() {
pinMode(fan, OUTPUT);
Serial.begin(9600);
sensors.begin();
pinMode(tempPin, INPUT);
}
void loop() {
temp = readTemp(); // получаем температуру
if(temp < tempMin) { // если temp меньше минимума
fanSpeed = 0; // кулер не вращается
digitalWrite(fan, LOW);
}
if((temp >= tempMin) && (temp <= tempMax)) { // если temp больше минимума
fanSpeed = map(temp, tempMin, tempMax, 0, 255); // текущая скорость вентилятора
analogWrite(fan, fanSpeed); // вращаем кулер со скоростью fanSpeed
}
Serial.print("TEMP: ");
Serial.print(temp); // отображение температуры
lcd.print("C ");
delay(1000);
}
int readTemp() { // получить температуру и переконвертировать ее в цельсии
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
return temp * 0.48828125;
}
Источник: http://digitrode.ru/computing-devices/mcu_cpu/139-upravlyaem-ventilyatorom-s-pomoschyu-arduino.html |