Arduino 蓝牙遥控 智能小车 案例 蓝牙模块 L298N驱动模块

需要材料:

  1.     小车套件(包括轮胎、电机)

  2.     L298N驱动模块 (可以把电池的高电压转换为我们需要的5V,3.3V电压) 

  3.     电池

  4.     电池座

  5.     Arduino UNO 开发板

  6. 蓝牙模块(需要注意的是上传代码时因共用串口的原因会上传代码失败,解决方法:上传代码时,拔掉蓝牙模块

  7. 需要手机安装 SPP蓝牙串口 (如果找不到的可以私信笔者)

此案例中用到串口通信

 

安装和连接:

 

Arduino 蓝牙遥控 智能小车 案例 蓝牙模块 L298N驱动模块_第1张图片

+12V:该引脚接的电压是驱动模块所能输出给电机的最大电压,一般 直接接电池。12V是由L298N芯片所能接受最大电压而定,一般介入5~12V电压。在此我们接入的电压为两节18650串联的电压,即3.7+3.7=7.4V;

GND: 在该项目中GND即为电源的负极,同时要保证Arduino开发板,驱动模块等所有模块的GND连在一起才可以正常工作。在某些复杂的项目中还需要区分数字地和模拟地,在此不做详细介绍。

+5V: L298N模块(注意不是L298N芯片)内含稳压电路(将高电压转换为低电压的电路),在模块内部将”+12V”引脚输入的电压转化为可供开发板使用的+5V电压,一般将次输出接入到开发板为开发板供电。

L298N有两路输出,所以可以控制小车前进、后退、转弯,其中:

ENA: 代表第一路输出的电压大小。驱动模块输出电压越高,电机转速越快。

1.当其输入为0V的时候,驱动模块输出对第一路电机输出电压为0V;

2.当其输入为3.3V的时候,驱动模块对第一路电机输出电压为”+12V”引脚的输入电压。

3.由于ENA输入电压的高低控制驱动对电机的输出电压,因此当我们需要对小车运动速度进行控制的时候,一般通过PWM对”ENA”引脚进行控制。

 

IN1/IN2:这两个引脚控制电机正反转方向。例:假如IN1输入高电平3.3V,IN2输入低电平0V,ENA为3.3V,电机正转,此时将IN1输入改为0V,IN2输入改为3.3V,其他条件不变,则电机将会反转。

OUT1/OUT2:这两个引脚分别接电机的两极。

ENB,IN3/IN4,OUT3/OUT4引脚控制第二路输出,与上述ENB,IN3/IN4,OUT3/OUT4功能相似。

 

L298N驱动的IN1/IN2/IN3/IN3引脚与Arduino板的4/5/6/7号引脚对应相连

 

蓝牙模块连接:

TX:接Arduino UNO开发板”RX”引脚 

RX:接Arduino UNO开发板”TX”引脚 

GND:接Arduino UNO开发板”GND”引脚 

VCC:接Arduino UNO开发板”5V”或”3.3V”引脚        

参考代码:

#include 

//定义五中运动状态
char FORWARD = '1'; //前进
char BACKWARD = '2'; //后退
char TURNLEFT = '3'; //左转弯
char TURNRIGHT = '4'; //右转弯
char STOP = '0'; //停止

//定义需要用到的引脚
int leftMotor1 = 4;
int leftMotor2 = 5;
int rightMotor1 = 6;
int rightMotor2 = 7;

//接收到的字符
char cmd;

void setup() {
  Serial.begin(9600);   

  //设置控制电机的引脚为输出状态
  pinMode(leftMotor1, OUTPUT);
  pinMode(leftMotor2, OUTPUT);
  pinMode(rightMotor1, OUTPUT);
  pinMode(rightMotor2, OUTPUT);
}

void loop() {
  //读取蓝牙模块发送到串口的数据
if(Serial.available())
{
    cmd = Serial.read();
    delay(5);
    Serial.println(cmd);
}
  //控制电机转动
if(cmd == FORWARD )
  {
      digitalWrite(leftMotor1, LOW);//正转
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
    }
   if(cmd == BACKWARD )
  {
      digitalWrite(leftMotor1, HIGH);//反转
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
    }
    if(cmd == TURNLEFT )
   {
      digitalWrite(leftMotor1, LOW);//左转
      digitalWrite(leftMotor2,LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
    }
    if(cmd == TURNRIGHT )
   {
    digitalWrite(leftMotor1, LOW);//右转
     digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, LOW);
    }
     if(cmd == STOP )
    {
    digitalWrite(leftMotor1, LOW);//停止
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, LOW);
    }
}

 

你可能感兴趣的:(Arduino模块)