2022小车跟随系统(B题)基于arduino的循迹小车操作代码以及赛后分析

一、提要

        由于学校召开,在2023年开展电赛,赛题是2022年别的学校都开展过的。由于stm32普遍性,所以网上源码很多,但是没有相关arduino的源代码,电赛开始之时我自学arduino,虽然在比赛中不是很尽人意,在几个月内积累了不少经验与教训,发出此源码供大家参考。

赛题如下:

二、材料准备

1.主车:Arduino UNO板,12v电池,8v电池(供电机驱动)、L298N电机驱动、超声波测距模块、HC-05蓝牙模块、有源蜂鸣器、(注意一定要用有源,只要通电就能响)、五路灰度传感器以及四个电机。

2.从车:比主车多了一个OLED显示屏。

此处的材料也有很多不足之处,可以看结尾处分析!

三、源码

1、主车源码

#include <SoftwareSerial.h>

#define tx 4  //蓝牙串口引脚
#define rx 0
//只有2.3引脚提供拦截模式
#define ModlePin 2  //模式引脚
#define BeginPin 3  //启动引脚

#define TrigPin 5  //超声波引脚
#define EchoPin 6

#define LeftMotor1 7  // 电机引脚
#define LeftMotor2 8
#define RightMotor1 11
#define RightMotor2 12
#define LeftPwm 9
#define RightPwm 10

#define LED 13  //LED引脚

#define track1 14  // 循迹模块引脚
#define track2 15
#define track3 16
#define track4 17
#define track5 18

#define buzzer 19  //蜂鸣器

byte Sensor[5];  //初始化循迹的值

// 蓝牙引脚
SoftwareSerial TX(rx, tx);

/*
  模块:
    蓝牙模块
    电机驱动模块
    超声波模块
    循迹模块
*/
/*
  0、4 蓝牙串口                 O/I
  2  模式选择                    O
  3  开始模式                   O
  5、6 超声波                   O/I
  19  蜂鸣器                    O
  7、8、11、12、9、10  电机以及PWM      O
  13 LED灯                      O
  A0、A1、A2、A3、A4  循迹   I
*/
/*
  Modle  模式参数
  Begin  小车启动参数
  EndNum  到达终点次数
  Speed  速度
  distance  距离
*/

// 限制行为的变量
byte Modle = 0;       //模式的选择
bool Begin = 0;       //当为1,程序代码执行
byte EndNum = 0;      //经过终点的次数
byte Speed = 0;       //速度设置
int distance = 0;     //距离变量
bool lr_open = 0;     //左右通道开启
bool F_Stop_End = 0;  //四号线专家设置停止是否完成
unsigned long Now_b = 0, Begin_a = 0;//(单位ms)Now_b是从arduino开始经过的时间 Begin_a是小车开始启动时的时间点
int Now_B = 0, Begin_A = 0, Begin_End = 0;//(单位s)Now_B、Begin_A分别是对应Now_b、Begin_A的秒的时间  Begin_End = Begin_A - Now_B,即为开始启动后小车经过的时间
//byte y = 0;//用于调试,不用管

void MotorDrive(bool Left1, bool Left2, bool Right1, bool Right2, int LPwm, int RPwm)  //  电机驱动
{
  delay(10);
  digitalWrite(LeftMotor1, Left1);
  digitalWrite(LeftMotor2, Left2);
  analogWrite(LeftPwm, LPwm);

  digitalWrite(RightMotor1, Right1);
  digitalWrite(RightMotor2, Right2);
  analogWrite(RightPwm, RPwm);
}

