ケースファンをミニ扇風機にする
How to Fan-speed control
はじめに
最近わたしのデスク周りが暑いです。USBタイプの小型ファンを買ってもいいかなと思っていたのですが、どこかのケースから抜いたケースファンが余っていたので簡易扇風機として使っています。

ケースファンは物によっては静音で、風量が強いものもありますが、このファンは刺した途端、音がうるさく作業ができない状態だったので、風量を調節することにしました。
今回はLinuxでのファンの風量調節についてのやり方を紹介します。
※ケースファンを扇風機として使用するのは本来の用途とは異なります。ケースファンは元々PCケース内の空気循環や冷却を目的として設計されており、直接的な人体冷却用途として作られているわけではありません。長時間の連続使用や異なる用途での使用による故障や事故については、あくまで自己責任でお願いします。
周辺環境
OS: ArchLinux
マザーボード: nct6776チップセット
ファン: 4ピンPWM/3ピンDCファン対応
マザーボード全体はこのようになっています。

このマザーボードにはケースファンの4ピンのコネクタが1つしかなく、残りは3ピンでした。3ピンのものはDC電圧制御なので精度も粗く、通常は7V~12Vと制御が限定されるものだったので、今回は4ピンの方に刺しました。

調整方法
今回はLinuxのカーネル標準機能であるhwmonを使いました。
まず、先程の4ピンがどのファンに該当するか確認していきます。
# sensorsをインストール
# Arch linuxの場合
$ sudo pacman -S lm_sensors
# センサー情報を表示
$ sensors
nct6776-isa-0290
Adapter: ISA adapter
Vcore: 808.00 mV (min = +0.00 V, max = +1.74 V)
in1: 1.83 V (min = +0.00 V, max = +0.00 V) ALARM
AVCC: 3.33 V (min = +2.98 V, max = +3.63 V)
+3.3V: 3.31 V (min = +2.98 V, max = +3.63 V)
in4: 64.00 mV (min = +0.00 V, max = +0.00 V) ALARM
in5: 1.73 V (min = +0.00 V, max = +0.00 V) ALARM
in6: 800.00 mV (min = +0.00 V, max = +0.00 V) ALARM
3VSB: 3.41 V (min = +2.98 V, max = +3.63 V)
Vbat: 3.23 V (min = +2.70 V, max = +3.63 V)
fan1: 1730 RPM (min = 0 RPM)
fan2: 1591 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
fan5: 0 RPM (min = 0 RPM)このケースはオープンフレームのものなので、ケースファンが他についていません。そのため、fan1かfan2のどちらかがCPUファンでもう片方がケースファンとなります。
ここで適当に調整をしてしまうと、それがCPUファンだったときに不具合が起こりかねないので、一度ケースファンを抜いて、どれがそのケースファンなのか確認をしてみると良いです。
$ sensors
nct6776-isa-0290
Adapter: ISA adapter
Vcore: 920.00 mV (min = +0.00 V, max = +1.74 V)
in1: 1.83 V (min = +0.00 V, max = +0.00 V) ALARM
AVCC: 3.31 V (min = +2.98 V, max = +3.63 V)
+3.3V: 3.31 V (min = +2.98 V, max = +3.63 V)
in4: 72.00 mV (min = +0.00 V, max = +0.00 V) ALARM
in5: 1.73 V (min = +0.00 V, max = +0.00 V) ALARM
in6: 800.00 mV (min = +0.00 V, max = +0.00 V) ALARM
3VSB: 3.41 V (min = +2.98 V, max = +3.63 V)
Vbat: 3.23 V (min = +2.70 V, max = +3.63 V)
fan1: 0 RPM (min = 0 RPM)
fan2: 1591 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
fan5: 0 RPM (min = 0 RPM)
ケースファンを抜いて再度実行してみたところ、fan1が0 RPMとなっていましたので、今回はfan1を制御していきます。
# PWMファイルの一覧表示
ls /sys/class/hwmon/hwmon*/pwm*
# 必要なら
# 特定のhwmonデバイスの詳細確認
ls -la /sys/class/hwmon/hwmon2/一般的にLinuxのhwmonのfan番号と、pwm番号は一致しています。
そのため、
fan1 → pwm1fan2 → pwm2fan3 → pwm3
という具合に、同じ番号のファンとPWMチャンネルは対応関係にあります。
※ 例外も考慮して、ファンを調整する場合は、停止などの動作を突然行うのではなく、少しの調整をしてsensorsコマンドでその度に確認をすることが重要です
今回はPWM1がCHA_FAN1に該当するのを確認しましたので、そちらで進めていきます。
まず、制御モードを手動に変更していきます。
sudo echo 1 | sudo tee /sys/class/hwmon/hwmon2/pwm1_enable次に、ファン速度を設定していきます。PWMの場合、0~255の間で調整をすることが可能です。
sudo echo 150 | sudo tee /sys/class/hwmon/hwmon2/pwm1数字を変えて音と風のいいバランスポイントをみつけましたら終了です。私は120あたりで落ち着きました。
起動時から自動で調整をしたい場合は、以下のようにするのがおすすめです。まず、シェルスクリプトを作成していきます。
#シェルスクリプト作成
sudo vim /usr/local/bin/fan-control.sh
#!/bin/bash
echo 1 > /sys/class/hwmon/hwmon2/pwm1_enable
echo 128 > /sys/class/hwmon/hwmon2/pwm1次に、実行権限を付与します。
sudo chmod +x /usr/local/bin/fan-control.shサービスファイルを作成していきます。
sudo vim /etc/systemd/system/fan-speed-control.service
[Unit]
Description=Fan Speed Control
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/fan-control.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.targetサービスを有効化します。
sudo systemctl enable fan-speed-control.service終わりに
風がなかった時と比べて、今は大分涼しくなりました。そもそもエアコンをつけたほうがいいとは個人的に思いますが、興味がある方は是非やってみてください。
※はじめに述べましたが、ケースファンはそもそも人体を冷やす目的で作られていないので注意が必要です。
※ファンの回転する部分に指や物が触れると、怪我や故障の原因となる可能性があります。使用前にはデスク周りを清掃し、ペンやケーブルなどの小物がファンに接触しないよう注意して設置してください。特に長時間使用する場合は、安全な位置に固定して使用することをお勧めします。
おわり