Raspberry Pi でPWM信号を使って5Vファンを制御する

Raspberry Pi でPWM信号を使って5Vファンを制御する

自作PCで使うような4pinファンを動かすのではなく、2pin(VDDとGND) ファンを制御するという内容です。

Raspberry Pi でPWM信号使ってLEDの明るさを変更する でPWM信号を使ってLEDを点灯させた。 Raspberry Pi のPWM出力電圧(3.3V) では5Vファンの入力電圧(5V) には届かないため、GPIOの5V電源をトランジスタで制御し、PWM信号として使用した。

部品類

回路図と配線

f:id:shogysd:20210405003540p:plain f:id:shogysd:20210405003551p:plain

PWMを出力するコードを書く

ほとんどLEDの時と同じ 差分としては、LEDの時は10%の出力と100%を繰り返した ( for i in [10, 100, 10, 100]: ) が、 今回使用したファンは10%の出力では始動電力に届かなかったようで動き始めなかったため、20%に変更した ( for i in [20, 100, 20, 100]: ) 。

import RPi.GPIO as GPIO
import time


def main():

    frequency = 200
    repeat_count = 600
    gpio_pin = 18

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(gpio_pin, GPIO.OUT)

    for i in [20, 100, 20, 100]:
        
        if 0 == i:
            on_time = 0
            off_time = (1 / frequency)
        else:
            on_time = (1 / frequency) * (i / 100)
            off_time = (1 / frequency) * (1 - (i / 100))

        for rc in range(repeat_count):
            GPIO.output(gpio_pin, True)
            time.sleep(on_time)
            GPIO.output(gpio_pin, False)
            time.sleep(off_time)
            
    GPIO.cleanup()


if __name__ == '__main__':
    main()

Raspberry Pi では "vcgencmd" というコマンドでCPU温度などの情報を取得することが可能なようなので、 ○○°Cを超えたらファンの出力を××%に などできそう。

参考記事

RaspberryPiのCPU情報をPythonで取得する