Raspberry Pi 4 ヒートシンクの取り付け

Raspberry Pi 4を購入、到着したので急遽いろいろ試しています。

Pi4の発熱問題は新ファームでだいぶ改善されているようですがやはり最低限の放熱対策は必要なのでPi3と同様の方法でヒートシンクを取り付けてみました。


Pi4はokdo製
ベースのアクリル板は割れたオルガンの蓋から切り出しました。
タイプCケーブルは100均(セリア)で用意
残念ながらHDMI-VGA変換アダプタは全くダメでした。(HDMIモニタがない(^▽^;)

FAN


ファンは古いIBM240系のディスプレイ、キーボード無しのマシンが何台かあって取り外しています。
取り外した後は順次ゴミ箱行きですね。


CPUに当たる部分のアルミ板は壊れたカーオーディオの放熱板から切り出し。(3mm厚)


ファンが載る部分で背の高い部品はオーディオジャック、USB側にスペーサー(3.8mmを3.3mm位にヤスリで削って)を接着します。
CPUに絶縁シートを貼って、前のコネクタとファンの間にわずかな隙間があるとCPUに密着しています。
当サイトのPiはGPIOに下駄を履かせています。丁度リレー1個入るスペースがあります。
GPIO側のピンソケットはリレーが支えるので1mm程度浮かして取り付けます。


USB端子とファンをホットボンドで接着


6mm厚のアルミ片があったのでUSB端子と高さを合わせてホットボンドで接着


USB端子に少し強力な両面テープを貼ってカーステの残りの放熱板で抑えます。


前後方向はUSB端子とリレーが少し掛かっているのですがファン側の高さ方向は抑え箇所が無いため重みだけで抑えています。ポータブル用途には向きませんが固定(ディスクトップ)で使う分には問題ないと思っています。

FANコントロール


通常時はリレーOFF(3.3V)で常時駆動、指定した温度に達するとON(5V)に切り替えます。
ファンの音は3.3V駆動では全く気にならないレベル

WiringPi

WiringPiはV2.52に更新しないとボードナンバーが違うよみたいなことを言われます。
http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/

cd / tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i lightingpi-latest.deb

cpu_temp.py

cpu_temp.pyを走らせます。
リレーのON-OFF(HIGH-LOW)だけなのでGPIOの制御はsubprocessで実行しています。
設定は# default settingのON-OFF温度、チェックタイムを変更します。
gpioピンは13(BCM22)を使っています。(任意)
最初のループで起動時1分HIGHで駆動しています。
実運用は/etc/rc.localからの起動を想定しています。

#!/usr/bin/python3

import subprocess
import time

# default setting
ON_T =  50
OFF_T = 45
TIME =  60
subprocess.run("gpio -1 mode 13 out", shell=True)

CPU_T =  0
T =      0
count =  0

while True:
    subprocess.run("gpio -1 write 13 1", shell=True)
    count += 1
    if count >= 60:
        subprocess.run("gpio -1 write 13 0", shell=True) 
        break
    time.sleep(1)

while True:
    command = ("expr `cat /sys/class/thermal/thermal_zone0/temp` / 1000")
    CPU_T = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    CPU_T = CPU_T.strip()

    if int(CPU_T) >= ON_T and T == 0: 
        subprocess.run("gpio -1 write 13 1", shell=True)
        T = 1
        print("FAN HIGH 5V LED ON")

    if int(CPU_T) <= OFF_T and T == 1:
        subprocess.run("gpio -1 write 13 0", shell=True)
        T = 0
        print("FAN LOW 3.3V LED OFF")

    print(CPU_T)

    # cpu frequency
    command = ("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")
    CPU_F = (subprocess.Popen(command, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
    CPU_F = CPU_F.strip()
    print(CPU_F)

    # TIME = 60
    time.sleep(TIME)

テスト

os 2019-09-26-raspbian-buster.img
tightvnc + dwm

UnixBenchを実行します。

$ git clone https://github.com/kdlucas/byte-unixbench
$ cd byte-unixbench/UnixBench
$ ./Run


スタート 42.8℃ 室温 22℃
60秒ごとに取得しています。温度はexprで少数低下切り捨て
温度、クロックはダイナミックに変化します。値は実行時その瞬間の値になりますが大まかな流れは掴めると思います。


1 x Pipe-based Context Switching あたりで50℃に達してHIGH(5V)に切り替わります。


4 x Dhrystone 2 using register 4coreになると10℃位アップしてきます。


終了後5分位で設定値の45℃に落ちてLOW(3.3V)
Score
1コア 324.1
4コア 870.0
Scoreは電源アダプタも影響するようで、モニタLED(赤LED)が点いたり消えたりする場合は電源容量が足りないようです。

ファン容量が小さいので気休め程度ですがファームウェアの改善と相まって通常の使い方では取り敢えず問題のないレベルと思っています。
Pi4もまだまだ開発途上のようなのでいろいろ確認しながらもう少し様子を見ようと思います。