RaspberryPi‎ > ‎

ファンコントローラ

サーバーに使うなど、安定稼働のためにはRaspberryPiにファンは必須です。
しかし、常時ファンが稼動しているのはうるさいので、スクリプトでコントロールしましょう。

面倒なので、PWMではなく単純なON-OFF制御としました。
トランジスタを使った駆動回路が必要です。
(本来は逆起電力防止ダイオードが必要かもしれません)

製作例。
今回使用したファンが、5VDC 50mAで駆動するファンなので、1815を使用しました。

スクリプトはこんな感じです。(25番にトランジスタのベースを接続しています。)
#!/usr/local/bin/perl

open(IN, "/sys/class/thermal/thermal_zone0/temp");
$cputemp = <IN>/1000.0; #numbers
close(IN);
$cputempavg = $cputemp;

system("echo 25 > /sys/class/gpio/export");
system("echo out > /sys/class/gpio/gpio25/direction");
system("echo 1 > /sys/class/gpio/gpio25/value");
$fan_run = 1;

while(1)
{
	open(IN, "/sys/class/thermal/thermal_zone0/temp");
	$cputemp = <IN>/1000.0; #numbers
	close(IN);
	
	$cputempavg = $cputempavg*0.9 + $cputemp*0.1;

	if($cputempavg > 48)
	{
		$fan_run = 1;
	}
	if($cputempavg < 42)
	{
		$fan_run = 0;
	}	

	if($fan_run != 0)
	{
		system("echo 1 > /sys/class/gpio/gpio25/value");
	}else{
		system("echo 0 > /sys/class/gpio/gpio25/value");
	}
	sleep(1);
}

fan_runによってシュミットトリガ状態にし、ファンのバタつきを抑えています。
このスクリプトだと48度を超えるとファンが回り始め、42度以下でファンが停止します。

お気づきかもしれませんが、CPUisTooHotやCPUTempMonとこのスクリプトは、元々1つのスクリプトです。
Comments