AV 机柜风扇控制器
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 |
关于这个项目
我的 AV 接收器运行得非常热,所以我想在夏天炎热之前添加一个柜式风扇。起初我试图在接收器的外部找到一个 5-12v 的直流电源,它只有在接收器打开时才通电,但只能在接收器内部找到几个地方。我还想让风扇在接收器断电后运行一段时间,而为此确定电容器的尺寸开始变得棘手。
室温 75F,柜温 109F
我在亚马逊上查看了温控风扇,它们似乎都比我想象的要贵。它们都超过 30 美元,基本上只是一个风扇、温度探头和一个继电器……我查看了我的零件箱,已经有了所有这些东西。


首先,我为 2 美元的中国 Arduino Nano 写了一个小草图。添加了一个 DHT11 温度传感器和一个 5v 直流继电器,它的作用就像一个魅力。
快速原型
接下来,我必须找到一些旧的 PC 风扇,它们会以 5v 的电压旋转并移动空气,因为我希望整个设备都由旧的 USB 手机充电器供电。我发现两个 80mm 和一个 120mm 风扇在 5v 时仍能移动足够的 CFM 并保持在 200mA 以下,因此我切断了 Molex 连接并将它们连接为 USB。
面包板上的一切都在工作,所以我最终添加了一些状态 LED 和一个压电蜂鸣器,用于发出过热警报。这一切都非常适合我的一个小项目框。
贴身合身需要大量热胶以防止短裤



控制器通过启动 POST 来显示所有风扇、LED 和压电警报器都在工作
开机自检
Arduino 草图:
控制器获取 30 秒跨度内的平均温度。如果超过 95F,风扇会启动 5 分钟,然后再次检查。如果温度超过 120F,则在风扇继续运行的同时警报会响起。闹钟每 30 秒响一次,直到温度回到 120F 以下。
串行输出
实际上,风扇会在接收器打开后大约 2 分钟启动,并且会一直运行。关闭媒体中心电源后,风扇至少运行 5 分钟,然后温度才会降至 95F 以下。目前还没有触发过热报警。
如果我重新做这个项目,我会考虑用 ATtiny85 替换 Arduino Nano,用 MOSFET 替换继电器。这将是一个更小的外形尺寸,并且还允许我使用 PWM 来控制风扇速度。
代码
- 风扇温度控制器
FanTempControllerC/C++
Arduino 草图,使用来自 DHT11 传感器的平均温度读数通过继电器打开风扇。// A/V 机柜的温度控制器// 风扇由连接到 12v(计算机)或 5v 的 10A 继电器控制(USB) 风扇// 交替过热的压电警报 alertint FATEMP =95; // 风扇开启的高温 (90*F)int ALARMTEMP =120; // 过热温度 (120*F)int FANLED =2; // 风扇“开”引脚 LEDint TEMPOK =3; // 当温度低于 FANTEMPint ALARMLED =4 时的 LED; // 报警指示灯 int ALARMPIN =7; // 过热声音警报// DHTPIN =8; (定义如下)int FANPIN =9; // 风扇开关继电器#include "DHT.h" // 由ladyada 撰写,公共领域#define DHTPIN 8 // DHT 传感器// 取消注释您使用的任何类型!#define DHTTYPE DHT11 // DHT 11 //#定义 DHTTYPE DHT22 // DHT 22 (AM2302)//#define DHTTYPE DHT21 // DHT 21 (AM2301)// 为普通 16mhz ArduinoDHT dht(DHTPIN, DHTTYPE) 初始化 DHT 传感器;// 注意:为了使用更快的芯片,像 Arduino Due 或 Teensy,您// 可能需要增加被视为 1 或 0 的循环计数的阈值。// 您可以通过为此阈值传递第三个参数来实现。 // 找到正确的值有点麻烦,但通常 CPU 越快 // 值越高。 16mhz AVR 的默认值为 6。对于以 84mhz 运行的 // Arduino Due,值 30 有效。// 为 Arduino Due 初始化 DHT 传感器的示例://DHT dht(DHTPIN, DHTTYPE, 30);// 读数用于averageconst int numReadings =10;// 将变量设置为zerofloat avetemp =0;浮动温度=0;浮动检查延迟=0;无效设置(){ Serial.begin(9600); Serial.println("临时监控器启动"); dht.begin(); pinMode(FANPIN,OUTPUT); pinMode(ALARMPIN,OUTPUT); pinMode(报警,输出); pinMode(风扇LED,输出); pinMode(TEMPOK,输出);数字写入(FANPIN,高);数字写入(风扇LED,高);数字写入(报警,高);数字写入(TEMPOK,高); for(int x =0; x <5; x++){ // 测试闹铃音(ALARMPIN, 220 * x, 75);延迟(100); } Serial.print("风扇测试开始(5秒)"); for(int x =0; x <5; x++){ Serial.print(".");延迟(1000); Serial.println("完成");数字写入(扇针,低);数字写入(风扇LED,低);数字写入(警报,低);数字写入(TEMPOK,低);无音(闹钟); }void loop() { // 在测量之间等待几秒钟。延迟(2000);温度 =0; Serial.print("实时温度:\t"); for (int x =0; xALARMTEMP) { digitalWrite(ALARMLED, HIGH); Serial.print("温度已过"); Serial.print(ALARMTEMP); Serial.println(", 闹钟开启"); for(int x =0; x <3; x++){ // 发出警报 5 秒音 (ALARMPIN, 660, 1000); // 风扇应该已经从上一个循环开始运行,如果没有,它会在警报响起延迟(500)后立即启动;音调(闹钟, 440, 1000);延迟(500); } noTone(ALARMPIN);检查延迟 =30000; // 在再次循环之前将正常的 5 分钟延迟切换为 30 秒 } else { digitalWrite(ALARMLED,LOW); Serial.print("温度低于"); Serial.print(ALARMTEMP); Serial.println(", 闹钟已关闭");检查延迟 =300000; // 除非温度超过 120*F,否则风扇会在再次检查温度之前运行 5 分钟 }// 如果机柜温暖,则打开风扇 if (avetemp> FANTEMP) { digitalWrite(FANPIN, HIGH);数字写入(风扇LED,高);数字写入(TEMPOK,低); Serial.print("温度已过"); Serial.print(FANTEMP); Serial.print(", Fan is on (for "); Serial.print(checkdelay / 1000 / 60); Serial.println("minutes)");延迟(检查延迟); // 开启至少 5 分钟(除非警报响起,否则它会在 30 秒后循环) } else { digitalWrite(FANPIN,LOW);数字写入(风扇LED,低);数字写入(TEMPOK,高); Serial.print("温度低于"); Serial.print(FANTEMP); Serial.println(", 风扇关闭"); // 当风扇关闭时,每 30 秒读取一次 Temp } Serial.println(); Serial.println(); }
示意图

制造工艺