Arduino UNO R4 MinimaでDCファンを動かしてみた。
回転速度も調整できるとPerplexityに教えてもらったので、本当にできるのか実践する。
使ったもの
- Arduino UNO R4 Minima
- DCファン 5V 2ピン
- VS Code(PlatformIO)
- 抵抗(270Ω)
- ダイオード(1N4007C、逆起電力保護用)
- トランジスタ(S8050、ファンの電流を制御)
- ブレッドボード(接続用)
回路図
ソースコード
#include <Arduino.h>
int fanPin = 9;
int pwmValue = 0;
void setup()
{
pinMode(fanPin, OUTPUT);
}
void loop()
{
pwmValue = 0;
analogWrite(fanPin, pwmValue);
delay(5000);
pwmValue = 128;
analogWrite(fanPin, pwmValue);
delay(5000);
pwmValue = 255;
analogWrite(fanPin, pwmValue);
delay(5000);
}
仕組み
PWMをトランジスタのベースに入力することで、スイッチのオン、オフが繰り返されてファンに流れる平均電流が変わり回転数を制御できる。
ハマったところ①
最初一通り実装したが動かなかった。上記で一度組んでみたがなぜかずっとファンが回り続けてしまう。本来であればanalogWrite(fanPin, 0)
のところでファンが止まるはずだが、何秒待ってもファンが止まらない。
1日経ってもわからず苦戦していたが、ベースにPWMを印加しなくてもファンが回ることから、ピン配置が間違っているのではないかと考えた。ピン配置はえくぼ(ECB)で覚えていたが、どうやらこのS8050はEBCみたいで繋ぎ変えたところ、正しく動作した。
データシートも見ていたが読み解けず。結局、このトランジスタを使っている他の方が作った回路や説明を見て知った。
ハマったところ②
ハマったところ①が解消してファンがPWMのDuty比によって回転したり、静止したりするようになったが、Dutyが100%の時にもっと回ってよさそうなのにあまり勢いがない。電流を測ってみるとそもそもベース電流が想定の3分の1ほどしか流れていなかった。
ベースの抵抗を小さくしても変わらずお手上げ状態だったが、Arduinoの仕様を確認してみると、今回使っているArduino Uno R4 Minimaは各I/Oピンの許容出力電流が8mAになっており、これによって流れないようになっていた様子。全出力端子の総和の許容出力電流も60mAになっていた。
参考にさせていただいた記事はこちら
まとめ
今回、Arduinoを使ってDCファンを動かすというのをやってみて、想定とは違っていたが一応動かすことができた。
かなり学ぶことが多かったので、実施してよかったと思う。
再度、部品を選定して再挑戦したい!
以下、メモ
フライバックダイオード
モーターのようなコイルに流れていた電流を急に遮断すると、コイルは流れていた電流を維持しようとして逆向きの高電圧(逆起電力)を発生させてしまう。
ダイオードを入れておくことでこの逆起電力を逃がすための道を作っている。そのため、ダイオードはモーターと並列につなぐが、カソード(マイナス)側をプラスの方に繋いでいる。
トランジスタ
スイッチや電流の増幅器として利用される。
今回はArduinoのPWMで比較的大きな電流を制御するために利用している。