注目キーワード

【Arduino】「M5Stack」でファンコントローラー!Cooler MasterのPCファン新製品をロードテスト!

 
すけろく
M5Stackを使って、モーターをコントロールしてみたいな。
 
げんろく
それならば、モーターコントロールを学べる
PC冷却ファン制御というものをやってみるか。
 
すけろく
ん? パソコン用の冷却ファンをコントロールできるのか?
 
げんろく
仕組みはモーターと同じだからな。 とにかくやってみよう!
 

この記事では、M5Stackとパソコン用の冷却ファンを使って回転速度制御を行います。

M5Stackから冷却ファンの回転を制御できれば、扇風機のように、自由に風量を変えることができます!

今回ご紹介する仕組みを使えば、自作PC用や、その他用途の冷却ファンの事前ロードテスト(回転速度、騒音の測定)に利用できます

今回の冷却ファンは、パソコン用の120㎜冷却ファン「Cooler Master MasterFan SF120M ARGB」を使います。

LED搭載なので光らせることができますよ!。

LEDを光らせる方法については別の記事で掲載予定です。

 

Cooler Master MasterFan SF120M ARGB

CoolerMaster MasterFan SF120M ARGB

自作パソコンのパーツメーカーであるCooler Masterの120㎜冷却ファンです。
防振モーター、振動を抑えるダンピングフレームデザインなど、工業用グレードの素材を用いていて、高性能、安定性、耐久性を実現した、冷却ファン製品です。
ファン側で回転モードを3モード選択でき、高回転モードで、5.5-22 dBという静けさを実現しています。
風量も62 CFM (Max)とかなりいいです。このファンに交換することで、自作PCをさらに静かにできますよ!交換してみてはいかがでしょうか?

Amazonで確認

また今回使う「M5Stack」は、「M5Stack Core 2」を使います。 タッチパネル、マイク、6軸IMU搭載で、一台でいろいろ遊べるモデルになっています。  

M5Stack Core2 開発キット

M5Stack Core2 開発キット

Arduino、UIFlow、MicroPythonに対応している組み込み開発キットです。
タッチスクリーン、マイク、IMUを使うことができ、従来のM5Stackよりも多機能なモデルです。 バッテリーも搭載しています。一台でいろいろと遊べる機器なのでおススメです!

Amazonで確認

 

また今回は、電子回路を作って動かしてみます。

といっても、はんだ付けはしません。「ブレッドボード」を使います。

使用する部品もはんだ付けしなくても利用できるものを使用しています。ブレッドボードや電子回路は、はじめて登場しますので、次の順で説明していきます。

  • ブレッドボードってなに?
  • 電源を準備する
  • 電子回路をつくる
  • ファンの回転を制御するための仕組みを知る(PWM制御)
  • プログラムを作って実行してみる

 

完成した際のイメージはこんな感じです。 M5Stackのボタンを押すことで、ファンの回転速度を増減させることができます。

おまけに画面上にファンの回転速度を表示してみましょう!  

 

 

ブレッドボードってなに?

電子回路を試作する際に便利なのがブレッドボードです。

表面にランド(穴)が開いていてある規則に沿ってそのランドが内部でつながっています。

このランドに抵抗やコンデンサ、センサーなどの電子部品を差し込むことで電子回路を作ることができるものです。

標準的なブレッドボードのランドのつながり方は、次の図のとおりです。

注意点として上下にある「+」と「ー」の内外が逆になっていることです。

意識してないと意図しない接続になって危険ですので必ず確認するようにしましょう!

また、ご紹介したブレッドボード以外にもランド間の接続が異なるものがありますので、ご準備されたブレッドボードの説明書をよく読んで使ってくださいね!

 

ブレッドボードのおすすめ

サンハヤト ブレッドボード SRH-21CE

安心のサンハヤト。両端に「+」と「ー」のラインがあります。電圧の違う回路を扱う場合に便利なブレッドボードです。最初はこれが一枚あるとよいと思います。

Amazonで確認
[スイッチサイエンス] 普通のブレッドボード

