11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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信号として使用した。

部品類

  • 5V DC-FAN (D02X-05TS1 02)
  • トランジスタ (2SC1815GR)
  • 抵抗 (1kΩ)

回路図と配線

pi_GPIO_PWM_t.png
FAN_PWM.png

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で取得する

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?