Arduino 简明教程

Arduino - DC Motor

在本章中,我们将演示不同类型的电机与 Arduino 板 (UNO) 的接口,并向您展示如何连接电机并从您的板上进行驱动。

有三种不同类型的电机−

  1. DC motor

  2. Servo motor

  3. Stepper motor

直流电动机是最常见的电动机类型。直流电动机通常只有两个引线,一个正极和一个负极。如果您将这两根引线直接连接到电池上,则电机将旋转。如果您切换引线,电机将朝相反的方向旋转。

dc motor

Warning − 请勿直接从 Arduino 板引脚驱动电机。这可能会损坏电路板。使用驱动器电路或 IC。

我们将本章分为三个部分−

  1. 只需让电机旋转

  2. Control motor speed

  3. 控制直流电机的旋转方向

Components Required

您将需要以下组件:

  1. 1x Arduino UNO board

  2. 1x PN2222 Transistor

  3. 1x 小型 6V 直流电机

  4. 1x 1N4001 diode

  5. 1x 270 Ω Resistor

Procedure

按照电路图进行操作,并按照下面给出的图片所示进行连接。

dc motor connections

Precautions

在进行连接时采取以下预防措施。

  1. 首先,确保晶体管以正确的方式连接。如排列所示,晶体管的平面侧应面向 Arduino 板。

  2. 第二,根据图像中所示的排列方式,二极管的条纹端应朝向 +5V 电源线。

Spin ControlArduino Code

int motorPin = 3;

void setup() {

}

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

Code to Note

晶体管起开关作用,控制流向电机的功率。3 号 Arduino 引脚用于打开和关闭晶体管,在素描中命名为“motorPin”。

Result

当 3 号 Arduino 引脚变高时,电机将高速旋转。

Motor Speed Control

以下是直流电机示意图,它连接到 Arduino 电路板。

motor speed control

Arduino Code

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);
      }
   }
}

Code to Note

晶体管起开关作用,控制流向电机的功率。3 号 Arduino 引脚用于打开和关闭晶体管,在素描中命名为“motorPin”。

当程序启动时,它会提示你给出控制电机速度的值。你需在串行监视器中输入 0 到 255 之间的值。

command window

在“循环”函数中,使用“Serial.parseInt”命令读取串行监视器中作为文本输入的数字,并将其转换为“int”。你可以在此处键入任意数字。如果数字在 0 到 255 之间,则下一行中的“if”语句仅使用此数字执行模拟写入。

Result

直流电机将根据通过串行端口接收的值(0 到 250)以不同的速度旋转。

Spin Direction Control

要控制直流电机旋转方向,无需交换引线,你可以使用名为 H-Bridge 的电路。H 桥是一个电子电路,可以驱动电机向两个方向转动。H 桥用于众多不同的应用。最常见的应用之一是控制机器中的电机。之所以称作 H 桥,是因为它使用的四个晶体管连接方式使示意图看起来像一个“H”。

我们将在此处使用 L298 H 桥 IC。L298 可以控制直流电机和步进电机的速度和方向,还可以同时控制两台电机。对每台电机,其额定电流为 2A。然而,在此电流下,你将需要使用散热器。

spin direction control

Components Required

您将需要以下组件:

  1. 1 × L298 桥接 IC

  2. 1 × DC motor

  3. 1 × Arduino UNO

  4. 1 × breadboard

  5. 10 × jumper wires

Procedure

以下是直流电机与 Arduino Uno 电路板接口的示意图。

spin direction control connections

上图展示了如何连接 L298 IC 以便控制两台电机。每台电机都有三个输入引脚,第 1 个输入引脚(IN1)、第 2 个输入引脚(IN2)和第 1 个使能引脚(EN1),用于电机 1;第 3 个输入引脚、第 4 个输入引脚和第 2 个使能引脚,用于电机 2。

由于我们在本示例中只控制一台电机,因此我们将 Arduino 连接到 L298 IC 的 IN1(引脚 5)、IN2(引脚 7)和 Enable1(引脚 6)。引脚 5 和 7 是数字引脚,即 ON 或 OFF 输入,而引脚 6 需要脉宽调制 (PWM) 信号才能控制电机速度。

下表显示了电机将根据 IN1 和 IN2 的数字值旋转的方向。

IN1

IN2

Motor Behavior

BRAKE

1

FORWARD

1

BACKWARD

1

1

BRAKE

IC L298 的 IN1 引脚连接到 Arduino 的引脚 8,而 IN2 连接到引脚 9。这两个 Arduino 数字引脚控制电机的方向。IC 的 EN A 引脚连接到 Arduino 的 PWM 引脚 2。这将控制电机的速度。

要设置 Arduino 引脚 8 和 9 的值,我们使用了 digitalWrite() 函数,而要设置引脚 2 的值,我们必须使用 analogWrite() 函数。

Connection Steps

  1. 将 IC 的 5V 和接地分别连接到 5V 和 Arduino 的接地。

  2. 将电机连接到 IC 的引脚 2 和 3。

  3. 将 IC 的 IN1 连接到 Arduino 的引脚 8。

  4. 将 IC 的 IN2 连接到 Arduino 的引脚 9。

  5. 将 IC 的 EN1 连接到 Arduino 的引脚 2。

  6. 将 IC 的 SENS A 引脚连接到接地。

  7. 使用 Arduino USB 线连接 Arduino,并使用 Arduino IDE 软件将程序上传到 Arduino。

  8. 使用电源、电池或 USB 线为 Arduino 电路板供电。

Arduino Code

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) ;
}

Result

电机将首先按顺时针 (CW) 方向运行 3 秒,然后按逆时针 (CCW) 方向运行 3 秒。