
- Arduino 教程
- Arduino - 首頁
- Arduino - 概覽
- Arduino - 開發板描述
- Arduino - 安裝
- Arduino - 程式結構
- Arduino - 資料型別
- Arduino - 變數和常量
- Arduino - 運算子
- Arduino - 控制語句
- Arduino - 迴圈
- Arduino - 函式
- Arduino - 字串
- Arduino - 字串物件
- Arduino - 時間
- Arduino - 陣列
- Arduino 函式庫
- Arduino - I/O 函式
- Arduino - 高階 I/O 函式
- Arduino - 字元函式
- Arduino - 數學庫
- Arduino - 三角函式
- Arduino 高階
- Arduino - Due 和 Zero
- Arduino - 脈衝寬度調製
- Arduino - 隨機數
- Arduino - 中斷
- Arduino - 通訊
- Arduino - 互聯積體電路
- Arduino - 序列外設介面
- Arduino 專案
- Arduino - 閃爍 LED
- Arduino - 漸變 LED
- Arduino - 讀取模擬電壓
- Arduino - LED 條形圖
- Arduino - 鍵盤登出
- Arduino - 鍵盤訊息
- Arduino - 滑鼠按鈕控制
- Arduino - 鍵盤序列埠
- Arduino 感測器
- Arduino - 溼度感測器
- Arduino - 溫度感測器
- Arduino - 水位檢測器/感測器
- Arduino - PIR 感測器
- Arduino - 超聲波感測器
- Arduino - 連線開關
- 電機控制
- Arduino - 直流電機
- Arduino - 伺服電機
- Arduino - 步進電機
- Arduino 和聲音
- Arduino - 音調庫
- Arduino - 無線通訊
- Arduino - 網路通訊
- Arduino 有用資源
- Arduino - 快速指南
- Arduino - 有用資源
- Arduino - 討論
Arduino - 直流電機
在本章中,我們將介紹如何將不同型別的電機與 Arduino 開發板(UNO)連線,並向您展示如何連線電機並從開發板上驅動它。
電機主要有三種類型:
- 直流電機
- 伺服電機
- 步進電機
直流電機(直流電機)是最常見的電機型別。直流電機通常只有兩個引線,一個正極和一個負極。如果將這兩個引線直接連線到電池,電機將旋轉。如果交換引線,電機將反方向旋轉。

警告 - 不要直接從 Arduino 開發板引腳驅動電機。這可能會損壞開發板。請使用驅動電路或積體電路。
我們將把本章分成三個部分:
- 讓電機旋轉
- 控制電機速度
- 控制直流電機旋轉方向
所需元件
您將需要以下元件:
- 1x Arduino UNO 開發板
- 1x PN2222 三極體
- 1x 小型 6V 直流電機
- 1x 1N4001 二極體
- 1x 270 Ω 電阻
步驟
按照電路圖,並按照下圖所示進行連線。

注意事項
連線時請注意以下事項。
首先,確保三極體連線正確。三極體的扁平面應朝向 Arduino 開發板,如示意圖所示。
其次,二極體的帶條紋的一端應朝向 +5V 電源線,如示意圖所示。
旋轉控制 Arduino 程式碼
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 之間的值。

在“迴圈”函式中,命令“Serial.parseInt”用於讀取序列埠監視器中以文字形式輸入的數字並將其轉換為“int”。您可以在此處輸入任何數字。“if”語句在下一行只是使用此數字執行模擬寫入,如果數字在 0 到 255 之間。
結果
直流電機將根據透過序列埠接收到的值(0 到 250)以不同的速度旋轉。
旋轉方向控制
為了控制直流電機的旋轉方向,無需交換引線,您可以使用一個稱為H 橋的電路。H 橋是一種電子電路,可以雙向驅動電機。H 橋用於許多不同的應用。最常見的應用之一是在機器人中控制電機。它被稱為 H 橋,因為它使用四個以特定方式連線的三極體,使得原理圖看起來像一個“H”。
我們將在此處使用 L298 H 橋積體電路。L298 可以控制直流電機和步進電機的速度和方向,並且可以同時控制兩個電機。每個電機的額定電流為 2A。但是,在這些電流下,您需要使用散熱器。

所需元件
您將需要以下元件:
- 1 × L298 橋積體電路
- 1 × 直流電機
- 1 × Arduino UNO
- 1 × 麵包板
- 10 × 跳線
步驟
以下是直流電機連線到 Arduino Uno 開發板的原理圖。

上圖顯示瞭如何連線 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 秒。