
標準で備わっているデバイスツリーオーバーレイで、CPU温度によるファンのOn/Off機能。設定もGUIで出来てプログラムも書かずに済む、その機能を使えるようにGPIO経由でCPUファン制御をしてみた。
使っているラズパイ4のCPUに付けたFANの消費電流は5Vで50mA弱、GPIOで流せる電流は16mAほどなので間にトランジスタを入れてドライブすることにし、トランジスタは手持ちに有る汎用の2SC1815、これは最大150mAまで流せるので今回のFANには十分。
つくるにあたって、ベース抵抗とベース・エミッタ抵抗を求めて、iPadのアプリ「iCircuit」を使いシミュレートして確認をしました。
回路
ベース電流(Ib)は1mAとし、2SC1815のhfeを200とすると、
Ic = Ib * hfe = 1mA * 200 = 200mA
200mA流せそうだが、2SC1815は150mAまで。
Rb = (Vb – 0.7v) / Ib = (3.3v – 0.7v) / 1mA = 2.6kΩ
手持ちの抵抗で近いのは2.7kΩ、
Ib = (3.3v – 0.7v) / 2.7kΩ = 0.96mA
iCircuitでシミュレートするとIcに49mAほど流れているから大丈夫そう。
Rbeを入れるとと対ノイズに強くなるそうで、値は1kΩから10kΩとか、こちらも手持ちの中から4.7kΩを使用。

使用するGPIOは5番(ピン番号29)が配線し易そうだったので、この番号に決めました。(実装写真を参照)
部品
- トランジスタ 2SC1815
- 抵抗 2.6kと4.7k
- RTCを乗せたユニバーサル基板
- 多少の線材(リード線など)
組んだ後に気づいたのですが抵抗は4.7kに揃えて、ベース抵抗も4.7kにしてもよかったかと。
その場合はIbが0.6mAくらいでちょっと省エネ、秋月だと100本単位なので4.7kの一袋のみの買い物でお財布にもちょっと優しい。
実装
RTCを乗せたユニバーサル基板の空いているところに組みました。
FANとの接続はピンコネクタを介し、基板の取り外しをしやすくし、後々の改造へ。

動作確認
メニューから「Raspberry Piの設定」を選んで、「パフォーマンス」タブ。

[ファン]項をオンにして、トランジスタのベースに繋いだGPIOの番号を入れ、ファン動作温度を指定。
CPUの稼働率を上げるには、コマンドラインで。
$ yes > /dev/null &
おおよそ25%ずつ上がり、4回うてば100%になる。
最初の動作確認で、CPUの稼働率を上げてもCPU温度が熱くなってもファンは回らずで、PINの番号など確認したが判らず。
試しにPythonでGPIOピンへHigh/Low出力のプログラムを書いて、FANが回転するか確認したところ正常に動作。その後は設定温度でFANが回り始めたので、GPIOのモードが出力モードになっていなかったのか?なと。
今は設定温度で回り、設定温度から-10℃くらいになると自動でFANが止まります。
実測値

ベース電流値(Ib)は0.9mA。

コレクタ電流値(Ic)は、39.2mA。