コスパ最強のブレッドボード。両端に「+」と「ー」のラインがあります。よく3枚で〇〇〇円というのはありますが、1枚から買えて価格も抑えてあるのでよいと思います。価格も良心的です。

Amazonで確認
 
げんろく
上記のように単品で購入していくのもいいですが、 次の商品のようなキットを1つ購入しておくとよいですよ!
SunFounder Raspberry pi スターター電子工作キット

Raspberry pi用と書かれていますが、Arduinoでも使えます。ブレッドボードやケーブルなど、一式が入っています。 これを一式購入して、不足分を追加購入する形がおススメです。

Amazonで確認

 

電源を準備する

冷却ファンを回転させるために必要な電源を準備します。

そのために今回使用する「Cooler Master MasterFan SF120M ARGB」の仕様を確認します。

冷却ファンの仕様を調べる

冷却ファンの仕様は次の通りです。

FAN仕様
・ファン速度:650-2000 RPM ± 10% (RPM)
・寸法:120 x 120 x 25 mm
・ベアリング:ボールベアリング
・ファン電源コネクタ:4-Pin PWM
・ファン定格電圧:12 VDC
・ファン定格電流:0.12A
120㎜FANはコネクタを2つ持っています。FAN制御用と、LEDライティング制御用です。
今回の記事では、FAN制御用のコネクタを使います。FAN制御用のコネクタの仕様は次のとおりです。
電源供給と回転制御信号、回転数センサー信号のための4つの線で構成されています。
Cooler Master MasterFan MF120 HaloのFANコネクタ
Cooler Master MasterFan MF120 HaloのFANコネクタ
左からGND(ー)、Vin(+)、回転センサー、回転制御という構成になっています。コネクタの向きはコネクタの上部にある突起部分で判断します。突起部分があるほうがGND側です。
FAN側
回路基板側
GND(ー)
GND
Vin(+)
12V Vin(+)
回転センサー
回転センサー 信号5V
回転制御
 
 
 
 
FAN回転制御 信号(PWM) 5V
 
FAN用のコネクタは、電源用12Vと信号用5Vの2つの電圧が必要です。
12Vのほうは比較的大きな電流(120mA)が流れることもあり、電源アダプタから直接取得します。
信号用5Vは、M5Stackと接続して使います。(M5Stackは、5Vで動作します。)
 

冷却ファン動作用の電源

この冷却ファンを回すためには12Vの電圧が必要です。

そのため、12Vの電源アダプターとDCジャックキットを使って電源を構成します。 次のものを使います。

電源アダプター(12V)

SUCCUL ACアダプター 12V 1.5A 大手メーカーOEM社製品 センタープラス スイッチング式 最大出力18W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品

12V1.5A出力の電源アダプターです。PSEマーク認証がとられているものを選定しています。
この商品はセンタープラスの電源アダプタです。

Amazonで確認

ブレッドボード用DCジャックDIP化キット(完成版)

入手元:秋月電子
型番:AE-DC-POWER-JACK-DIP
DCジャックをユニバーサル基板や、ブレッドボードにつけられるようにするキットです。
今回は完成品を使用します。この商品はセンタープラスのDCジャックです。

秋月電子さんの通販サイトURLはこちらです。
 

回転センサーの仕様を調べる

実際にファンの回転数を制御した結果、きちんとファンの回転数が意図したものになっているかを確認するため、FAN制御用についている回転センサーを使います。

回転センサーのコネクタピンから冷却ファンが回転した際に発生するパルス信号を取得し、パルス信号の周期から回転数を計算するという方法を考えてみます。

 

パルスセンサーの仕組みとは?

パルスセンサーは,ファン1回転につき,2周期の矩形波(パルス波形)を出力するセンサーで,回転速度を検出するのに,最適なセンサーです。

出力される波形は、次のようなイメージです。
1回転で2周期ということは、波が2回来るということなので、波が下がるタイミングから次の波が下がるタイミングまでが1周期ということになります。

今回は、パルスセンサーの信号をM5StackのGPIOで受信し、波が高い状態(HIGH)から低い状態(LOW)に下がるタイミングで外部割込みを発生させ、Intervalを求める処理を実行します。

