ハードとの関係
ファンのON/OFFを行うためには,下の回路図の「トランジスタ(2SC1815)」のベースに入る線を制御する必要があります.下の図を見てもらうとわかるように,GPIOの19番ピンにつないでいます.
ピン位置
GPIOの19番の場所は以下の図の通りで,USBポートの近い位置の内側.
微妙に中途半端な場所なのは,ユニバーサル基板上に回路を作った関係上,トランジスタのベースの位置が一番落ち着く場所だったからです.
というわけで,ファンを制御するプログラムは,GPIOの19番ポートを制御すれば良いことになります.
ファンのテストプログラム
ファンをONするプログラム
#!/bin/sh echo 19 >/sys/class/gpio/export echo out >/sys/class/gpio/gpio19/direction echo 1 > /sys/class/gpio/gpio19/value
ファンをOFFするプログラム
#!/bin/sh echo 19 >/sys/class/gpio/export echo out >/sys/class/gpio/gpio19/direction echo 0 > /sys/class/gpio/gpio19/value
制御プログラム本体
#!/usr/bin/perl use Switch; open(IN, "/sys/class/thermal/thermal_zone0/temp"); $cputemp =/1000.0; #numbers close(IN); $cputempavg = $cputemp; system("echo 19 > /sys/class/gpio/export"); system("echo out > /sys/class/gpio/gpio19/direction"); system("echo 1 > /sys/class/gpio/gpio19/value"); $fan_run = 1; while(1) { open(IN, "/sys/class/thermal/thermal_zone0/temp"); $cputemp = /1000.0; #numbers close(IN); $cputempavg = $cputempavg*0.9 + $cputemp*0.1; if($cputempavg > 45) { $fan_run = 1; } if($cputempavg < 35) { $fan_run = 0; } if($cputempavg > 65) { $fan_run = 2; } switch ($fan_run) { case 1 { system("echo 1 > /sys/class/gpio/gpio19/value");} case 0 { system("echo 0 > /sys/class/gpio/gpio19/value");} else { system("shutdown -h now");} } sleep(10); }
1 件のコメント:
通りがかりで失礼します。
2sc1815のpin番号が…
コメントを投稿