04ArduinoでDCモータを簡単に回してみる


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

robot19
void setup() 
{ 
  pinMode(14, INPUT_PULLUP);
}
void loop() 
{ 

  //pin14の信号が来るまで待つ
  while(digitalRead(14) != 0);

  analogWrite(6,125);

}

pin14に接続されているスイッチを押した瞬間にモーターが回りだします。
しかし、電源を切らない限り止まりません。

ストップスイッチも付けたい

いや付けないと止まらない。

ストップスイッチpin15を追加する。

ストップ機能追加プログラム

robot19
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が動き出す最小の値はいくつか、調べたい