外部割込みには、attachInterruptというArduinoの機能を使います。

関数  
attachInterrupt(
        interrupt,
        function,
        mode)

外部割込みを発生させます。
interrupt:割り込み番号
function:割り込み発生時に呼び出す関数
mode: 割り込みを発生させるトリガ

modeで指定する値は、次のとおりで、今回はFALLINGを使います。
 LOW :ピンがLOWのとき発生
 CHANGE: ピンの状態が変化したときに発生
 RISING :ピンの状態がLOWからHIGHに変わったときに発生
 FALLING :ピンの状態がHIGHからLOWに変わったときに発生

これでプログラムから回転パルスを読み取る仕組みができました。

 

回転センサーの回路の「浮き」を解消するプルアップ抵抗とは?

回転センサー(パルスセンサー )のコネクタピンは、「オープンコレクト」になっていて、次の図のようにM5Stackと直接つなぐだけではセンサーが1を出力しても1の電位になりません。


電源がつながっていない(浮いた状態である)からです。

こういった場合は、プルアップをする必要があります。

今回の冷却ファンの回転センサーにはだいたい5V、10mAの電流が流れるようにしたいため、プルアップをする際には次の図のように5V電源とセンサーの間に抵抗を入れて調節します。
これを「プルアップ抵抗」といいます。

今回は5Vの電源を追加して、1kΩの抵抗を入れました。

(計算上は0.5kΩでよいかと思いましたが手元にあるもので代用しました。)

また、M5Stackの電源も同じ5Vの電源からとるようにしました。

これでパソコンに接続することなく冷却ファンの回転速度制御と回転数の測定ができます。

 

M5Stackとパルスセンサー動作用の電源

M5Stackへの電源供給用および、回転センサー(パルスセンサー)へのプルアップ用として5Vの電源も準備します。

5Vの電源アダプターとDCジャックキットを使って電源を構成します。 次のものを使います。

電源アダプター(5V)

Salcar【PSE取得済み】AC 電源アダプター DC 5V 1.5A 大手メーカー 高信頼品 最大出力7.5W スイッチング式 センタープラス 外径5.5mm×内径2.5mm 1年保証

5V1.5出力の電源アダプターです。PSEマーク認証がとられているものを選定しています。
この商品はセンタープラスの電源アダプタです。
外径5.5㎜、内径2.1㎜のアダプター付きのものです。

Amazonで確認

ブレッドボード用DCジャックDIP化キット(完成版)

入手元:秋月電子
型番:AE-DC-POWER-JACK-DIP
DCジャックをユニバーサル基板や、ブレッドボードにつけられるようにするキットです。
今回は完成品を使用します。この商品はセンタープラスのDCジャックです。

秋月電子さんの通販サイトURLはこちらです。
 

電子回路をつくる

M5Stack Core 2 の準備

今回使った「M5Stack Core 2 」は、購入時のままではGPIOにはアクセスできません。
底面にIMUとマイクの基板が取り付けられているからです。
FAN速度制御用として使うGPIO「G19」「G26」「GND」「5V」にアクセスするために、IMU/マイク基板を取り外します。
<取り外し前>
<取り外し後>
 

回路の作成

いよいよブレッドボードに部品をつけて電子回路を作成します。 
ブレッドボード上に回路を組むと次のようになります。 今回は12V用と5V用の2つの電圧ごとにブレッドボードを分けています。
回路作成に自信のない方は、M5Stackへの給電は、次にご紹介するように、パソコンからUSBケーブルで行わないようにしたほうが良いかもしれません。準備品は多いですが、想定外のことが起きてパソコン故障につながらないことも重要です。
(また、次の注意書きにもありますが、配線を間違えるとM5Stackなどが故障する(焼けてしまう)ので十分に注意しましょう。)
ブレッドボード以外に、各部品をつなぐケーブルとジャンパワイヤ/線を準備します。
FAN用コネクタ接続用 ピンヘッダ(1×4Pin)
ブレッドボード①上の12VとGNDの結線 ジャンパワイヤ(5つ)
M5Stackとブレッドボード①接続 ジャンパ線(4本)
抵抗 1KΩの抵抗(1つ)

 

