❮ 上一节
下一节 ❯
Arduino - 直流电机
在本章中,我们将把不同类型的电机与 Arduino 板 (UNO) 连接起来,并向您展示如何连接电机并从电路板驱动它。
有三种不同类型的电机 −
直流电机
伺服电机
步进电机
直流电机 (DC motor) 是最常见的电机类型。直流电机通常只有两根引线,一根正极,一根负极。如果将这两根引线直接连接到电池,电机就会旋转。如果切换引线,电机将朝相反方向旋转。
警告 − 请勿直接从 Arduino 板引脚驱动电机。这可能会损坏电路板。使用驱动电路或 IC。
我们将本章分为三个部分 −
只需让您的电机旋转
控制电机速度
控制直流电机旋转的方向
所需组件
您将需要以下组件 −
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);
}
}
}
Code to Note
晶体管的作用类似于开关,控制电机的功率。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 有 Input1 (IN1)、Input2 (IN2) 和 Enable1 (EN1),电机 2 有 Input3、Input4 和 Enable2。
由于我们在此示例中只控制一个电机,我们将 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() 函数。
连接步骤
分别将 IC 的 5V 和接地连接到 Arduino 的 5V 和接地。
将电机连接到 IC 的引脚 2 和 3。
将 IC 的 IN1 连接到 Arduino 的引脚 8。
将 IC 的 IN2 连接到 Arduino 的引脚 9。
将 IC 的 EN1 连接到 Arduino 的引脚 2。
将 IC 的 SENS A 引脚接地。
使用 Arduino USB 电缆连接 Arduino,并使用 Arduino IDE 软件将程序上传到 Arduino。
提供使用电源、电池或 USB 线为 Arduino 电路板供电。
Arduino 代码
const int pwm = 2 ; //将引脚 2 初始化为 pwm
const int in_1 = 8 ;
const int in_2 = 9 ;
//为 L298 IC 提供逻辑以选择直流电机的方向
void setup() {
pinMode(pwm,OUTPUT) ; //我们必须将 PWM 引脚设置为输出
pinMode(in_1,OUTPUT) ; //逻辑引脚也设置为输出
pinMode(in_2,OUTPUT) ;
}
void loop() {
//对于顺时针运动,in_1 = 高,in_2 = 低
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,LOW) ;
analogWrite(pwm,255) ;
/* 将电机的 pwm 设置为 255,我们可以通过更改 pwm 输入来改变旋转速度,但我们只使用 arduino,因此我们使用最高值来驱动电机 */
//顺时针旋转 3 秒
delay(3000) ;
//用于制动
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,HIGH) ;
delay(1000) ;
//用于逆时针运动 - IN_1 = LOW,IN_2 = HIGH
digitalWrite(in_1,LOW) ;
digitalWrite(in_2,HIGH) ;
delay(3000) ;
//用于制动
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,HIGH) ;
delay(1000) ;
}
结果
电机将首先顺时针 (CW) 方向运行 3 秒,然后逆时针 (CCW) 运行 3 秒。
❮ 上一节
下一节 ❯