怎样用Arduino连接电机

电子说

1.3w人已加入

描述

步骤1:连接所有硬件

电机

电机

电机

电机

电机

电机

电机

电机

连接L293D电机驱动器

L293D是双通道全桥电机驱动器,每通道最大输出电流为600 mA(数据等)。这意味着您可以同时驱动2个电流,这些电机的电流需求在IC的限制范围内。在我们的例子中,我们只使用一个通道,这意味着我们将使用模块上的M1 IN/M1输出端口(IC上分别为引脚2,7和3,6)。为了使电机连接到该通道,我们需要将EN1(引脚1)拉高。我正在使用的模块提供了一个简单的跳线布置,用于硬接线,参见图片。或者,您可以通过控制器控制此引脚。引脚连接如图所示。

连接L298N电机驱动器

与L293D类似,L298N也是双全桥电机驱动器每个通道的最大输出电流为2A。我们将只使用一个渠道,即。 M1,M2(该模块具有不同的命名约定,M1-In,M2-In为输入,M1-Out,M2-Out为相应的输出)数据表L298N

当我们需要更多电流时对于金属齿轮直流电机,这个特殊的驱动器是一个不错的选择。它具有良好的性能,低热量(尽管建议使用散热器,市场上大多数模块都带有散热片)。它也非常便宜,有帮助。

连接伺服电机

伺服电机有各种尺寸和相应的扭矩等级。通常我们看到扭矩额定值较低的电机使用塑料齿轮,但扭矩额定值较高的电机使用金属齿轮。

伺服电机有3根电线从中传出,即信号,Vcc和接地。通常使用的颜色代码如下:

信号》黄色/橙色;在VCC》红色/白色; Gnd》 Black/Brown

根据经验,识别它们的最简单方法是,最黑暗的一个是地面,略亮的是Vcc,最亮的一个是信号。

如果您使用的是像HK15178这样的微型伺服,可以使用Arduino上的5V引脚为其供电。但是,当电流要求较高时,您的Arduino无法提供足够的电流,因此您需要从外部供电。我们将使用通用电池消除器电路(UBEC),它具有方便的5V/6V 3A输出。我们在7805这样的简单电压调节器上使用该电路的原因是电压调节器的电流限制低于控制伺服电流所需的输出电流约1.5至2A(取决于其额定值)。

PS:如果使用Arduino为更高等级的伺服电源供电,电路板可能会突然复位并以不合需要的方式运行。

连接HC-05蓝牙模块

这一步与使用HC-05和Arduino UNO的智能手机控制LED灯所解释的完全相似。这里唯一的区别是我们使用模拟引脚A0和A1作为数字引脚(D14和D15) Rx和Tx。

第2步:Arduino代码

#define BoMotor_F 3

#define BoMotor_B 5

#define DcMotor_F 6

#define DcMotor_B 11

#define ServoMotorPin 7

#include

#include

SoftwareSerial mySerial(14, 15); // RX, TX

Servo myservo;

char character;

boolean flag=false;

void setup() {

// put your setup code here, to run once:

mySerial.begin(9600);

Serial.begin(9600);

pinMode(BoMotor_F,OUTPUT);

pinMode(BoMotor_B,OUTPUT);

pinMode(DcMotor_F,OUTPUT);

pinMode(DcMotor_F,OUTPUT);

myservo.attach(ServoMotorPin);//servo is attached on pin7

} void loop() {

// put your main code here, to run repeatedly:

String Data = “”;

flag=false;

while(mySerial.available()) {

character = mySerial.read();

Data.concat(character);

flag=true;

delay(100);

}

if(flag)

{

Data.trim();

Serial.println(Data);

int s = Data.substring(0,1).toInt();

int direction = Data.substring(2,3).toInt();

int value = Data.substring(4).toInt();

switch(s){

case 1:{DcMotor(value, direction); break;}

case 2:{BoMotor(value,direction);break;}

case 3:{ServoMotor(value,direction);break;}

case 0:{DcMotor(0,direction);BoMotor(0,direction);break;}

}

}

}

void DcMotor(int speed, int dir)

{

analogWrite(DcMotor_F,(speed+dir*speed)/2);

analogWrite(DcMotor_B,(speed-dir*speed)/2);

}

void BoMotor(int speed, int dir)

{

analogWrite(BoMotor_F,(speed+dir*speed)/2);

analogWrite(BoMotor_B,(speed-dir*speed)/2);

}

void ServoMotor(int angle, int dir)

{

myservo.write(angle);

delay(2000);

myservo.write(0);

}

第3步:连接智能手机

类似于之前关于使用HC-05和Arduino UNO的智能手机控制LED灯的文章,我们将继续通过HC-05蓝牙模块将我们的智能手机连接到arduino。

命令我们要发送的内容如下:

我想要Dc电机在正向运行PWM值为200,我发送:

1,1,200

如果相同的直流电机以反向150的PWM运行,我将发送:

1,-1,150

一般格式是:电机,方向,值

电机:1》直流电机,2》电机电机,3》伺服电机,0》停止正在运行的所有设备(和平:P)

方向:1》顺时针/正向,-1》逆时针/反向

值:PWM值从0到255;在伺服的情况下,这是角度

PS:在Dc电机和Bo电机的情况下,如果您发现电机正在旋转的方向与预期相反,只需交换指定的引脚编号前进和后退针脚的程序‘

例如:原始

#define DcMotor_F 6

#define DcMotor_B 11

已交换

#define DcMotor_F 11

#define DcMotor_B 6

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分