ブレッドボード以外に、各部品をつなぐケーブルとジャンパワイヤ/線を準備します。
ブレッドボード②上の5VとGNDの結線 ジャンパワイヤ(2つ)
ブレッドボード間接続 ジャンパ線(2本)

 

ピンヘッダ

秋月電子さんのロングピンヘッダ1×40
両端ロングピンヘッダ 1×40 (40P 6.1)
入手元:秋月電子
型番:PH-1x40SG(6.1/6.1)

両端のピンが長いものになります。冷却FANと接続する側のピンとして使います。
40ピンありますので、4ピン分を切って使います。

秋月電子さんの通販サイトURLはこちらです。

ジャンパワイヤ/ジャンパ線

サンハヤト ジャンプワイヤキット SKS-100 単線タイプでよく使用する短めジャンプワイヤのセット品

ブレッドボード上に配線する際に便利なワイヤです。
単線タイプなのでボードに密着させて配線できるので線がごちゃごちゃせず、わかりやすくなります。

Amazonで確認
サンハヤト ジャンプワイヤ SPP-200 200ミリ

ブレッドボードとM5Stackなどのコネクタを持つ部品をつなぐ配線材です。
オス(pin)ーオス(pin)の200mmの線になります。いろいろな色があるので配線をわかりやすく分けられます。

Amazonで確認
 
 

ファンの回転を制御するための仕組みを知る(PWM制御)

 
すけろく
回路を作るのはよいが、冷却ファンというのは どのようにして動きを調整するのかな?
 
げんろく
そうだった。 回路作成に集中して、大切なことを語ってなかったな。
そのあたりを説明しよう。

PWM制御とはなにか

みなさんはPWM(Pulse Width Modulation)という言葉を聞いたことはありますか?
私も電子工作をはじめた頃は、「なんじゃそれ?」という状態でした。
でも、いろいろな場所でこのPWMにより、モーター制御などが行われています。
単純にいうと、「電気のオンとオフの間隔によって電力を制御する」というものです。
勉強し始めの頃、よくお世話になった東芝さんのサイトには以下のように書かれています。
パルス列のオンとオフの一定周期を作り、 オンの時間幅を変化させる電力制御方式
 
げんろく
バルス!」ではないぞ!
パルスってなに?
パルスとは、極めて短い時間だけ流れる電流や電波。また、そのくりかえしのことです。
イメージ的には次のような繰り返しの波のことです。 また、ONの状態の幅を「パルス幅」といいます。

例えばON状態のときに電圧(V)で電流(A)が流れるとすると この時の一定時間あたりの電力量(W=V×A)はON状態部分の面積の和になります。

パルス幅(オンの時間幅)を変化させるって?
一定の周波数におけるパルス幅の割合を変化させることで実現します。
例えば前図のパルス幅(ON状態)を2倍にすると次のような波形になると予想できますよね。
この時、一定時間あたりの電力量も元の2倍になります。



ここでON状態の立ち上がりから次のON状態の立ち上がりまでに注目します。
この時間のことを「周期」といいます。 この周期が1秒間あたりに何回発生するかを「周波数」といいます。



例えば100Hzの周波数 は、1秒間に周期が100回発生することから周期は1ms(ミリ秒)になります。
ここで注意しておきたいのは、この情報だけではパルス幅はわからないということです。
パルス幅を周期に対してどのくらいの割合にするかを表す比率を「デューティ比(%)といいます
デューティ比の変化による信号のイメージは次のイメージになります。



周波数を一定にした状態でデューティ比を変化させることでパルス幅を増減でき、実行電圧や電力を変化させることができます。
この制御方法がPWM制御です。
 

冷却ファンもPWM制御で回転速度を変えられる

冷却ファンもモーターなどと同じような仕組みになっているため、PWM制御で実行電圧や電力を変化させることで回転速度を変化させることができます。
  • デューティ比が低い:回転速度が遅くなる
  • デューティ比が高い:回転速度が速くなる 
 

M5StackでのPWM制御の設定方法

