Arduino - 直流電機

在本章中,我們將使用 Arduino 板(UNO)連線不同型別的電機,並向你展示如何連線電機並將其從電路板上驅動。

有三種不同型別的電機 -

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

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

直流電機

警告 - 請勿直接從 Arduino 板引腳驅動電機。這可能會損壞電路板。使用驅動電路或 IC。

我們將本章分為三部分 -

  • 只需讓你的電機旋轉
  • 控制電機速度
  • 控制直流電機的旋轉方向

需要的元件

你將需要以下元件 -

  • 1x Arduino UNOArduino 板
  • 1x PN2222 電晶體
  • 1x 小型 6V 直流電機
  • 1x 1N4001 二極體
  • 1x270Ω 電阻

程式

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

直流電機連線

注意事項

進行連線時請採取以下預防措施。

  • 首先,確保電晶體以正確的方式連線。如圖所示,電晶體的扁平側面應朝向 Arduino 板。

  • 其次,根據影象中所示的佈置,二極體的條紋端應朝向+5V 電源線。

Spin ControlArduino Code

int motorPin = 3;

void setup() {

}

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

程式碼注意

電晶體就像一個開關,控制電機的電源。Arduino 引腳 3 用於開啟和關閉電晶體,並在程式中命名為 motorPin

結果

當 Arduino 引腳編號 3 變高時,電機將全速旋轉。

電機速度控制

以下是連線到 Arduino 板的直流電機的示意圖。

電機速度控制

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。你可以在這裡輸入任何數字。如果數字在 0 到 255 之間,則下一行中的 if 語句只使用此數字進行模擬寫入。

結果

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

旋轉方向控制

為了控制直流電機的旋轉方向,無需更換引線,你可以使用稱為 H 橋的電路。H 橋是可以在兩個方向上驅動電動機的電子電路。H 橋用於許多不同的應用中。最常見的應用之一是控制機器人中的電機。它被稱為 H 橋,因為它使用四個電晶體連線,使得原理圖看起來像** H**。

我們將在這裡使用 L298 H 橋 IC。L298 可以控制直流電機和步進電機的速度和方向,可以同時控制兩臺電機。每個電機的額定電流為 2A。但是,在這些電流下,你需要使用散熱片。

旋轉方向控制

需要的元件

你將需要以下元件 -

  • 1×L298 橋接 IC
  • 1×直流電機
  • 1×Arduino UNO
  • 1×麵包板
  • 10×跳線

程式

以下是 Arduino Uno 板的直流電機介面示意圖。

旋轉方向控制連線

上圖顯示瞭如何連線 L298 IC 以控制兩個電機。每個電機有三個輸入引腳,電機 1 的輸入 1(IN1),輸入 2(IN2) 和使能 1(EN1),電機 2 的輸入 4,輸入 4 和使能 2。

由於在這個例子中我們只控制一個電機,我們將把 Arduino 連線到 L298 IC 的 IN1(引腳 5),IN2(引腳 7)和 Enable1(引腳 6)。引腳 5 和 7 是數字的,即 ON 或 OFF 輸入,而引腳 6 需要脈衝寬度調製(PWM)訊號來控制電機速度。

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

IN1 IN2 電機行為
制動
1 向前轉
1 向後轉
1 1 制動

IC L298 的引腳 IN1 連線到 Arduino 的引腳 8,而 IN2 連線到引腳 9。Arduino 的這兩個數字引腳控制電機的方向。IC 的 EN 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。
  • 將 IC 的 SENS 引腳連線到地。
  • 使用 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 秒鐘。