Arduino蓝牙小车

本文详细介绍了如何通过Arduino、L289N驱动电机实现后驱双电机小车的前进、后退、左右转向及停止功能,同时涉及蓝牙APP的搭建,以及遇到的万向轮起步转向问题及其解决方案。
摘要由CSDN通过智能技术生成

实现功能

后两驱 前方万向轮 基本的运动功能 前进后退停车 以及变速

电路搭建

两个电机连接L289N的两个输出端,Arduino的PWM端连接L289N的信号输入引脚,
四个IO连接L289N的方向控制引脚 INA INB
蓝牙模块直连 Arduino的0 1脚(烧录程序的过程中 需要拔掉)

代码编写

#include "Arduino.h"

const byte MOT1_a=6;
const byte MOT1_b=7;
const byte MOT2_a=8;
const byte MOT2_b=9;

const byte MOT1_PWM=10;
const byte MOT2_PWM=11;   //电机控制引脚

const byte Sensor_Flash=A3;//灯光控制
const byte Flash=3;

unsigned char cmd=0;
boolean  flag=0;
unsigned char MOT1_PWM_num=0;
unsigned char MOT2_PWM_num=0;

void MOT_Setup()  //L289N控制电机 数字控制电机方向 模拟控制PWM 控速 采用差速转向
{
  pinMode(MOT1_a, OUTPUT);
  pinMode(MOT1_b, OUTPUT);
  pinMode(MOT2_a, OUTPUT);
  pinMode(MOT2_b, OUTPUT);

  pinMode(MOT1_PWM, OUTPUT);
  pinMode(MOT2_PWM, OUTPUT);

  digitalWrite(MOT1_a, LOW);
  digitalWrite(MOT1_b, LOW);
  digitalWrite(MOT2_a, LOW);
  digitalWrite(MOT2_b, LOW);

  analogWrite( MOT1_PWM, 0);
  analogWrite( MOT2_PWM, 0);
}

void MOT_UP()
{
  digitalWrite(MOT1_a, HIGH);
  digitalWrite(MOT1_b, LOW);
  digitalWrite(MOT2_a, LOW);
  digitalWrite(MOT2_b, HIGH);

  if (MOT1_PWM_num+60<=255) {
  MOT1_PWM_num=MOT1_PWM_num+60;
  }
  else{MOT1_PWM_num=255;}
  MOT2_PWM_num=MOT1_PWM_num;
}

void MOT_DOWN() // 按得越久 速度越快  模拟汽车加速过程 
{
  digitalWrite(MOT1_a, LOW);
  digitalWrite(MOT1_b, HIGH);
  digitalWrite(MOT2_a, HIGH);
  digitalWrite(MOT2_b, LOW);

  if (MOT1_PWM_num+40<=100) {
  MOT1_PWM_num=MOT1_PWM_num+40;
  }
  else{MOT1_PWM_num=255;}
  MOT2_PWM_num=MOT1_PWM_num;
}

void MOT_STOP()
{

  MOT1_PWM_num=0;
  MOT2_PWM_num=0;
}

void MOT_LEFT()
{
  MOT1_PWM_num=50;
  MOT2_PWM_num=80;
}

void MOT_RIGHT()
{
  MOT1_PWM_num=80;
  MOT2_PWM_num=50;
}

void setup() {
  // put your setup code here, to run once: 初始化
  MOT_Setup();
  Serial.begin(9600); //串口通信
}

void loop() {
  // put your main code here, to run repeatedly: 

  while(Serial.available()>0){
    cmd=Serial.read();
    flag=1; //每接受一次指令改变一次状态
    delay(50);
  }

  if(flag)
  {

    switch(cmd)
   {
      case 'u' :MOT_UP();     Serial.print("前进\n");break;
      case 'e' :MOT_DOWN();   Serial.print("后退\n");break;
      case 'l' :MOT_LEFT();   Serial.print("左转\n");break;
      case 'r' :MOT_RIGHT();  Serial.print("右转\n");break;
      case 't' :MOT_STOP();   Serial.print("停止\n");break;

      default:
          break;
   }
   flag=0;
  }
  
  analogWrite(MOT1_PWM, MOT1_PWM_num); //模拟输出控制速度
  analogWrite(MOT2_PWM, MOT2_PWM_num);
  delay(100);
}

