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