Arduinoを使って簡単にDC(直流)モータを回してみます。
03でLEDをPWM制御しましたが、その時のピン(ポート)を使ってモーターの回転数も調整してみたいと思います。
<補足>
抵抗R1はダンパ抵抗と呼ばれるものです。今回は100Ω程度に設定します。
抵抗R2はR1の100倍程度、10kに設定します。
制御素子に「MOSFET」を使います。FETは電圧制御素子ですので、マイコンなどからの微電流信号でも比較的簡単に扱えます。
モータは、小型DCモータ(1A以下)を想定しています。
FETに並列に接続されているダイオードは、モータの逆起電力防止用です。
詳しくは触れませんが、一般整流用ダイオードでいいのでつけましょう。
##実際の結線
ブレッドボード上に結線してみました。
ぐちゃぐちゃで すみません motor電源はUSBからもらいます。
回路図にありませんが、GNDはArduinoボードと共通にします。
早速、結線して電源投入・・・の前にいくつか注意が
###回路上の注意
電源電圧は、モータブラシの定格電圧とFETの定格電圧を超えないようにしてください。また、FETに接続されている抵抗は、R1=100Ω位、R2=10kΩ位に設定してください。
R1をダンパ抵抗と呼ばれています。
FETのゲートには、わずかですがコンデンサの成分があり、ダンパ抵抗を介さずに直接接続すると、瞬時に大電流が流れしまいポートを破壊する恐れがあります。
今回は、PWM信号のように高速でON/OFF繰り返す制御をしますので、必ず設置してください。
###プログラム上の注意
LEDのプログラムは実行後(電源投入後)直ちにLEDが点灯し始めましたが、モータなどはいきなり動き出すとびっくりするだけでなく、危険なのでスタートスイッチのような機能を付けましょう。
スイッチの回路図を追加します。
えらくシンプルです。
Arduinoのピンには、プルアップ機能が備わっていて、回路上(スイッチの手前)にプルアップ抵抗を挿入する必要がありません。助かります。
これらを踏まえて、スタートスイッチ付のプログラムを作ってみました。
##モータ制御プログラム1
void setup()
{
pinMode(14, INPUT_PULLUP);
}
void loop()
{
//pin14の信号が来るまで待つ
while(digitalRead(14) != 0);
analogWrite(6,125);
}
pin14に接続されているスイッチを押した瞬間にモーターが回りだします。
しかし、電源を切らない限り止まりません。
###ストップスイッチも付けたい
いや付けないと止まらない。
##ストップスイッチpin15を追加する。
###ストップ機能追加プログラム
byte ON_flag=0;
void setup()
{
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT_PULLUP);
}
void loop()
{
//スタートスイッチとストップスイッチを監視する
//スタートスイッチ
if(digitalRead(14) == 0)
ON_flag = 1;
//ストップスイッチ
if(digitalRead(15) == 0)
ON_flag = 0;
if(ON_flag)//flagが1ならモータon
analogWrite(6,125);
else //flagが0ならモータoff
analogWrite(6,0);
}
一度スイッチを押したら動作(on,off)を継続するために、動作状態を保持する変数ON_flagを用意すると調子がいい。
###確認1
motorが動作したら、パワーを80%にしてみたい
###確認2
motorが動き出す最小の値はいくつか、調べたい