AVキャビネットファンコントローラー
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
このプロジェクトについて
私のAV受信機はとても暑かったので、夏の暑さの前にキャビネットファンを追加したかったのです。最初は、受信機の電源が入っているときにのみ電源が入る、受信機の外側にある5〜12vのDC電源を見つけようとしましたが、受信機の内側のいくつかの場所しか見つかりませんでした。また、受信機の電源を切った後もしばらくの間ファンを動かして欲しかったのですが、そのためのコンデンサのサイズ設定が難しくなり始めていました。
室温75F、キャビネット温度109F <図>
私はアマゾンで温度制御されたファンを見ました、そしてそれらはすべて私が思っていたよりも高価であるように見えました。それらはすべて30ドルを超えていて、基本的にはファン、温度プローブ、リレーだけでした...私は自分の部品箱を調べて、すでにすべてのものを持っていました。
最初に、2ドルの中国のArduinoNanoの小さなスケッチを書きました。 DHT11温度センサーと5vDCリレーを追加し、それは魅力のように機能しました。
クイックプロトタイプ<図>次に、すべてを古いUSB電話充電器で駆動したかったので、5Vで回転して空気を動かす古いPCファンを見つける必要がありました。 2つの80mmファンと1つの120mmファンが、5vで十分なCFMを動かし、200mA未満にとどまっているのを見つけたので、molex接続を切断し、USBとして配線しました。
すべてがブレッドボードで機能していたので、過熱アラーム用にいくつかのステータスLEDとピエゾブザーを追加することになりました。それはすべて、私が持っていた小さなプロジェクトボックスにうまく収まりました。
ぴったりとフィットするには、ショートを防ぐためにたくさんのホットグルーが必要です<図> 素晴らしくコンパクトで、他のAVギアと調和します<図> <図> ステータスLED:左上=電源(緑);左下=temp OK(緑);真ん中=ファン(オレンジ);右=過熱(赤)<図>コントローラは起動POSTを実行して、すべてのファン、LED、およびピエゾアラームが機能していることを示します
パワーオンセルフテスト
Arduinoスケッチ:
コントローラは、30秒間の平均温度を取得します。 95Fを超える場合は、ファンが5分間作動してから、再度チェックします。温度が120Fを超えると、ファンが作動し続けている間、アラームが鳴ります。温度が120F未満に戻るまで、アラームは30秒ごとに鳴ります。
シリアル出力<図>実際には、ファンはレシーバーがオンになってから約2分後に起動し、オンになっている間ずっと動作します。メディアセンターの電源を切った後、温度が95Fを下回る前に、ファンは少なくとも5分間動作します。これまでのところ、過熱アラームはトリガーされていません。
このプロジェクトをやり直す場合は、Arduino NanoをATtiny85に、リレーをMOSFETに置き換えることを検討します。これははるかに小さいフォームファクタであり、PWMを使用してファンの速度を制御することもできます。
コード
- FanTempController
FanTempController C / C ++
DHT11センサーからの平均温度読み取り値を使用してリレーを介してファンをオンにするArduinoスケッチ。// A / Vキャビネットの温度コントローラー//ファンは12v(コンピューター)または5vに接続された10Aリレーによって制御されます(USB)ファン//代替過熱アラートのピエゾアラームint FANTEMP =95; //ファンがオンになる高温(90 * F)int ALARMTEMP =120; //過熱温度(120 * F)int FANLED =2; //ファンを「オン」にするためのピンLEDintTEMPOK =3; //温度がFANTEMPintALARMLED =4未満の場合のLED; //アラームLEDint ALARMPIN =7; //過熱の可聴アラーム// DHTPIN =8; (以下に定義)int FANPIN =9; //ファンスイッチのリレー#include "DHT.h" // ladyada、public domain#define DHTPIN 8 // DHT Sensor //使用しているタイプのコメントを解除します!#defineDHTTYPE DHT11 // DHT 11 //# define DHTTYPE DHT22 // DHT 22(AM2302)//#define DHTTYPE DHT21 // DHT 21(AM2301)//通常の16MHzのDHTセンサーを初期化ArduinoDHT dht(DHTPIN、DHTTYPE); //注:より高速なチップで作業する場合は、 Arduino DueやTeensyのように、1または0と見なされるサイクルカウントのしきい値を増やす必要がある場合があります。//このしきい値の3番目のパラメーターを渡すことでこれを行うことができます。適切な値を見つけるのは少し面倒ですが、一般的にCPUが高速であるほど、値は高くなります。 16mhzAVRのデフォルトは6の値です。//84mhzで動作するArduinoDueの場合、30の値が機能します。; // averageconst int numReadings =10に使用される読み取り値; //変数をzerofloatavetemp =0に設定します; float temp =0; float checkdelay =0; void setup(){Serial.begin(9600); Serial.println( "温度モニターが開始されました"); dht.begin(); pinMode(FANPIN、OUTPUT); pinMode(ALARMPIN、OUTPUT); pinMode(ALARMLED、OUTPUT); pinMode(FANLED、OUTPUT); pinMode(TEMPOK、OUTPUT); digitalWrite(FANPIN、HIGH); digitalWrite(FANLED、HIGH); digitalWrite(ALARMLED、HIGH); digitalWrite(TEMPOK、HIGH); for(int x =0; x <5; x ++){//アラーム音をテストする(ALARMPIN、220 * x、75); delay(100); } Serial.print( "ファンテスト開始(5秒)"); 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( "リアルタイム温度:\ t"); for(int x =0; xALARMTEMP){digitalWrite(ALARMLED、HIGH); Serial.print( "温度が終了しました"); Serial.print(ALARMTEMP); Serial.println( "、アラームがオンです"); for(int x =0; x <3; x ++){//アラームを5秒間鳴らしますtone(ALARMPIN、660、1000); //ファンは最後のループからすでに実行されているはずです。そうでない場合は、アラームが鳴った直後に開始されますdelay(500);トーン(ALARMPIN、440、1000); delay(500); } noTone(ALARMPIN); checkdelay =30000; //通常の5分の遅延を30秒に切り替えてから、ループを再度実行します} else {digitalWrite(ALARMLED、LOW); Serial.print( "温度は下にあります"); Serial.print(ALARMTEMP); Serial.println( "、アラームはオフです"); checkdelay =300000; //温度が120 * Fを超えない限り、ファンは5分間作動してから、温度が再度チェックされます} //キャビネットが温かい場合はファンをオンにしますif(avetemp> FANTEMP){digitalWrite(FANPIN、HIGH); digitalWrite(FANLED、HIGH); digitalWrite(TEMPOK、LOW); Serial.print( "温度が終了しました"); Serial.print(FANTEMP); Serial.print( "、ファンがオンになっています("); Serial.print(checkdelay / 1000/60); Serial.println( "minutes)"); delay(checkdelay); //最低5分間オンにします(アラームが鳴らない限り、30秒後にループします)} else {digitalWrite(FANPIN、LOW); digitalWrite(FANLED、LOW); digitalWrite(TEMPOK、HIGH); Serial.print( "温度は下にあります"); Serial.print(FANTEMP); Serial.println( "、ファンがオフです"); //ファンがオフの場合、Tempは30秒ごとに読み取られます} Serial.println(); Serial.println(); }
回路図
製造プロセス