Arduino-DCモーター

この章では、さまざまなタイプのモーターをArduinoボード(UNO)と接続し、モーターを接続してボードから駆動する方法を示します。

モーターには3つの異なるタイプがあります-

  • DCモーター
  • サーボモーター
  • ステッピングモーター

DCモーター(直流モーター)は最も一般的なタイプのモーターです。DCモーターには通常、正と負の2つのリードがあります。これら2本のリード線をバッテリーに直接接続すると、モーターが回転します。リード線を切り替えると、モーターは反対方向に回転します。

Warning−Arduinoボードピンから直接モーターを駆動しないでください。ボードが破損する恐れがあります。ドライバ回路またはICを使用してください。

この章を3つの部分に分けます-

  • モーターを回転させるだけ
  • モーター速度を制御する
  • DCモーターの回転方向を制御する

必要なコンポーネント

次のコンポーネントが必要になります-

  • 1x ArduinoUNOボード
  • 1xPN2222トランジスタ
  • 1x小型6VDCモーター
  • 1x1N4001ダイオード
  • 1x270Ω抵抗

手順

回路図に従って、下の画像に示すように接続します。

予防

接続する際は、以下の点に注意してください。

  • まず、トランジスタが正しい方法で接続されていることを確認してください。トランジスタの平らな面は、配置に示されているようにArduinoボードに面している必要があります。

  • 次に、ダイオードのストライプの端は、画像に示されている配置に従って、+ 5Vの電力線に向かっている必要があります。

スピンControlArduinoコード

int motorPin = 3;

void setup() {

}

void loop() {
   digitalWrite(motorPin, HIGH);
}

注意すべきコード

トランジスタはスイッチのように機能し、モーターへの電力を制御します。Arduinoのピン3は、トランジスタのオンとオフを切り替えるために使用され、スケッチでは「motorPin」という名前が付けられています。

結果

Arduinoのピン番号3がハイになると、モーターはフルスピードで回転します。

モーター速度制御

以下は、Arduinoボードに接続されたDCモーターの回路図です。

Arduinoコード

int motorPin = 9;

void setup() {
   pinMode(motorPin, OUTPUT);
   Serial.begin(9600);
   while (! Serial);
   Serial.println("Speed 0 to 255");
}

void loop() {
   if (Serial.available()) {
      int speed = Serial.parseInt();
      if (speed >= 0 && speed <= 255) {
         analogWrite(motorPin, speed);
      }
   }
}

注意すべきコード

トランジスタはスイッチのように機能し、モーターの電力を制御します。Arduinoのピン3は、トランジスタのオンとオフを切り替えるために使用され、スケッチでは「motorPin」という名前が付けられています。

プログラムが起動すると、モーターの速度を制御するための値を指定するように求められます。シリアルモニターに0〜255の値を入力する必要があります。

'loop'関数では、コマンド 'Serial.parseInt'を使用して、シリアルモニターにテキストとして入力された数値を読み取り、 'int'に変換します。ここに任意の番号を入力できます。次の行の「if」ステートメントは、数値が0〜255の場合、この数値を使用してアナログ書き込みを行うだけです。

結果

DCモーターは、シリアルポートを介して受信した値(0〜250)に応じて異なる速度で回転します。

スピン方向制御

リード線を交換せずにDCモーターのスピンの方向を制御するには、と呼ばれる回路を使用できます。 H-Bridge。Hブリッジは、モーターを両方向に駆動できる電子回路です。Hブリッジは、さまざまなアプリケーションで使用されます。最も一般的なアプリケーションの1つは、ロボットのモーターを制御することです。回路図が「H」のように接続された4つのトランジスタを使用しているため、Hブリッジと呼ばれます。

ここではL298HブリッジICを使用します。L298は、DCモーターとステッピングモーターの速度と方向を制御でき、2つのモーターを同時に制御できます。その定格電流は、各モーターで2Aです。ただし、これらの電流では、ヒートシンクを使用する必要があります。

必要なコンポーネント

次のコンポーネントが必要になります-

  • 1×L298ブリッジIC
  • 1×DCモーター
  • 1×ArduinoUNO
  • 1×ブレッドボード
  • 10×ジャンパー線

手順

以下は、ArduinoUnoボードへのDCモーターインターフェースの概略図です。

上の図は、L298ICを接続して2つのモーターを制御する方法を示しています。各モーターには3つの入力ピンがあります。Motor1にはInput1(IN1)、Input2(IN2)、Enable1(EN1)、Motor2にはInput3、Input4、Enable2です。

この例では1つのモーターのみを制御するため、ArduinoをL298 ICのIN1(ピン5)、IN2(ピン7)、およびEnable1(ピン6)に接続します。ピン5と7はデジタル、つまりONまたはOFF入力ですが、ピン6はモーター速度を制御するためにパルス幅変調(PWM)信号を必要とします。

次の表は、IN1とIN2のデジタル値に基づいてモーターが回転する方向を示しています。

1で IN2 運動行動
ブレーキ
1 フォワード
1 後方
1 1 ブレーキ

IC L298のピンIN1はArduinoのピン8に接続され、IN2はピン9に接続されます。Arduinoのこれら2つのデジタルピンは、モーターの方向を制御します。ENICのAピンはArduinoのPWMピン2に接続されています。これにより、モーターの速度が制御されます。

Arduinoのピン8と9の値を設定するには、digitalWrite()関数を使用し、ピン2の値を設定するには、analogWrite()関数を使用する必要があります。

接続手順

  • 5VとICのグランドをそれぞれ5VとArduinoのグランドに接続します。
  • モーターをICのピン2と3に接続します。
  • ICのIN1をArduinoのピン8に接続します。
  • ICのIN2をArduinoのピン9に接続します。
  • ICのEN1をArduinoのピン2に接続します。
  • SENSをICのピンをグランドに接続します。
  • Arduino USBケーブルを使用してArduinoを接続し、ArduinoIDEソフトウェアを使用してプログラムをArduinoにアップロードします。
  • 電源、バッテリー、またはUSBケーブルを使用してArduinoボードに電力を供給します。

Arduinoコード

const int pwm = 2 ; //initializing pin 2 as pwm
const int in_1 = 8 ;
const int in_2 = 9 ;
//For providing logic to L298 IC to choose the direction of the DC motor

void setup() {
   pinMode(pwm,OUTPUT) ; //we have to set PWM pin as output
   pinMode(in_1,OUTPUT) ; //Logic pins are also set as output
   pinMode(in_2,OUTPUT) ;
}

void loop() {
   //For Clock wise motion , in_1 = High , in_2 = Low
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,LOW) ;
   analogWrite(pwm,255) ;
   /* setting pwm of the motor to 255 we can change the speed of rotation
   by changing pwm input but we are only using arduino so we are using highest
   value to driver the motor */
   //Clockwise for 3 secs
   delay(3000) ;
   //For brake
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,HIGH) ;
   delay(1000) ;
   //For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH
   digitalWrite(in_1,LOW) ;
   digitalWrite(in_2,HIGH) ;
   delay(3000) ;
   //For brake
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,HIGH) ;
   delay(1000) ;
}

結果

モーターは最初に時計回り(CW)方向に3秒間作動し、次に反時計回り(CCW)方向に3秒間作動します。