Arduino - 直流電機



在本章中,我們將介紹如何將不同型別的電機與 Arduino 開發板(UNO)連線,並向您展示如何連線電機並從開發板上驅動它。

電機主要有三種類型:

  • 直流電機
  • 伺服電機
  • 步進電機

直流電機(直流電機)是最常見的電機型別。直流電機通常只有兩個引線,一個正極和一個負極。如果將這兩個引線直接連線到電池,電機將旋轉。如果交換引線,電機將反方向旋轉。

DC Motor

警告 - 不要直接從 Arduino 開發板引腳驅動電機。這可能會損壞開發板。請使用驅動電路或積體電路。

我們將把本章分成三個部分:

  • 讓電機旋轉
  • 控制電機速度
  • 控制直流電機旋轉方向

所需元件

您將需要以下元件:

  • 1x Arduino UNO 開發板
  • 1x PN2222 三極體
  • 1x 小型 6V 直流電機
  • 1x 1N4001 二極體
  • 1x 270 Ω 電阻

步驟

按照電路圖,並按照下圖所示進行連線。

DC Motor Connections

注意事項

連線時請注意以下事項。

  • 首先,確保三極體連線正確。三極體的扁平面應朝向 Arduino 開發板,如示意圖所示。

  • 其次,二極體的帶條紋的一端應朝向 +5V 電源線,如示意圖所示。

旋轉控制 Arduino 程式碼

int motorPin = 3;

void setup() {

}

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

程式碼說明

三極體充當開關,控制電機電源。Arduino 引腳 3 用於開啟和關閉三極體,並在程式草圖中命名為“motorPin”。

結果

當 Arduino 引腳 3 變為高電平時,電機將以全速旋轉。

電機速度控制

以下是連線到 Arduino 開發板的直流電機的原理圖。

Motor Speed Control

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 之間的值。

Command Window

在“迴圈”函式中,命令“Serial.parseInt”用於讀取序列埠監視器中以文字形式輸入的數字並將其轉換為“int”。您可以在此處輸入任何數字。“if”語句在下一行只是使用此數字執行模擬寫入,如果數字在 0 到 255 之間。

結果

直流電機將根據透過序列埠接收到的值(0 到 250)以不同的速度旋轉。

旋轉方向控制

為了控制直流電機的旋轉方向,無需交換引線,您可以使用一個稱為H 橋的電路。H 橋是一種電子電路,可以雙向驅動電機。H 橋用於許多不同的應用。最常見的應用之一是在機器人中控制電機。它被稱為 H 橋,因為它使用四個以特定方式連線的三極體,使得原理圖看起來像一個“H”。

我們將在此處使用 L298 H 橋積體電路。L298 可以控制直流電機和步進電機的速度和方向,並且可以同時控制兩個電機。每個電機的額定電流為 2A。但是,在這些電流下,您需要使用散熱器。

Spin Direction Control

所需元件

您將需要以下元件:

  • 1 × L298 橋積體電路
  • 1 × 直流電機
  • 1 × Arduino UNO
  • 1 × 麵包板
  • 10 × 跳線

步驟

以下是直流電機連線到 Arduino Uno 開發板的原理圖。

Spin Direction Control Connections

上圖顯示瞭如何連線 L298 積體電路以控制兩個電機。每個電機有三個輸入引腳,電機 1 的 Input1 (IN1)、Input2 (IN2) 和 Enable1 (EN1),以及電機 2 的 Input3、Input4 和 Enable2。

由於在本例中我們將只控制一個電機,因此我們將 Arduino 連線到 L298 積體電路的 IN1 (引腳 5)、IN2 (引腳 7) 和 Enable1 (引腳 6)。引腳 5 和 7 是數字引腳,即開或關輸入,而引腳 6 需要脈衝寬度調製 (PWM) 訊號來控制電機速度。

下表顯示了根據 IN1 和 IN2 的數字值電機將旋轉的方向。

IN1 IN2 電機行為
制動
1 正轉
1 反轉
1 1 制動

積體電路 L298 的 IN1 引腳連線到 Arduino 的引腳 8,而 IN2 連線到引腳 9。Arduino 的這兩個數字引腳控制電機的方向。積體電路的 EN A 引腳連線到 Arduino 的 PWM 引腳 2。這將控制電機的速度。

為了設定 Arduino 引腳 8 和 9 的值,我們使用了 digitalWrite() 函式,而為了設定引腳 2 的值,我們必須使用 analogWrite() 函式。

連線步驟

  • 將積體電路的 5V 和地分別連線到 Arduino 的 5V 和地。
  • 將電機連線到積體電路的引腳 2 和 3。
  • 將積體電路的 IN1 連線到 Arduino 的引腳 8。
  • 將積體電路的 IN2 連線到 Arduino 的引腳 9。
  • 將積體電路的 EN1 連線到 Arduino 的引腳 2。
  • 將積體電路的 SENS A 引腳連線到地。
  • 使用 Arduino USB 線纜連線 Arduino,並使用 Arduino IDE 軟體將程式上傳到 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 秒。

廣告