void Go(byte num) {
  int a = 0, b = 0, c = 0, d = 0, e = 10;  //a:对正走一侧加速 b:对反走一侧减速 c:应用于模式三的主车变从,测距加减速 d:对于模式四的转弯变换的减速e:用于延迟
  if (Modle == 1 || Modle == 2 || Modle == 3) {
    a = 30;
    if (Speed == 130)
      b = 20;
    else {
      b = 30;
      d = 60;
    }
  } else if (Modle = 4) {
    a = 20;
    b = 30;
    d = 80;
  }

  if (Modle == 3 && EndNum == 1) {
    if (distance > 5 && distance < 16) {
      c = -75;
      e = 30;
    } else if (distance > 16 && distance < 18) {
      c = -60;
      e = 20;
    } else if (distance > 26)
      c = 20;
  }
  switch (num) {
    case 1:  //直走
      {
        MotorDrive(1, 0, 1, 0, Speed + c, Speed + c);
        delay(e);
        break;
      }
    case 2:  //小左转
      {
        MotorDrive(0, 1, 1, 0, Speed - b - d, Speed + a - d);
        delay(10);
        break;
      }
    case 3:  //大左转
      {
        MotorDrive(0, 1, 1, 0, Speed - b - d, Speed + a + b - d);
        delay(30);
        break;
      }
    case 4:  //小右转
      {
        MotorDrive(1, 0, 0, 1, Speed + a - d, Speed - b - d);
        delay(10);
        break;
      }
    case 5:  //大右转
      {
        MotorDrive(1, 0, 0, 1, Speed + a + b - d, Speed - b - d);
        delay(15);
        break;
      }
    case 6:  //停车
      {
        MotorDrive(0, 0, 0, 0, 0, 0);
        delay(5000);
        break;
      }
  }
}