转向利用差速转向

搭建蓝牙APP

搭建软件网址点这
组件设计:
在这里插入图片描述

逻辑设计:
逻辑设计要与代码相符

实现效果

效果

问题

由于采用两驱 前方采用万向轮 在起步时会出现万向轮转向导致不直线运动的问题。

L298N概述: L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。 主要特点是: 工作电压高,最高工作电压可达46V; 输出电流大,瞬间峰值电流可达3A,持续工作电流为2A; 额定功率25W。 光电隔离 L289N 电机驱动器实物展示: 光电隔离 L289N 电机驱动器简要说明: 一、 尺寸:80mmX45mm 二、 主要芯片:L298N、光电耦合器 三、 工作电压:控制信号直流5V;电机电压直流3V~46V(建议使用36伏以下) 四、 最大工作电流:2.5A 五、 额定功率:25W PCB 图展示: 特点: 1、具有信号指示。 2、转速可调 3、抗干扰能力强 4、具有过电压和过电流保护 5、可单独控制两台直流电机 6、可单独控制一台步进电机 7、PWM脉宽平滑调速 8、可实现正反转 9、采用光电隔离 L298N驱动器与直流电机接线图: 驱动器控制两相步进电机接线图: 驱动器控制四相步进电机接线图: 附件内容截图:
很高兴为您解答有关Arduino蓝牙小车的问题! 首先,您需要准备以下材料: - Arduino主板 - 蓝牙模块(如HC-05) - 电机驱动模块(如L298N) - 直流电机(2个或4个) - 车轮(2个或4个) - 车架 - 9V电池或电池盒 - 杜邦线 然后,按照以下步骤进行操作: 1. 将电机驱动模块与Arduino主板连接。连接方式如下: - IN1、IN2、IN3、IN4分别接到Arduino主板的数字引脚8、9、10、11。 - ENA和ENB分别接到Arduino主板的数字引脚5和6。 - VCC和GND分别接到Arduino主板的5V和GND。 2. 将直流电机与电机驱动模块连接。连接方式如下: - 将直流电机的正极分别接到电机驱动模块的OUT1和OUT2或OUT3和OUT4。 - 将直流电机的负极分别接到电机驱动模块的GND。 3. 将蓝牙模块与Arduino主板连接。连接方式如下: - 将蓝牙模块的TXD引脚接到Arduino主板的RX引脚。 - 将蓝牙模块的RXD引脚接到Arduino主板的TX引脚。 - 将蓝牙模块的VCC引脚接到Arduino主板的5V引脚。 - 将蓝牙模块的GND引脚接到Arduino主板的GND引脚。 4. 将车轮和车架组装在一起,然后将整个电路连接到车架上。 5. 在Arduino IDE中编写代码。以下是一个简单的示例代码: ``` #include <SoftwareSerial.h> SoftwareSerial bluetooth(2, 3); // RX, TX int motorPin1 = 8; int motorPin2 = 9; int motorPin3 = 10; int motorPin4 = 11; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); bluetooth.begin(9600); } void loop() { if (bluetooth.available()) { char c = bluetooth.read(); if (c == 'F') { // 前进 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); } else if (c == 'B') { // 后退 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); } else if (c == 'L') { // 左转 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); } else if (c == 'R') { // 右转 digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); } else if (c == 'S') { // 停止 digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } } } ``` 6. 上传代码到Arduino主板,然后使用蓝牙手机App进行连接。在App中发送指令,即可控制小车的运动。 希望这个回答能够对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值