発熱が不安なラズパイ4のCPU温度を測定して「ヒートシンクの効果」「ファンまで必要なのか」を検証してみました。
これからラズパイを購入する方のために何処までCPUの発熱対策のパーツを購入するべきなのかを紹介します。
ラズベリーパイのヒートシンクの効果は?ファンまで必要かを検証!
技適対応したRaspberry Pi 4 model Bとラズベリーパイ4用ケースを購入しました!
今回のラズパイ4のケースにはヒートシンクとファンまでついてきました。ファンまで購入したのは初めてです。
ラズパイにヒートシンクは必要
筆者は「ラズベリーパイ1B+」の頃からラズパイを使っていますが、ヒートシンクは必須と考えています。
ヒートシンク無しだと普通に運用しているだけで発熱で強制シャットダウンが頻発しました
ラズパイを安定運用するためにもヒートシンクは必要です。下記の小さいヒートシンクでもCPU上に載せるだけで大分違います。
結局はラズベリーパイ1B+にも別売りのヒートシンク購入しました。
それ以降の3B+まで全てヒートシンクを付けて筆者は運用しています。
ラズパイ4のCPU発熱対策にファンまで必要なのか
もともとCPUの発熱が大きいといわれていたラズパイ4です。
確かにヒートシンクは必要だと思いますが、本当にラズパイ4の発熱対策の部品がファンまで必要なのか確認していきます。
ラズパイのケースにファンが付いていることが多い
Amazonのラズパイのケースを見ても最近は大半がヒートシンクだけでなくファンも付いています。
もしくは下記のようにファンがなくとも非常に大きなヒートシンクになっているケースも多いです
数年前からもラズパイのファン自体はあったが、こんなに標準的には付いていなかった記憶…。
何にせよ最新のラズパイ4の電源はTypeCで3Aまで流せる以上、発熱も大きくなっているのは自明のようです。
またラズパイのケースについて紹介した記事は下記になります。よろしければご覧ください。
ラズパイ4をファンレスとファンの向きを変えてCPU温度を比較
PythonでプログラムしてCPUの温度比較したのですが、プログラム内容は後に回して結果を先に記述します。
今回は「ファンレス(ヒートシンクのみ)」「ファン有(正常向き_風がCPU向き)」「ファン有(異常向き_風が外気向き)」の3パターンで比較します。
試験条件
テストは下記条件で実施しました。
温度:室温17℃。
CPU負荷:大体90%~100%(topコマンドでの数字)
OS:Raspbian Buster with desktop and recommended software(September 2019)
試験プログラム:後述に記載
接続デバイス:特になし(電源だけ入れてリモートデスクトップ接続)
テストプログラム
当初は発熱を見るため負荷の高いベンチマークプログラム(UnixBench等)でも走らせようかと考えていました。
しかし今回使ったPythonのCPU温度表示プログラムが10ms(0.01秒)周期で速い周期で更新して、それだけで「top」コマンドでのCPU使用率が90%~100%になっていました。
そのため後述するプログラム以外は走らせていない環境でテストしました。
※今回はCPUには多少負荷は掛かっていますが、GPU・各IFには全く負荷が掛かっていません。
そのため運用次第ではさらに高温になると思われますのでご注意ください。
テストプログラムで温度がサチる(最高温度になる)まで回し続けています。
ラズパイ4の冷却ファンの効果を確認した結果
まずは「ファンレス(ヒートシンクのみ)」「ファン有(正常向き_風がCPU向き)」の2パターンで冷却ファンの効果を確認しました。
結果は「ファンレス(ヒートシンクのみ)」がMAX_62℃(外気温+45℃)となり、「ファン有(正常向き_風がCPU向き)」はMAX_37℃(外気温+20℃)となりました。
冷却ファン有無でやはり大きく結果が変わりました。(差分で25℃もある)
冷却ファンがあれば外気温+20℃で抑えれているので、例えば「夏場」「密閉環境」で周囲温度が60℃になっても何とか動いてくれそうです。(あくまで単純換算ですが…)
ラズパイ4ではCPU上の小さなヒートシンクだけでは放熱が厳しそう
ラズベリーパイ財団の公式HPにも記載されていますが、ラズパイ4もCPU温度が85℃近くになるとCPUパフォーマンスを落とします。
(Overclocking・Overvoltageがdisabledにされるそうです。リンク先はこちらから)
軽い負荷の運用ならば大丈夫かもしれないですが、何にせよ小さなヒートシンクだけでは放熱が厳しそうです。
ラズパイのファン取り付けの向きを間違えた場合の結果
「ファン有(正常向き_風がCPU向き)」「ファン有(異常向き_風が外気向き)」の2パターンでファンの取り付け向きを間違えた場合を確認しました。
(かなり余談になりますが…)
結果は「ファン有(正常向き_風がCPU向き)」はMAX_37℃(外気温+20℃)となり、「ファン有(異常向き_風が外気向き)」がMAX_42℃(外気温+25℃)ました。
やはりCPUに向かって風を当てるのが良い結果になりました。(差分で5℃も違います)
説明書でファンの取り付け箇所を見ても風がCPUに向く形(シール有る方が下側)で記載されています。
ラズパイのファンを付けるときは説明書を見て取り付けましょう。
ラズパイ4のCPU温度上昇をまとめたテスト動画
テストの内容をYoutubeにもアップしました。よろしければご覧ください。
(今回は動画内にも説明を残しています)
Raspberry piのCPU温度のグラフをPythonで描いてみた
今回はPythonでプログラミングしてCPU温度のリアルタイムのグラフを描きました。
理由はLXTerminal (ターミナル)でコマンド打ってラズパイのCPU温度を測定するだけでは単純で(筆者が)面白くなかっただけです。
ラズパイのCPU温度をPythonで取得する
ターミナルならば下記「vcgencmd」のコマンドで簡単に温度・クロックなど各情報が取得できます。
温度に関しては上記のように「measure_temp」と打てば「temp=38.0'C」のように反ってきます
Pythonでも「subprocess」を使えばターミナルで使っていたコマンドをプログラム上で使えます。
1 2 3 |
from subprocess import getoutput temp = getoutput('vcgencmd measure_temp') |
あと上記コマンドでは「文字列」として温度が出るので、「split」など使って数字の部分だけ使いました。
PythonでリアルタイムのCPU温度グラフをプロットする
単にデータ取得してグラフを描くのでなく、リアルタイムで温度のグラフをプロットしました
今回は下記の記事を大いに参考にさせてもらいました。Pythonで動的にグラフを生成するパターンが複数記載されており、非常に参考になりました。
「もみじあめ」様にはこの場を借りてこの場を借りてお礼申し上げます。
Python: matplotlib で動的にグラフを生成する
ラズパイのCPU温度上限の85℃に補助線を引く
ラズパイのCPU温度に関してはラズベリーパイ財団から「85℃」が上限にされていることが記載されています。(リンク先はこちらから)
そのためPythonのプログラムで描くグラフには一つの指標として85℃箇所に補助線を引きます。
1 |
p = plt.plot([0, x[-1]],[85, 85], "red", linestyle='dashed') |
上記内容で赤点線の補助線がグラフに表示されます
Pythonのプログラム
先駆者のコードに筆者で拙いプログラミングで追記した形になりますが残しておきます。
50行目の「更新間隔」が10m秒(0.01秒)と速くなっていますので、ラズパイだと結構CPU負荷が掛かります。(90%~100%ぐらい)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import itertools import math import numpy as np from matplotlib import pyplot as plt from matplotlib import animation from subprocess import getoutput def _update(frame, x, y): """グラフを更新するための関数""" # 現在のグラフを消去する plt.cla() # データを更新 (追加) する x.append(frame) # CPU温度を取得する temp = getoutput('vcgencmd measure_temp') temp2 = temp.split('=') Cputemp = temp2[1].split("'") y.append(float(Cputemp[0])) # 折れ線グラフを再描画する plt.plot(x, y) # グラフのタイトルにCPU温度を表示する plt.title('CPUtemp = '+ str(y[-1])) # グラフにCPU温度上限の85℃に補助線(赤点線)を引く p = plt.plot([0, x[-1]],[85, 85], "red", linestyle='dashed') # グラフの縦軸_CPU温度の範囲を指定する plt.ylim(35,90) def main(): # 描画領域 fig = plt.figure(figsize=(10, 6)) # 描画するデータ x = [] y = [] params = { 'fig': fig, 'func': _update, # グラフを更新する関数 'fargs': (x, y), # 関数の引数 (フレーム番号を除く) 'interval': 10, # 更新間隔 (ミリ秒) 'frames': itertools.count(0, 0.1), # フレーム番号を無限に生成するイテレータ } anime = animation.FuncAnimation(**params) # グラフを表示する plt.show() if __name__ == '__main__': main() |
まとめ
「密閉された空間」「夏場」などを考慮するとラズパイ4にファンは(もしくは大きいヒートシンクを)付けておいた方が無難そうです。
最近はキット・ケースに大抵付いてきます。それを装着しておけば、よほどの負荷を掛けない限り問題ないと思います。
コメント
[…] […]
[…] エンジニアり電気屋さん […]