エントリー

カテゴリー「PC」の検索結果は以下のとおりです。

ページ移動

FANの制御

しばらく気温が下がっていたので何もしないでいた

気温が上がってきたので急遽作成

簡単に仕様を検討

  • HDD温度が○○℃を超えたら設定温度を下回るまでFANを動作させる → 外温度によって下げる温度を変更するようにしたい
  • CPU温度は問題なさそうなので無視 → 90℃とかになったら冷やさないといけないかな

制御プログラム(設定温度などは未調整)

# cat /usr/local/sbin/tempctrl
#!/bin/sh
#
DANGERTEMP=42                   # 超えたらFANを動作する温度
BETTERTEMP=38                   # 下まったらFANを停止する温度
LOCKFILE=/tmp/hddtemp.lock      # 本プログラムの起動状態
FANFILE=/tmp/fanmode.tmp        # FAN動作状態(旧:低速・高速状態)
DEVICE=/sys/class/gpio/gpio7_pg1/value
if [ -f $LOCKFILE ]
then
    /usr/bin/logger -t hddtemp $0 already running
    exit 0
fi
TEMP=`/usr/sbin/hddtemp -n /dev/sda`
if [ 4 -le ${#TEMP} ]
then
    exit 0
fi
if [ "$TEMP" -le $DANGERTEMP ]
then
    echo 0 > $DEVICE            # FANを停止
    exit 0
fi
echo 1 > $DEVICE                # FANを動作
/usr/bin/logger -t hddtemp "Operating the cooling fan for HDD is in the high temperature "`echo $TEMP C`
trap 'rm -rf $LOCKFILE $FANFILE' INT QUIT TERM EXIT
touch $LOCKFILE $FANFILE; chmod 400 $LOCKFILE $FANFILE
while [ -f $FANFILE ]
do
    sleep 60
    TEMP=`/usr/sbin/hddtemp -n /dev/sda`
    if [ "$TEMP" -le $BETTERTEMP ]
    then
      break
    fi
done
echo 0 > $DEVICE                # FANを停止
/usr/bin/logger -t hddtemp "Stop the cooling fan for the HDD is better temperature "`echo $TEMP C`
rm -rf $LOCKFILE $FANFILE
exit 0

これをcronで動作させるためcrontab編集

# EDITOR=vi crontab -e

編集したcrontabは以下

# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
*/6 * * * * /usr/local/sbin/tempctrl

 

先になるが、いろいろ制御方法を変えていこうと考えてる

尚、温度が上がって危険なのはHDDであり60℃を超えないようにする

またHDDは温度変化が無い様に動作させることにより耐久性があがることが知られている

FANをGPIOでON/OFFする

FANを取り付けたが動作はFANの電源コネクタを12Vバッテリに手動接続することで行っている(当然ながら停止も電源コネクタを外すことで行うことになる)

またFAN単体では無音に近いがケース取り付け状態では無音ではないため24時間駆動は行っていない(騒音対策は未実施)

そこでGPIOの使い方を確認する意味もありGPIOでデジタル出力方法は判っているのでソフト的に制御してみようと考えた

先にFANのドライブ確認、FETを使った簡単なスイッチ回路をブレッドボード上に展開

1

  • GPIOのデジタル出力で10mAは流せると考え3.3Vなので330Ω以上 → R1は1KΩにした
  • R2は1KΩ~10KΩ位 → 10KΩにする
  • FANは12V 0.05A仕様だったのでFETを100mAを十分に流せる2N7000にする → 確認して問題なし

2

準備したFANはPC用で回転数が判る3P端子だったので、回転数の確認のため試しに出力をオシロで見てみる

回転数ピンはオープンコレクタらしいので3.3Vを100KΩ直列でプルアップ

3

あんまり綺麗な波形でない、このオシロの限界?

周波数も計測したがどうも正常とは思えない値が出ていた(今回は追及しない)

 

今のところ確認的な物なので回路は空中配線とする

4

 

GPIOはGP1を使用し、以下で動作を確認

# echo 7 > /sys/class/gpio/export
# ls /sys/class/gpio/
export  gpio7_pg1  gpiochip1  unexport
# echo out > /sys/class/gpio/gpio7_pg1/direction
# cat /sys/class/gpio/gpio7_pg1/value
0
# echo 1 > /sys/class/gpio/gpio7_pg1/value (ON)
# echo 0 > /sys/class/gpio/gpio7_pg1/value (OFF)

上記コマンドの説明

GP1はPIN番号7となる(以下)

7を「/sys/class/gpio/export」に出力すると「/sys/class/gpio/」で入出力スペシャルファイルが判る

PINに対して入出力の指定を行い(Read only なら in)操作する

メンテ用記述)GP1には黒色の線が接続されている

gpio_defination_large.png

制御ソフトは後日予定

FANを取り付けてみた

5月だというのに暑い日が続き、気温25℃前後でのCPUとHDDの温度を見てみると

before_CPU-week

before_sda-week

このままでも問題ないと思われるが外気25℃で+40℃を超えてるため夏場は50℃を超えることになることが見込まれる

やはりFANは必要になるだろうということで試行的に付けてみることにした

まずはケースの再加工を実施、先の改造もあるのでそれらを含めた再加工を行う

悩んだ結果、CPUモードとHDDの上下位置を変更(HDDを上に)した

1

下側をGPIOアクセス用に加工

2

前面にFAN(40mm)を設置

3

FANの方向は外から内部とした(外出しにすると穴を調整するのが大変だったから)

しばらくFANを直接12V駆動して温度状態を監視してみることにする

(追加)

after_CPU-day

after_sda-day

0時前に温度が落ちている時の外気温は25℃

18時に温度が落ち手居る時の外気温は28℃

温度が落ちている時(落ちだした時に)FANを始動(現状はMAX回転)

外気温+5℃程度になる能力であることが判る

GPIOメモ

サーバの信頼性アップのため以下の機能を組み込むことを考えている

  • 冷却ファン
  • USPのバッテリー稼動時のシャットダウン対応
  • 外部温度の計測

実装にはセンサ類の制御が必要で、GPIOを使えばデジタル出力とADCが扱えれば可能

しかし(情報を収集しているのだが)ADCの使い方が不明

既にサーバは運用しているためGPIOの実験を行うのも無理があるので、外付けとしてAVRで製作することも考えることとした(AVRとの通信はシリアルを使う)

以下は情報メモ

http://linux-sunxi.org/Cubieboard/ExpansionPorts

https://abhinavgupta2812.wordpress.com/2013/08/27/configuring-the-gpio-and-uart-on-the-cubieboard/

https://likeaferrari.wordpress.com/2013/12/02/simple-gpio-example-with-cubieboard2/

http://homeduino.blogspot.jp/2014/05/cubieboard-lubuntu-open-uart.html

http://docs.cubieboard.org/tutorials/common/how_to_use_the_uart

(追加)

シリアルの使い方も試行してみないと判らないので、まずはGPIOを扱い易いようケースを改造することにした

ページ移動

ユーティリティ

検索

エントリー検索フォーム
キーワード

新着コメント

Re:Mozilla FirefoxではNHKプラスを再生できない件
2025/05/09 from Donabeyaki
Re:ATS-25を作製する
2025/03/23 from kazu
Re:ATS-25を作製する
2025/03/22 from admin
Re:ATS-25を作製する
2025/03/22 from kazu
Re:NOAA受信システム復旧
2025/03/20 from admin

過去ログ

Feed