【Raspberry Pi】第2回:空冷ファンのON/OFFを行う

Raspberry Pi

前回は温度センサーの動作までを確認

ラズパイ4に温度センサーを接続し、コマンドで温度を確認できるところまで実施しました。

第2回ではラズパイに空冷ファンを接続してコマンドでON/OFFを制御できるところまで確認します。

次回は測定結果をpythonで整形、出力したいと思います。 」

こんなことを第1回では予告していたな・・・

あれは嘘だ

もうちょっと先でやります

用意するもの

空冷ファン

CPUクーラー虎徹のCPUファンを再利用します。

最低3.3Vで動くファンなら何でもOKです。

▼ちなみにコネクタは4pinでPWM制御対応なのですが今回はON/OFFのみ使います。

DC/DCコンバータ

秋月電子さんで購入した昇圧型の可変出力電源モジュールです。

  • 入力電圧範囲:2.3~5.5V
  • 出力電圧範囲:5~25V

通販コードは「 K-04377 」なのですが、2020年11月現在は取扱いが無い模様・・・

今購入するなら以下のパーツをおすすめ。

最大24V出力 昇圧型スイッチング電源モジュール LMR62421(TI)使用キット: 組立キット 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,マイコン,電子工作最大24V出力 昇圧型スイッチング電源モジュール LMR62421(TI)使用キット秋月電子通商 電子部品通信販売
DC/DCコンバータを使う理由

コンバータ無しでもCPUファンは一応は使えます。

ただし、CPUファンは12Vまで対応していますがラズパイの5Vのままだと回転数が足りなくて風量が全く無いので今回は5V→12Vまで電圧を昇圧させる必要があります。

空冷ファンの取り付け方法

空冷ファンの配線

ファンコネクタは4pinタイプで、配線は以下のようになっています。

今回はPWM制御をせず、マイナスとプラスの配線のみを使います。

DC/DCコンバータの配線

①~⑤の配線があるのですが、以下の仕様となっています。

  • ⑤出力ON/OFF制御
  • ④入力(+2.3~+5.5V)
  • ③GND
  • ②GND
  • ①出力(+5~+25V)

配線のポイントは以下の通りです。

  • ⑤(出力ON/OFF制御)はラズパイのGPIO17へ接続
  • ④(入力)はラズパイのGPIO(5V)へ接続
  • ③(GND)はラズパイのマイナスへ接続
  • ②(GND)はファンのマイナスへ接続
  • ①(出力)はファンのプラスへ接続

上部のトグルスイッチの仕様は以下の通り。

  • 左側に倒す:電圧はそのまま透過する(ラズパイの5Vのまま使うならここにセット)
  • 真ん中:ON/OFF制御する場合はこの位置にセットする(今回はここにセット)
  • 右側へ倒す:単純に昇圧/降圧だけする場合はこの位置(今回は使わない)

電圧の昇圧/降圧(青いパーツ)の動作は以下の通りです。

  • 時計回りにダイヤルを回す:昇圧する
  • 反時計回りにダイヤルを回す:降圧する

全体の配線

ということでで、配線の全体像は以下の通りです。

今回追加する空冷ファンのパーツが無いのでまたもやLEDを代わりに記載しました。

GPIOのピンアサインはいつも通り公式を参考にしました。

GPIO - Raspberry Pi Documentation
We've provided some basic examples to help you discover possible uses for your Raspberry Pi and to get started with software available in Raspberry Pi OS.

電圧を昇圧してみた

12.1Vくらいまでコンバータのダイヤルを回して昇圧してみました。

ファンの風量は増大し、ファンの音が大きいですwww

ただし、GPIO17でON/OFF制御してもOFF時にファンが回り続けるんですよね・・・

OFF制御時にGPIO17の電圧が0Vになるのは確認したのでDC/DCコンバータの仕様なのかもしれません。

つまりファンが常に回転している状態ですwww

その他の動作は問題無さげなので、次はラズパイからファンをON/OFFしてみます。

GPIOの操作方法

GPIOの状態を表示する

$ gpio readall
Oops - unable to determine board type... model: 17

あれ?表示できないw

GPIOコマンドのバージョンを確認

$ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Unknown17, Revision: 02, Memory: 0MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.

古いらしい。下記を参考にバージョンアップしましょう。

$ cd /tmp/

$ wget https://project-downloads.drogon.net/wiringpi-latest.deb

$ sudo dpkg -i wiringpi-latest.deb

$ gpio -v
gpio version: 2.52
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 4B, Revision: 02, Memory: 4096MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.

バージョンは2.50→2.52にアップ。無事にGPIOのステータスを表示できました。

$ gpio readall
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
ピン番号の指定方法

GPIOピン番号は「BCM」の列が該当します。

例:GPIO17 → BCM列の17(=Physical列の11)

物理のピン番号をコマンドなどで指定することもできます。

例:物理11 → Physical列の11(=BCM列の17)

ちょっと混乱しやすいですが、プログラムに記載などするときは指定方法に注意しましょうw

PythonでGPIOを操作する

今回の本題です。

以下が動作確認プログラムです。vimまたはnanoあたりで作成します。

$ cat fan_control.py
from gpiozero import LED
from time import sleep

led = LED(17)

while True:
    led.on()
    sleep(5)
    led.off()
    sleep(5)

gpiozeroを利用しました。

gpiozero — Gpiozero 1.5.1 Documentation

LEDのライブラリですが動作的に問題なかとです。

GPIO17をONにして5秒経過したらOFF。5秒経過したら再びONのループです。

実行は下記のコマンドで。

$ python fan_control.py

問題点

GPIOをONしたときは電圧が3.15V程度流れます。

前述したようにOFF時は電圧は0.0Vまで下がりますがファンは回ったまま/(^o^)\

最終的には温度センサーの取得値によって空冷ファンをON/OFF制御できるようにしたいので、どうにかファンを完全停止させたいところ・・・

GPIOの5VをON/OFF制御できれば解決できそうなんですが、手段が無さそう・・・

・・・とりあえずはファンを制御できるようになったので、今回はここまで。

次回は温度センサーと空冷ファンの制御をpythonで組み合わせてみます。

まとめ

  • gpiozeroを使えばGPIO制御は簡単
  • GPIOのOFF時に空冷ファンが完全停止しないwww

GPIOを制御する方法は他にも多く存在するのでお好きな方法を!

コメント

タイトルとURLをコピーしました