プログラミングメモ

思った通りに動いてくれて嬉しかったこと

RaspberryPiファンコントロール

概要

CPU温度によりファンの回転数を制御します。

「RaspberryPi3は速度向上の代償として、発熱量が多くなった。

と言われています。

 

一応、熱対策としてファンを導入したのですが

ファンがフル回転した状態だと、気になる程の音を出していたのと

貧弱なケースのおかげで

「振動と共振して音量が倍増してしまう。」

という最悪な状態で、CPUは、涼しそうでは無かったです。

 

サンプル

CPUFan.py

# -*- coding: utf-8 -*-
import RPi.GPIO as IO
import commands
import time

 

#ピン番号指定

IO.setmode(IO.BOARD)

 

#10番ピンを出力として利用 

PinPut = 10
IO.cleanup(PinPut)
IO.setup(PinPut, IO.OUT )
 
#PWM設定(1秒間の間に5個のパルスを作成)
PWM = IO.PWM(PinPut, 5)
PWM.start(0)

 

while True:
    #CPU温度の取得
    temp = commands.getoutput("vcgencmd measure_temp").split('=')
    ftemp = float(temp[1].replace('\'C', ''))
 
    #温度により出力を算出(40~50℃の間を70~100%で)
    pw = (ftemp - 40) / 10
    if pw < 0: pw = 0
    if pw > 1: pw = 1

 

    Duty = pw * 30
    if pw > 0: Duty += 70
 
    #PWM変更
    PWM .ChangeDutyCycle(Duty)
    
    #CPU温度とファンパワーを表示
    print 'temp:' + str(ftemp) + ' FANPW:' + str(pw)

 

    time.sleep(1)

 

回路図

f:id:megrez11278:20170824223135j:plain

 

解説

PinPutの値を変えることにより

ファンコントロール出力のIOピン位置を変更できます。

IOの利用状況に応じて変更してください。

 

IO.BOARD指定ですので、ピンの並び順に数えた位置となります。

 

ちなみにGPIOの番号に対応させたい場合は

#ピン番号指定を

IO.setmode(IO.BCM)

とします。

 

ファンの電圧は、このサンプルの場合5Vとしてください。

ファンの種類によっては

低パワー時に回転出来ない可能性があります。

 

#温度により出力を算出

辺りを適正値に修正しましょう。

 

回路図作成はfritzingを利用しました。

 

http://fritzing.org/home/

 

ダウンロードサイトよりNo Donationを選択で

無料ダウンロードできます。

 

PWM・Dutyについては、PWM・Duty参考図を参照してください。

PWM・Duty参考図

f:id:megrez11278:20170824222627j:plain