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 秒。