You could go super simple, and use a basic fan switch that simply will turn on a fan at a certain coolant temp (Temp predetermined by the switch manufacturer).
Or you can go with a fan controller. These tend to allow adjustment to when the fan(s) come on. They get fancier with multiple fan (independent), and even variable speed controls. The problem, the cheap ones are well cheaply made and tend to have bad reviews. The good ones cost more than the fans themselves.
Then there is the DIY option, which is my favorite, because I get to be cheap and have all the options, and well its more fun.
The idea is to use an Arduino (https://www.arduino.cc/); have it read two different temperature sensors; and based off those temperature readings turn on and vary the speed of the fans (two in this case).
Hardware is all pretty basic:
Arduino Board, Currently using a Uno R3.
Some resistors (10K ohm)
Diodes, in case of any backwards spin of the fans (dont want any reverse current)
aMOSFET, this is like a relay that can be turned on and off way faster and barely require any current to do so.
Fans (of your choice)
Temperature Sensors.
I dont currently have a temperature sensor, and I havent hooked up a full size automotive fan, but I do have trial done with a potentiometer and a computer fan.
The code the Arduino runs on:
Code: Select all
int tempPin = A1; // Temp Sensor
int fan = 10; // The output pin for the Fan
int led = 13; // led pin
int temp;
int tempMin = 900; // the temperature to start the fan
int tempMax = 60; // the maximum temperature when fan is at 100%
int fanSpeed;
void setup() {
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(tempPin, INPUT);
}
void loop() {
temp = readTemp(); // get the temperature
if(temp > tempMin) { // if temp is lower than minimum temp
fanSpeed = 0; // fan is not spinning
digitalWrite(fan, LOW);
}
if((temp <= tempMin) && (temp >= tempMax)) { // if temperature is higher than minimum temp
fanSpeed = map(temp, tempMin, tempMax, 32, 255); // the actual speed of fan
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);
}
}
int readTemp() { // get the temperature
temp = analogRead(tempPin);
return temp;
}
Ill update about the circuit later.