スポンサーリンク

知識ゼロから始めるラズパイ -CPU温度によるファン制御-

完成した回路図 RaspberryPI
スポンサーリンク

Pythonプログラム -CPUファンの制御-

回路ができましたので、CPUファンを動かすプログラムを作成していきます。ここでは、シンプルにCPUファンを動かすだけの簡単なプログラムとします。今後は、このプログラムをベースにデーモン化してバックグラウンドで動かすなど、改良していきたいと思います。

プログラム(全様)

プログラムの説明

プログラムについて簡単に説明します。間違いや、お気づきの点がありましたらご連絡いただけると嬉しいです。

1~3行目 ・・・ ライブラリのインポート

GPIOを制御する「RPi.GPIO」、時間を扱う「time」、ラズベリーパイのコマンドを使用するための「subprocess」の3つを呼び出します。

5~10行名 ・・・ ピン番号の指定

GPIOの番号指定方法をBCM番号に指定します。PIN番号とどちらか使いやすいほうでよいと思います。

変数「pin」にBCM番号の18を入力、今回は電流の出力なので「GPIO.OUT」とします。使用するピンについては、ラズベリーパイ購入時の説明書についていたピン配列図からPWM制御ができそうな18番(ピン番号ですと12)を使用します。

ラズベリーパイのピン配列

PWM制御をするための周波数を指定しています。(最適値がわからなかったため、とりあえず100Hzとしました)

18~30行目 ・・・ CPU温度の取得とDuty比の設定

while文についての説明は省略しますが、24時間経過後にループから抜ける設定としています。

「cat」を利用して温度を取得し、取得した数字を1/1000として温度を算出しています。詳しい解説は下記のリンクをご確認ください。

知識ゼロから始めるラズパイ -CPU温度の監視ー
ラズパイにCPUファンを設置したところ「ぶーーん」という音が気になって仕方なかったので、GPIOピンやトランジスタを使用してファンの回転数制御に挑戦します。まずは、PythonでCPU温度を取得するところから始めていきます。

典型的なIF文です。CPU温度が50℃未満であれば、dtに50を格納。50℃を超えて70度未満であれば、dtに75を格納。それ以外はdtに100を格納しています。

先ほど取得したdtについては、「pwm.start(dt)」で Duty比として使用しています。dt=50であれば、50%の出力です。「time.sleep(10)」で10秒経過した後、while文により繰り返し処理が実行されます。

33行目 ・・・ ループからの離脱

24時間経過後にループから抜けますので、「pwm.stop()」により出力を停止させます。

スポンサーリンク

動作テスト

私のラズパイは、気温25℃前後の環境下でCPUファンを使用しなかった場合の温度は60℃前後で推移していました。今回のプログラム起動後数分で温度は50℃以下となり、その後50℃前後で落ち着くことがわかりました。

今回のプログラムは50℃以下でDuty比50%としているため、このような動きとなったともいます。数字についてはいろいろと調整して、ノイズ音を発生させない最適な回転速度を見つけていけばよいと思います。

CPU温度を連続取得するプログラムは下記リンクの記事で紹介しています。

知識ゼロから始めるラズパイ -CPU温度の監視をGUIで-
ラズベリーパイ(Raspberry PI 4B)のCPU温度の監視することのできるGUIアプリをPythonで作成してみました。プログラミングは慣れていないので、非効率な記述となっていた場合はご指摘ください。
タイトルとURLをコピーしました