该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先说电路连接:
第一步:12V 接到 L298N 电机驱动模块的 +12V 以及 GND,+5V 电源输出给Arduino板子供电。有些人可能说如果电机供电以及板子供电是同一个电源,可能电机转动会影响到板子供电。其实这种小黄电机耗电量很低的,目前我测试是没有发现问题。据说有人用12V电池供电也没有问题,也没有出现供电不足问题
第二步:左电机连接到OUT3和OUT4,右电机连接到OUT1和OUT2
第三步:就是L298N的IN控制引脚和Arduino板子的连接。IN1连接到引脚6,IN2连接到引脚7,IN3连接到引脚4,IN4连接到引脚5.
接下来首先是测试工作,先保证电机和电路没有问题,后边才能区分出来是电路还是软件问题
测试电机的具体方法位:IN1连接到Arduino板子 +5V IN2连接到GND,然后观察电机是否旋转,同时也要观察电机的转向如果转向反了就把电机的接线调转过来。
代码如下:
#define IN1 6 // 7 6 右轮
#define IN2 7
#define IN3 4 // 5 4 左轮
#define IN4 5
#define LEFT '3' //左转编码
#define RIGHT '4'//右转编码
#define GO '1'//前进编码
#define BACK '2'//后退编码
#define STOP '0'//停止编码
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
initCar();
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0){
char ch = Serial.read();
if(ch == GO){
//前进
go();
}else if(ch == BACK){
//后退
back();
}else if(ch == LEFT){
//左转
turnLeft();
}else if(ch == RIGHT){
//右转
turnRight();
}else if(ch=='0'){
//停车
stopCar();
}
}
}
void initCar(){
//默认全是低电平 停止状态
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
/**
* 左转
*/
void turnLeft(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW); //右轮前进
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW); //左轮不动
}
/**
* 右转
*/
void turnRight(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW); //右轮不动
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW); //左轮前进
}
/**
* 前进
*/
void go(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW); //右轮前进
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW); //左轮前进
}
/**
* 倒车
*/
void back(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH); //右轮后退
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH); //左轮后退
}
/**
* 停车
*/
void stopCar(){
initCar();
}
使用arduino编译并把代码烧录到arduino里面,烧录完以后可以用串口助手连接arduino。分别通过串口给arduino发0,1,2,3,4看看电机是不是按照预期那样转的。如果电机旋转与预期一样说明通过arduino控制电机就已经成功了。