M5Stackは、ESP32というマイクロコンピュータが入っています。
これはArduinoのライブラリが基本としているマイクロコンピュータとはちがいます。
そのため、M5Stackでは以下のクラスを使用してPWM制御の設定やデューティ比の変更を行います。

 

PWM関連設定

関数 説明
ledcSetup(Channel, FREQ, BIT) PWM信号の設定を行います。
Channel:PWM信号を発信するチャネルの指定(uint8_t)
FREQ:PWM信号の周波数を指定(double)
BIT:分解能を~16ビットで指定(uint8_t)
ledcAttachPin(GPIO, Channel); 指定したGPIOにチャネルを割り当てます。 ここで指定したチャネルを上記のledcSetupで指定します。
※M5StackでPWMが使用できるGPIOは任意になっています。
PWMの周波数におけるパルス幅をどのくらいの精度で制御するかを指定するものです。 例えばPWMの周波数を100Hz(周期:1ms)として、分解能を8ビットと指定します。 8ビットは256とおり表すことができるので、1ms÷256=0.0039ms=3.9μs単位となります。 デューティ比:50%にしたい場合は「128」を75%にしたい場合は「192」を指定することになります。より細かく制御する場合は16ビットまで指定できるようです。

 

PWM開始設定

関数 説明
ledcWrite(channel, Duty) PWM信号の開始をします。
Chanel:PWM信号を発信するチャネルの指定(uint8_t)
Duty:デューティ比を分解能に応じて指定(uint32_t)
 
 

M5Stackから冷却ファンの回転を制御してみよう

それではPWM制御を使用してM5Stackから冷却ファンの回転速度を変化させてみましょう。
PWMの設定は次の通りです。
  • 起動時は、デューティ比は0%に設定
  • M5Stackのディスプレイ上のボタンを押すとデューティ比が 0%→25%→50%→75%→100%という形で変化
  • 周波数は25KHz、分解能は8ビット
  • 回転パルスを受信し、回転速度(rpm)を計算
 
今回使う冷却ファンの回転速度は、650-2000 rpm ± 10%なので、デューティ比0%:650rpm、100%:2000rpm付近で回転します。
M5Stackのディスプレイには、デューティ比と回転速度を表示します。  
 

冷却ファン回転速度制御プログラム

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

使用するM5Stackのモデルによりプログラムが異なりますので、次から適宜選択してください。

 Arduino IDE スケッチ例

※右側の「+」を押すとプログラムが表示されます。

M5Stack Core2用のプログラム(タッチパネル)
 
M5Stack 用のプログラム(物理ボタン)

 

 M5Stackへの書き込み

  1. 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  2. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。 ボード:「M5Stack Arduino」-「M5Stack-Core2」、または「M5Stack-Core-ESP32」、「M5Stack-Tough」 「Partition Scheme」で「Not OTA(Large App)」を選択します。
  3. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。
 

 プログラム実行結果

M5Stackのディスプレイに次のようにPWMデューティ比(%)、回転速度(RPM)が表示されます。
タッチスクリーンのM5Stack Core2は画面下の左右のボタンを押すことで、回転速度の増減ができます。
物理ボタン搭載のM5Stackは、左右のボタンを押すことで、回転速度の増減ができます。
 

 

編集後記

いかがだったでしょうか。

M5Stackを使って、ファンコントローラを作ってみました。

電子回路をブレッドボードに作っていますが、実際にやってみると面白いですよ。

何より、うまく動いた時の体験は素晴らしいものです。

最初は、揃えるものも何かと多くなりますが、一度揃えてしまえば、いろんなものが作れるようになります。

ぜひ、皆さんもチャレンジしてみてくださいね!

 

今回の記事は以上になります。

最後までご覧いただきありがとうございました。

 

これからはじめる方にお勧めの参考図書はこちら!

記事内でご紹介した商品はこちら!

Cooler Master MasterFan SF120M ARGB

CoolerMaster MasterFan SF120M ARGB

