如何让arduino使用h-bridge进入两个方向?

时间:2018-02-08 09:32:21

标签: arduino arduino-uno

我想建立一个线跟随机器人,我有一个h桥和arduino来控制方向和速度。

我把这个代码烧到我的arduino板上,但是机器人只是向前走,从不向对方方向走去:

int enA = 10;
int in1 = 9;
int in2 = 8;
// motor two
int enB = 5;
int in3 = 7;
int in4 = 6;


void setup()
{
 pinMode(enA, OUTPUT);
 pinMode(enB, OUTPUT);
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);
 pinMode(in3, OUTPUT);
 pinMode(in4, OUTPUT);
}

void demoOne()
{
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 analogWrite(enA, 200);
 // turn on motor B
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 // set speed to 200 out of possible range 0~255
 analogWrite(enB, 200);
 delay(2000);
 // now change motor directions
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 delay(2000);
 // now turn off motors
 digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, LOW);
}
void loop()
{
 demoOne();
 delay(1000);
 demoTwo();
 delay(1000);
}

如何调整代码以使其适用于两个方向?

更新: 我正在使用h bridge l298n和四个直流电机“2右2和左2”,使用两个9v电池供电,并使用5v为arduino uno供电,我根据这篇文章从h桥获得: https://hackerstore.nl/PDFs/Tutorial298.pdf

对于两个正确的电机,

enA,in1和in2

对于左侧两个电机,

enB,in3和in4

2 个答案:

答案 0 :(得分:0)

您的代码看起来非常好,确保您的硬件正常工作并且所有设备都已正确连接,同时确保您没有使用Arduino的5V为电机供电,因为Arduino板上的小型电压调节器是不能处理大电流,如500mA(除非你用更大的调节器替换它,并给它一个大的散热器),如果你从USB驱动arduino和电机,确保你的USB端口可以处理两个电机所需的电源,哦,并确保引脚10和5是PWM引脚

使用专用的电机库可能有助于简化代码,我在这里给你写了一个:

#include <Arduino.h>
#include <stdbool.h>

#define enA 10
#define enB 5
#define i1 8
#define i2 9
#define i3 6
#define i4 7

void initMotors(){
    pinMode(enA, OUTPUT);
    pinMode(enB, OUTPUT);
    pinMode(i1, OUTPUT);
    pinMode(i2, OUTPUT);
    pinMode(i3, OUTPUT);
    pinMode(i4, OUTPUT);
}
void motor1Stop(){
    digitalWrite(i1, LOW);
    digitalWrite(i2, LOW);
}
void motor2Stop(){
    digitalWrite(i3, LOW);
    digitalWrite(i4, LOW);
}
void motorsEnabled(bool en){
    digitalWrite(enA, en);
    digitalWrite(enB, en);
}
void enableMotors(){
    motorsEnabled(HIGH);
}
void motor1Forward(){
    digitalWrite(i1, HIGH);
    digitalWrite(i2, LOW);
}
void motor1Backward(){
    digitalWrite(i1, LOW);
    digitalWrite(i2, HIGH);
}
void motor2Forward(){
    digitalWrite(i3, LOW);
    digitalWrite(i4, HIGH);
}
void motor2Backward(){
    digitalWrite(i3, HIGH);
    digitalWrite(i4, LOW);
}

要包含它,只需创建一个新选项卡并将其命名为任意(只要没有空格并以.h结尾),然后将#include "name.h"添加到代码的开头,这将有所帮助你要减少未来的错误

对于速度控制,您可以添加:

void setMotorSpeeds(int motor1, int motor2){
    analogWrite(enA, motor1);
    analogWrite(enB, motor2);
}

答案 1 :(得分:0)

你的代码很好,所以你需要通过“分而治之”来识别问题

将单个电机连接到每个通道,暂时忘记arduino部件。

连接L298电源。如果您阅读说明,您将看到可以使用集成5V电源稳压器,或者您可以提供外部5V电源。如果为5V和电机使用不同的电源确保将两个GND连接在一起,否则它将无法工作。

确保将驱动器正确连接到电源,取两根电缆并使用它们连接in1至GND,in2至5V和enA至5V(不使用arduino,只需手动连接电缆)。其中一个电机应转向一侧。

现在将in1连接到5V,in2连接到GND(保持enA连接到5V),电机应转到另一侧。

如果没有发生这种情况,那么您没有正确连接L298或它已损坏。

如果有效则问题来自你的arduino。连接3个LED,一个在引脚9中,一个在引脚8中,另一个在引脚10中(这些引脚连接到in1和in2以及enA)。

运行程序,您应该看到LEDS相应地打开和关闭。 如果没有,你的arduino在某些引脚上有问题(也许你将它们短路了?)

如果两个实验都有效,那么它们绝对没有理由不能一起工作,所以从小处开始,将你的问题分成几部分并确定它。

祝你好运。