RaspberryPiで扇風機の制御をするシステムを作りました。
以前にラジコンまで作っておいて(【改良版】 RaspberryPiで作ったカメラ付き戦車ラジコン)、今さら扇風機の制御とは地味な感じもしますが、作った理由があります。
私はRaspberryPiにWi-Fiドングルを付けて無線で弄っているのですが、このWi-Fiドングル、何故かすぐ熱くなってしまうんですね。その熱が原因でPiが落ちてしまうことがあります。
そこで、RaspberryPi自動冷却システムを作ろうと思いました。冷却用装置として小型USB扇風機を使うわけです。
自動冷却システム自体はまだ出来ていないんですが、とりあえず扇風機の制御の部分は完成しました。
制御の様子
とりあえずまず実際に動いている様子を掲載します。
パソコンとRasPi・扇風機・制御回路はつながっていません。
スマホからなどでも制御できます。スマホで動画撮影するから、スマホで動かすところを動画撮れなかった。
使用機器
- RaspberryPi Type B+
- USB扇風機 Mini Fan(定格:電力2.5[W] 電圧5.0[V] 電流500[mA])
制御回路
トランジスタと抵抗だけで構成しました。とりあえず回路図を示します。
この回路は、Vrasp(RaspberryPiのGPIO信号)が5[V]入力されているときに扇風機はONとなります。
RaspberryPiのGPIOピンは数mA~10数mAまでしか出力しないようなので、2段階に増幅しています(しかしよく考えてみると、hfe=100と仮定しても、5[mA]あればいいのだから普通に1段階で済んだ)。
普段学校で使っていたトランジスタ2SC1815は最大コレクタ電流が150[mA]なので、今回は扇風機部分には不適です。扇風機部分には、2SC2120(最大コレクタ電流800[mA])を使いました。
RaspberryPiと電源のGNDをつなぎ忘れていて回路が動作しなかったので、それに数分ほど悩んだりしました。
プログラム
ラジコンのときと同じように、JavaScriptとPHPで作りました。以下、ソース。
JavaScript
$(function(){ var state=; //読み込み時の扇風機の状態 0/1 var states=["OFF", "ON"]; $("#switch").click(function(){ //ボタンクリック時 $.post("switch.php", {}, function(ret){ if (ret=="SUCCESS"){ if (state) state=0; else state=1; $("#state").html(states[state]); } else { alert("エラー"); } }); }); });
PHP(JavaScriptよりajaxで呼び出されるswitch.php)
exec("gpio -g mode 21 out"); $state=exec("gpio -g read 21"); if ($state) $state=0; else $state=1; exec("gpio -g write 21 ".$state); if ($state == exec("gpio -g read 21")) exit("SUCCESS"); else exit("ERROR");
自動冷却システムにするには
とりあえずこうして扇風機の制御は可能になりました。あとは温度に応じて扇風機をONにさせるだけです。
「RaspberryPiの温度を取得してそれを基準値と比較して高かったら扇風機ON」ってプログラムを書き、これをcron設定すればいいだけです。しかしそこは色々調べなきゃいけないので、また今度ということにします。
終わり。