//****************************************************************【【【【Set up】】】】**********************************************************************************
void setup() {
  Serial.begin(9600);
  TX.begin(38400);

  //其他引脚初始化(蓝牙串口、超声波、蜂鸣器、模式中断、LED灯)
  Other_Init();
  //电机引脚初始化、Pwm引脚初始化
  Motor_Init();
  //循迹模块引脚初始化
  Track_Init();
}
//*************************************************************【【【【Set up 分块】】】】**********************************************************************************
void ModleSet()  //  模式、速度、到达终点次数 设置
{
  delay(10);
  while (digitalRead(ModlePin) == LOW)
    ;
  Modle += 1;
  if (Modle > 4)
    Modle = 1;
  switch (Modle) {
    case 1:
      {
        Speed = 140;  // 0.3
        EndNum = 1;
        break;
      }
    case 2:
      {
        Speed = 190;  // 0.5
        EndNum = 2;
        break;
      }
    case 3:
      {
        Speed = 190;  // 0.5
        EndNum = 3;
        break;
      }
    case 4:
      {
        Speed = 240;  // 1
        EndNum = 3;
        break;
      }
  }
  delay(30);
  TX.write("M");
  TX.print(Modle);
  delay(3);
  TX.wr
  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
一、引言 随着科技的不断发展,人工智能技术已经逐渐渗透到各个领域,其中智能交通系统是其中之一,智能交通系统已经成为了城市管理的重要组成部分。而小车跟随行驶系统正是智能交通系统中的一种体现,它可以实现车辆之间的跟随行驶,从而提高道路通行效率,减少交通拥堵,是智能交通系统中一个重要的研究方向之一。本文将从小车跟随行驶系统的原理、技术路线、应用场景、发展趋势等方面进行探讨。 二、小车跟随行驶系统的原理 小车跟随行驶系统是一种通过车辆间的通讯协议,实现车辆之间跟随行驶的系统。通过对车辆之间的距离、速度、加速度等参数进行实时监测和控制,实现车辆之间的跟随行驶。其原理如下: 1.车辆之间的通讯协议 小车跟随行驶系统需要通过车辆之间的通讯协议来进行实时监测和控制。常见的通讯协议有CAN、LIN、FlexRay等。其中,CAN通讯协议是一种常见的汽车网络通讯协议,它具有高速率、高可靠性、低成本等优点,因此被广泛应用于汽车电子控制系统中。在小车跟随行驶系统中,车辆之间通过CAN通讯协议进行通讯,实现车辆之间的实时监测和控制。 2.距离控制 在小车跟随行驶系统中,距离控制是非常重要的一环。通过对车辆之间的距离进行实时监测和控制,可以保证车辆之间的安全距离,避免发生碰撞事故。在小车跟随行驶系统中,采用的是雷达或激光雷达等传感器对车辆之间的距离进行实时监测,当距离过近时,系统会发出警报或自动刹车,保证车辆之间的安全距离。 3.速度控制 在小车跟随行驶系统中,速度控制也是非常重要的一环。通过对车辆之间的速度进行实时监测和控制,可以保证车辆之间的速度一致,从而实现车辆之间的跟随行驶。在小车跟随行驶系统中,采用的是GPS或车载惯性导航系统等传感器对车辆之间的速度进行实时监测,当速度不一致时,系统会自动调整车速,保证车辆之间的速度一致。 4.加速度控制 在小车跟随行驶系统中,加速度控制也是非常重要的一环。通过对车辆之间的加速度进行实时监测和控制,可以保证车辆之间的加速度一致,从而实现车辆之间的平稳跟随行驶。在小车跟随行驶系统中,采用的是车载加速度传感器等传感器对车辆之间的加速度进行实时监测,当加速度不一致时,系统会自动调整车速,保证车辆之间的加速度一致。 三、小车跟随行驶系统的技术路线 小车跟随行驶系统的技术路线主要包括传感器、通讯协议、控制算法和人机界面等四个方面。 1.传感器 传感器是小车跟随行驶系统的核心组成部分,它负责对车辆之间的距离、速度、加速度等参数进行实时监测和控制。常用的传感器包括雷达、激光雷达、GPS、车载惯性导航系统、车载加速度传感器等。 2.通讯协议 通讯协议是小车跟随行驶系统中车辆之间进行通讯的关键。常用的通讯协议包括CAN、LIN、FlexRay等。 3.控制算法 控制算法是小车跟随行驶系统的核心技术,它负责对车辆之间的距离、速度、加速度等参数进行实时监测和控制,实现车辆之间的跟随行驶。常用的控制算法包括PID控制算法、模糊控制算法、神经网络控制算法等。 4.人机界面 人机界面是小车跟随行驶系统中人与系统之间进行交互的关键。常用的人机界面包括触摸屏、语音识别、手势识别等。 四、小车跟随行驶系统的应用场景 小车跟随行驶系统可以应用于高速公路、城市快速路、停车场等场景。 1.高速公路 在高速公路上,小车跟随行驶系统可以实现车辆之间的跟随行驶,从而提高道路通行效率,减少交通拥堵。同时,小车跟随行驶系统可以提高行驶安全性,避免发生车祸事故。 2.城市快速路 在城市快速路上,小车跟随行驶系统可以实现车辆之间的跟随行驶,从而提高道路通行效率,减少交通拥堵。同时,小车跟随行驶系统可以提高行驶安全性,避免发生车祸事故。 3.停车场 在停车场中,小车跟随行驶系统可以实现车辆之间的自动停车和自动取车,从而提高停车效率,减少停车时间。同时,小车跟随行驶系统可以提高停车安全性,避免发生刮蹭事故。 五、小车跟随行驶系统的发展趋势 小车跟随行驶系统是智能交通系统中的一个重要研究方向,随着科技的不断发展,小车跟随行驶系统将会迎来新的发展趋势。 1.自动驾驶技术的应用 随着自动驾驶技术的不断发展,小车跟随行驶系统将会应用于自动驾驶车辆中,实现车辆之间的自动跟随行驶。这将会提高车辆之间的通信效率,减少人为干预,从而提高驾驶安全性。 2.人工智能技术的应用 随着人工智能技术的不断发展,小车跟随行驶系统将会应用于人工智能驾驶系统中,实现车辆之间的智能跟随行驶。这将会提高车辆之间的通信效率,减少人为干预,从而提高驾驶安全性。 3.传感器技术的提升 随着传感器技术的不断提升,小车跟随行驶系统将会使用更加先进的传感器,如毫米波雷达、激光雷达等,从而提高对车辆之间距离、速度、加速度等参数的实时监测和控制能力。 六、结论 小车跟随行驶系统是智能交通系统中的一个重要研究方向,它可以实现车辆之间的跟随行驶,提高道路通行效率,减少交通拥堵,是智能交通系统中一个重要的组成部分。随着科技的不断发展,小车跟随行驶系统将会迎来新的发展趋势,如自动驾驶技术的应用、人工智能技术的应用、传感器技术的提升等,这将会进一步提高小车跟随行驶系统的性能和应用范围,为智能交通系统的发展提供更加强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值