在本章中,我们将使用Arduino板(UNO)连接不同类型的电机,并告诉您如何连接电机并从电路板上驱动它。
有三种不同类型的电机 -
- DC motor 直流电机
- Servo motor 伺服电机
- Stepper motor 步进电机
直流电机(直流电机)是最常见的电机类型。 直流电动机通常只有两个引线,一个正极和一个负极。 如果将这两根导线直接连接到电池,电机将旋转。 如果切换导线,电机将以相反的方向旋转。

警告 - 不要直接从Arduino板引脚驱动电机。 这可能会损坏电路板。 使用驱动电路或IC。
我们将本章分为三个部分 -
- 只是让你的电机旋转
- 控制电机速度
- 控制直流电机的旋转方向
必需的组件
您将需要以下组件 -
- 1x Arduino UNO 板
- 1x PN2222 晶体管
- 1x 小型6V直流电机
- 1x 1N4001二极管
- 1x 270Ω电阻
程序
按照电路图进行连接,如下图所示。

注意事项
进行连接时,请采取以下预防措施。
-
首先,确保晶体管以正确的方式连接。 晶体管的平面应面向Arduino板,如布局所示。
-
第二,根据图像中所示的排列,二极管的条带端应朝向+ 5V电源线。
Spin ControlArduino代码
- 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"。 您可以在此处输入任何数字。 如果数字在0到255之间,下一行中的“if"语句只需使用此数字进行模拟写入。
结果
根据通过串行端口接收的值(0到250),直流电机将以不同的速度旋转。
旋转方向控制
为了控制直流电机的旋转方向,无需互换引线,可以使用称为 H桥的电路。 H桥是可以在两个方向上驱动电机的电子电路。 H桥用于许多不同的应用中。 最常见的应用之一是控制机器人中的电机。 它被称为H桥,因为它使用以使得示意图看起来像“H"的方式连接的四个晶体管。
我们将在这里使用L298 H-Bridge IC。 L298可以控制直流电机和步进电机的速度和方向,并可以同时控制两个电机。每个电机的额定电流为2A。 然而,在这些电流下,您将需要使用散热片。
必需的组件
您将需要以下组件 -
- 1 × L298桥接IC
- 1 × 直流电机
- 1 × Arduino UNO
- 1 × 面包板
- 10 × 跳线
程序
以下是Arduino Uno板的直流电机接口示意图。

上图显示了如何连接L298 IC控制两个电机。 每个电机有三个输入引脚,Motor1的Input1(IN1),Input2(IN2)和Enable1(EN1),Motor2的Input3,Input4和Enable2。
由于在这个例子中我们只控制一个电机,我们将把Arduino连接到L298 IC的IN1(引脚5),IN2(引脚7)和Enable1(引脚6)。 引脚5和7是数字的,即ON或OFF输入,而引脚6需要脉冲宽度调制(PWM)信号来控制电动机速度。
下表显示了电机根据IN1和IN2的数字值转动的方向。
IN1 | IN2 | 电机特性 |
---|---|---|
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()函数。
连接步骤
将电机连接到IC的引脚2和3。
将IC的IN1连接到Arduino的8引脚。
将IC的IN2连接到Arduino的引脚9。
将IC的EN1连接到Arduino的引脚2。
将SENS的IC引脚连接到地。
使用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秒。
转载本站内容时,请务必注明来自W3xue,违者必究。