2015年5月3日日曜日

Raspberry Pi 2 もヒートシンクとファンとUSBシリアルをつける (3)

今回はソフトウェア編です.


ハードとの関係


ファンの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番号が…