自作パソコンのパーツメーカーであるCooler Masterの120㎜冷却ファンです。
防振モーター、振動を抑えるダンピングフレームデザインなど、工業用グレードの素材を用いていて、高性能、安定性、耐久性を実現した、冷却ファン製品です。
ファン側で回転モードを3モード選択でき、高回転モードで、5.5-22 dBという静けさを実現しています。
風量も62 CFM (Max)とかなりいいです。このファンに交換することで、自作PCをさらに静かにできますよ!交換してみてはいかがでしょうか?

Amazonで確認

また今回使う「M5Stack」は、「M5Stack Core 2」を使います。 タッチパネル、マイク、6軸IMU搭載で、一台でいろいろ遊べるモデルになっています。  

M5Stack Core2 開発キット

M5Stack Core2 開発キット

Arduino、UIFlow、MicroPythonに対応している組み込み開発キットです。
タッチスクリーン、マイク、IMUを使うことができ、従来のM5Stackよりも多機能なモデルです。 バッテリーも搭載しています。一台でいろいろと遊べる機器なのでおススメです!

Amazonで確認

 

ブレッドボードのおすすめ

サンハヤト ブレッドボード SRH-21CE

安心のサンハヤト。両端に「+」と「ー」のラインがあります。電圧の違う回路を扱う場合に便利なブレッドボードです。最初はこれが一枚あるとよいと思います。

Amazonで確認
[スイッチサイエンス] 普通のブレッドボード

コスパ最強のブレッドボード。両端に「+」と「ー」のラインがあります。よく3枚で〇〇〇円というのはありますが、1枚から買えて価格も抑えてあるのでよいと思います。価格も良心的です。

Amazonで確認
 
げんろく
上記のように単品で購入していくのもいいですが、 次の商品のようなキットを1つ購入しておくとよいですよ!
SunFounder Raspberry pi スターター電子工作キット

Raspberry pi用と書かれていますが、Arduinoでも使えます。ブレッドボードやケーブルなど、一式が入っています。 これを一式購入して、不足分を追加購入する形がおススメです。

Amazonで確認

電源アダプター(12V)

SUCCUL ACアダプター 12V 1.5A 大手メーカーOEM社製品 センタープラス スイッチング式 最大出力18W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品

12V1.5A出力の電源アダプターです。PSEマーク認証がとられているものを選定しています。
この商品はセンタープラスの電源アダプタです。

Amazonで確認

電源アダプター(5V)

Salcar【PSE取得済み】AC 電源アダプター DC 5V 1.5A 大手メーカー 高信頼品 最大出力7.5W スイッチング式 センタープラス 外径5.5mm×内径2.5mm 1年保証

5V1.5出力の電源アダプターです。PSEマーク認証がとられているものを選定しています。
この商品はセンタープラスの電源アダプタです。
外径5.5㎜、内径2.1㎜のアダプター付きのものです。

Amazonで確認

ブレッドボード用DCジャックDIP化キット(完成版)

入手元:秋月電子
型番:AE-DC-POWER-JACK-DIP
DCジャックをユニバーサル基板や、ブレッドボードにつけられるようにするキットです。
今回は完成品を使用します。この商品はセンタープラスのDCジャックです。

秋月電子さんの通販サイトURLはこちらです。

ピンヘッダ

秋月電子さんのロングピンヘッダ1×40
両端ロングピンヘッダ 1×40 (40P 6.1)
入手元:秋月電子
型番:PH-1x40SG(6.1/6.1)

両端のピンが長いものになります。冷却FANと接続する側のピンとして使います。
40ピンありますので、4ピン分を切って使います。

秋月電子さんの通販サイトURLはこちらです。

ジャンパワイヤ/ジャンパ線

サンハヤト ジャンプワイヤキット SKS-100 単線タイプでよく使用する短めジャンプワイヤのセット品

ブレッドボード上に配線する際に便利なワイヤです。
単線タイプなのでボードに密着させて配線できるので線がごちゃごちゃせず、わかりやすくなります。

Amazonで確認
サンハヤト ジャンプワイヤ SPP-200 200ミリ

ブレッドボードとM5Stackなどのコネクタを持つ部品をつなぐ配線材です。
オス(pin)ーオス(pin)の200mmの線になります。いろいろな色があるので配線をわかりやすく分けられます。

Amazonで確認