Slimme AV Kast Ventilator Controller – Arduino Nano, DHT11 en Relais voor Optimale Koeling
Onderdelen en Benodigdheden
| Arduino Nano R3 | × | 1 |
| DHT11 Temperatuur & Vochtigheid Sensor (4 pinnen) | × | 1 |
| 5V DC Relais Module | × | 1 |
Over dit Project
Mijn AV-versterker liep erg heet, dus wilde ik een kastventilator toevoegen voor de zomerhitte. Ik kon geen 5-12V DC bron vinden die alleen actief is wanneer de versterker aanstaat, en condensators voor uittraag waren lastig. Kant-en-klare temperatuurgecontroleerde ventilatoren waren duur ($30+), terwijl ik alle onderdelen al had.
Ik schreef een sketch voor een $2 Arduino Nano, voegde een DHT11 sensor en 5V relais toe – het werkte perfect. Vervolgens zochte ik oude PC-ventilatoren die op 5V (via USB-lader) voldoende lucht verplaatsen. Twee 80mm en een 120mm voldeden. Ik voegde status LEDs en een piezo buzzer toe voor oververhitting alarm. Alles past in een klein projectdoosje.
LED Status: Linksboven = voeding (groen); Linksonder = temp OK (groen); Midden = ventilatoren aan (oranje); Rechts = oververhitting (rood).
De controller doet een Power-On Self Test (POST) bij opstart.
Werking
De controller neemt het gemiddelde van 10 metingen over 30 seconden. Boven 35°C (95°F) gaan de ventilatoren 5 minuten aan. Boven 49°C (120°F) activeert het alarm (elke 30 seconden herhalen tot temperatuur daalt). In de praktijk starten de ventilatoren ~2 minuten na aanzetten versterker en draaien zolang deze aanstaat. Na uitschakelen lopen ze nog minimaal 5 minuten na.
Verbeterpunt: Vervang Nano door ATtiny85 en relais door MOSFET voor kleinere vormfactor en PWM-snelheidsregeling.
Code
// Temperatuurcontroller voor A/V Kast
// Ventilator via 10A relais (12V PC of 5V USB ventilator)
// Piezo alarm voor oververhitting
int FANTEMP = 95; // In °F (35°C)
int ALARMTEMP = 120; // In °F (49°C)
int FANLED = 2;
int TEMPOK = 3;
int ALARMLED = 4;
int ALARMPIN = 7;
#define DHTPIN 8
int FANPIN = 9;
#include "DHT.h"
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int numReadings = 10;
float avetemp = 0;
float temp = 0;
float checkdelay = 0;
void setup() {
Serial.begin(9600);
Serial.println("Temp Monitor Started");
dht.begin();
pinMode(FANPIN, OUTPUT);
pinMode(ALARMPIN, OUTPUT);
pinMode(ALARMLED, OUTPUT);
pinMode(FANLED, OUTPUT);
pinMode(TEMPOK, OUTPUT);
// Alle outputs HIGH = uit (relais is active-low)
digitalWrite(FANPIN, HIGH);
digitalWrite(FANLED, HIGH);
digitalWrite(ALARMLED, HIGH);
digitalWrite(TEMPOK, HIGH);
// POST: Alarm test
for (int x = 0; x < 5; x++) {
tone(ALARMPIN, 220 * x, 75);
delay(100);
}
Serial.print("Fan Test Started (5 Seconds) ");
for (int x = 0; x < 5; x++) {
Serial.print(".");
delay(1000);
}
Serial.println("Done");
digitalWrite(FANPIN, LOW);
digitalWrite(FANLED, LOW);
digitalWrite(ALARMLED, LOW);
digitalWrite(TEMPOK, LOW);
noTone(ALARMPIN);
}
void loop() {
delay(2000);
temp = 0;
Serial.print("Realtime Temp: \t");
for (int x = 0; x < numReadings; x++) {
float f = dht.readTemperature(true); // Fahrenheit
Serial.print(f); Serial.print("\t");
temp += f;
delay(3000);
}
Serial.println();
avetemp = temp / numReadings;
Serial.print("Average Temp is "); Serial.println(avetemp);
if (isnan(temp)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Alarm controle
if (avetemp > ALARMTEMP) {
digitalWrite(ALARMLED, HIGH);
Serial.print("Temperature over "); Serial.print(ALARMTEMP); Serial.println(", Alarm ON");
for (int x = 0; x < 3; x++) {
tone(ALARMPIN, 660, 1000); delay(500);
tone(ALARMPIN, 440, 1000); delay(500);
}
noTone(ALARMPIN);
checkdelay = 30000; // 30 seconden bij alarm
} else {
digitalWrite(ALARMLED, LOW);
Serial.print("Temperature under "); Serial.print(ALARMTEMP); Serial.println(", Alarm OFF");
checkdelay = 300000; // 5 minuten normaal
}
// Ventilator controle
if (avetemp > FANTEMP) {
digitalWrite(FANPIN, HIGH);
digitalWrite(FANLED, HIGH);
digitalWrite(TEMPOK, LOW);
Serial.print("Temp over "); Serial.print(FANTEMP);
Serial.print(", Fan ON voor "); Serial.print(checkdelay / 1000 / 60); Serial.println(" minuten");
delay(checkdelay);
} else {
digitalWrite(FANPIN, LOW);
digitalWrite(FANLED, LOW);
digitalWrite(TEMPOK, HIGH);
Serial.print("Temp under "); Serial.print(FANTEMP); Serial.println(", Fan OFF");
}
Serial.println(); Serial.println();
}
Schema
Schema-afbeelding beschikbaar in de originele projectdocumentatie.
Productieproces
- Ventilatortrilling Elimineren: Praktische On-Site Wichtoplossing
- Archiefkast: Ontwerp, Productie en Modern Gebruik
- Temperatuur-gecontroleerde Ventilator: DIY Relais Systeem Voor Media Kast Koeling
- Web-gestuurd DMX-verlichtingssysteem – Arduino Master Controller
- Geautomatiseerde Gaming Assistant: Slimme taak-automatisering voor gamers
- DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
- Unopad: Naadloze Arduino MIDI-controller voor Ableton Live
- Arduino-gebaseerde Vacuum Fluorescent Display (VFD) Controller Kit
- Alexa-ingeschakelde Arduino Thuiscontroller: Slimme Automatisering Made Simple
- Bouw Je Eigen MK2 Plus Robotarm Controller
- PWM Vermogenscontroller: Bouw een Pulsbreedte Gemoduleerde Lampstuur