将循迹小车改为蓝牙控制自动避障小车#arduino

这篇具有很好参考价值的文章主要介绍了将循迹小车改为蓝牙控制自动避障小车#arduino。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

演示视频:https://www.bilibili.com/video/BV1CM41187oh/?share_source=copy_web&vd_source=d43eaf7cae2ed3677cb93f05f1110b0f

前言:

       这是本人大一寒假期间,在某宝上捡了个蓝牙模块,于是心血来潮想把前阵子做的循迹小车改成可以蓝牙遥控且有自动避障功能的小车。ps:本人作为大一咸鱼一条,刚接触这个领域,水平不高,希望站内大佬多给建议。

,将循迹小车改为蓝牙控制自动避障小车#arduino

 “家里杜邦线不够了又没面包板所以拆东头接西头,接的线很乱”

材料:

           控制模块:Arduino UNO;

           电机驱动模块: L298N;

           循迹模块: 红外传感器;

           电源:两节3.7V的18650;

           蓝牙:BT08-E;

           小车主体;

概述:

       将循迹用的四路红外传感器掰下来装到前后左右四个方向,通过传感器传出的信号判断周围是否有障碍物再作出相应运动,从而达到避障效果,再配合蓝牙模块实现远程遥控。将循迹小车改为蓝牙控制自动避障小车#arduino将循迹小车改为蓝牙控制自动避障小车#arduino将循迹小车改为蓝牙控制自动避障小车#arduino

电源用的两节18650,因为L298N内置稳压所以我电源给L298N供电,再由L298N给arduino供电,最后arduino再给蓝牙模块以及红外传感器供电。

注意共地!!!注意共地!!!注意共地!!!

具体接法:

       电源正极接L298N的12v输入;

       arduino uno 的vin引脚接L298N的5v输入;

       arduino uno 、红外传感器、BT08-E、L298N的GND串联起来接到电源负极;

值得注意的是,arduino发送接收的电压跟蓝牙BT08-E发送接收的电压不同,所以保险起见最好连个分压电路。不连其实也没太大关系(至少我到现在还没烧)。

代码部分:

#define LeftMotor1 9  
#define LeftMotor2 6   
#define RightMotor1 10 
#define RightMotor2 11 
#define track1 3 
#define track2 4
#define track3 12
#define track4 13
bool mode;
bool A;
bool B;
bool C;
bool D;
char serial_data;
int Sensor[4] = {1, 1, 1, 1}; //初始化循迹的值
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //串口初始化
  Track_Init(); //循迹模块初始化
  Motor_Init(); //电机引脚初始化
}
void loop() {
  Sensor_Read();
  if( mode == 1 ){
    avoiding(); //手柄模式
    if( A == 1){
      RUN2();}
      else if (B == 1){
        BACK2();}
        else if (C == 1){
          LEFT2();}
          else if (D == 1){
            RIGHT2();}
            else if (A == 0 || B == 0 || C == 0 || D == 0){
              STOP();}}
              else {
                self_avoiding();}}//自动模式
void Track_Init()
{
  pinMode(track1, INPUT);
  pinMode(track2, INPUT);
  pinMode(track3, INPUT);
  pinMode(track4, INPUT);
}
void Motor_Init()
{
  pinMode(LeftMotor1, OUTPUT);
  pinMode(LeftMotor2, OUTPUT);
  pinMode(RightMotor1, OUTPUT);
  pinMode(RightMotor2, OUTPUT);
}
void Sensor_Read()
{
  Sensor [0] = digitalRead(track1);
  Sensor [1] = digitalRead(track2);
  Sensor [2] = digitalRead(track3);
  Sensor [3] = digitalRead(track4);
}
void Motor_Speed(int Left1_Speed, int Left2_Speed, int Right1_Speed, int Right2_Speed)
{
  analogWrite(LeftMotor1, Left1_Speed); 
  analogWrite(LeftMotor2, Left2_Speed);
  analogWrite(RightMotor1, Right1_Speed);
  analogWrite(RightMotor2, Right2_Speed);
}
void RUN2 ()
{
  Motor_Speed(200,0,200,0);
  delay(15);
  }
void BACK2 ()
{ 
  Motor_Speed(0,200,0,200);
  delay(15);
  }
void LEFT2 ()
{
  Motor_Speed(0,100,200,0);
  delay(15);
  } 
void RIGHT2 ()
{
  Motor_Speed(200,0,0,100);
  delay(15);
  }
void RUN ()
{
  Motor_Speed(100,0,100,0);
  delay(15);
  }
void BACK ()
{
  Motor_Speed(0,100,0,100);
  delay(15);
  }
void RIGHT ()
{
  Motor_Speed(100,0,0,0);
  delay(15);
  }
void LEFT ()
{
  Motor_Speed(0,0,100,0);
  delay(15);
  }
void STOP()
{
  Motor_Speed(0,0,0,0);
  delay(15);
  }  
void avoiding()
{
  if (Sensor [0] == 1 && Sensor [1] == 0 && Sensor [2] == 1 && Sensor [3] == 1)  //1-0-1-1 后退
  { BACK2();
  delay(300);}    
  else if (Sensor [0] == 1 && Sensor [1] == 1 && Sensor [2] == 0 && Sensor [3] == 1)  //1-1-0-1 前进
  { RUN2();
  delay(300);}
  else if (Sensor [0] == 1 && Sensor [1] == 1 && Sensor [2] == 1 && Sensor [3] == 0)  //1-1-1-0 右转
  { RIGHT2();}
  else if (Sensor [0] == 0 && Sensor [1] == 1 && Sensor [2] == 1 && Sensor [3] == 1)  //0-1-1-1 左转
  { LEFT2();}
  else if (Sensor [0] == 0 && Sensor [1] == 0 && Sensor [2] == 1 && Sensor [3] == 0)  //0-0-1-0 急退
  { BACK2();
  delay(300);}
  else if (Sensor [0] == 0 && Sensor [1] == 0 && Sensor [2] == 1 && Sensor [3] == 1)  //0-0-1-1 左转2
  { LEFT2();}
  else if (Sensor [0] == 1 && Sensor [1] == 0 && Sensor [2] == 0 && Sensor [3] == 1)  //1-0-0-1 右转2
  { RIGHT2();}
  else if (Serial.available()>0)
  {serial_data = Serial.read();
  Serial.print("serial_data = ");
  Serial.println(serial_data);
  Serial.print("mode = ");
  Serial.println(mode);
  Serial.print("ABCD = ");
  Serial.print(A);
  Serial.print(B);
  Serial.print(C);
  Serial.println(D);
  if (serial_data == 'w' )
  { A = 1;} 
  else if (serial_data == 's' )
  { B = 1;}
  else if (serial_data == 'a' )
  { C = 1;}
  else if (serial_data == 'd' )
  { D = 1;}
  else if (serial_data == 'p')
  { A = 0 ;
  B = 0;
  C = 0;
  D = 0;}    
  else if (serial_data == 'm' )  
  { mode = 0;
  Serial.println("self_avoiding on");
  Serial.print("mode = ");
  Serial.print(mode);
  Serial.print("serial_data = ");
  Serial.println(serial_data);}} 
  else
  { STOP();}
}
void self_avoiding()
{
  if (Sensor [0] == 1 && Sensor [1] == 0 && Sensor [2] == 1 && Sensor [3] == 1)  //1-0-1-1 后退
  { BACK();
  delay(1000);
  LEFT();
  delay(500);}    
  else if (Sensor [0] == 1 && Sensor [1] == 1 && Sensor [2] == 0 && Sensor [3] == 1)  //1-1-0-1 前进
  { RUN();}
  else if (Sensor [0] == 1 && Sensor [1] == 1 && Sensor [2] == 1 && Sensor [3] == 0)  //1-1-1-0 右转
  { RIGHT();}
  else if (Sensor [0] == 0 && Sensor [1] == 1 && Sensor [2] == 1 && Sensor [3] == 1)  //0-1-1-1 左转
  { LEFT();}
  else if (Sensor [0] == 0 && Sensor [1] == 0 && Sensor [2] == 1 && Sensor [3] == 0)  //0-0-1-0 急退
  { BACK();
  delay(1000);
  RIGHT();
  delay(500);}
  else if (Sensor [0] == 0 && Sensor [1] == 0 && Sensor [2] == 1 && Sensor [3] == 1)  //0-0-1-1 左转2
  { LEFT();}
  else if (Sensor [0] == 1 && Sensor [1] == 0 && Sensor [2] == 0 && Sensor [3] == 1)  //1-0-0-1 右转2
  { RIGHT();}
  else if (Serial.available()>0)
  {serial_data = Serial.read();
  Serial.print("serial_data = ");
  Serial.println(serial_data);
  Serial.print("mode = ");
  Serial.println(mode);
  if (serial_data == 'n')
  { mode = 1;
  Serial.println("avoiding on");
  Serial.print("mode = ");
  Serial.println(mode);
  Serial.print("serial_data = ");
  Serial.println(serial_data);}}
  else 
  { RUN();}
 }

提示:完整的代码可以直接烧录Arduino运行,不过地图不同,执行效果也不同,完全copy就能用,就不要想了(摘自无言侠)

注意:因为占用了硬件串口,所以给arduino录程序的时候记得把引脚1引脚0的杜邦线拔掉。

当然嫌麻烦也可以启用软件串口:

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3);

最后打开蓝牙调试器,设置相关按键就完成啦

蓝牙调试器按键设置前进:按下“w”松开“p” ; 后退:按下“s”松开“p”  ; 向左:按下“a”松开“p” ;  向右:按下“d”松开“p”;自动模式“m”   ;  遥控模式:“n”;

 将循迹小车改为蓝牙控制自动避障小车#arduino

蓝牙调试器:

链接:https://pan.baidu.com/s/1fH1YznS0gcOV-CmjFipVxA 
提取码:13j7文章来源地址https://www.toymoban.com/news/detail-413142.html

到了这里,关于将循迹小车改为蓝牙控制自动避障小车#arduino的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于stm32的智能小车(远程控制、避障、循迹)

    学完stm32,总是想做点东西“大显身手”一下,智能小车就成了首选项目,其核心只是就是PWM输出,I/O口引脚电平判断。 制作智能小车的硬件名单: 由于我们做的控制功能可以使用2.4G控制,也可以使用蓝牙进行控制, 两种传输方式所需购买的模块不同,已在硬件名单中加以

    2024年02月03日
    浏览(37)
  • 基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度

    wx供重浩:创享日记 对话框发送:单片机小车 免费获取完整无水印报告等 利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。 1.1智能

    2023年04月22日
    浏览(40)
  • 【IoT】红外循迹避障小车

    随着生产自动化的发展需要,机器人已经越来越广泛地应用到生产自动化上,随着科学技术的发展,机器人的传感器种类也越来越多,其中红外传感器已经成为自动行走和驾驶的重要部件。 红外的典型应用领域为自主式智能导航系统,机器人要实现自动避障功能就必须要感知

    2024年02月04日
    浏览(28)
  • STM32循迹避障小车(颜色识别)

    主控采用stm32F103C8T6,三个循迹模块,超声波模块,openmv,降压模块,锂电池组,TT马达四个,L298n。可以实现循迹,避障,颜色识别等功能。 1、循迹模块 红外循迹模块通常包含一组红外线发射管和一组红外线接收器,发射管发出红外线,接收器接收地面反射的红外线信号。

    2024年02月07日
    浏览(31)
  • 基于STM32的智能循迹避障小车实验(循迹部分)

    接上一部分基于STM32的智能循迹避障小车实验(小车运动部分) 上一篇我们成功让小车动起来了,现在我们试着让小车听话地运动。 这一部分主要利用了循迹模块两个 图 1循迹模块 就是这个东西: 一共三个引脚 VCC :电源线,连接单片机的 3.3V-5V GND :地线,连接单片机的接

    2024年02月11日
    浏览(34)
  • STM32循迹寻光避障小车(二)(红外循迹部分)

    目录 TRCT5000寻迹模块介绍 1. 模块介绍: 2. 管脚介绍: 3. 使用原理: 4. 代码部分: Tracing.c文件全部代码(附带注释) Tracing.h文件全部代码 首先介绍一下使用到的红外寻迹模块,我们采用了TRCT5000的三路红外寻迹模 我从网上找到如下的图片和资料: 1、采用TCRT5000红外反射传感

    2024年02月17日
    浏览(34)
  • STM32智能循迹避障小车(1)循迹调速功能的实现

    1.stm32f103rct6最小系统板 2.两个TB6612FNG电机驱动模块 线路连接请参考实际程序连线,此图为网上下载仅供参考。 3.三个TCRT5000循迹模块 这种是单路TCRT5000循迹模块,有四个接口,VCC电源接口、GND地接口,DO就是它的输出信号,然后AO口(模拟信号输出)。一般DO口接在stm32系统板

    2024年02月04日
    浏览(30)
  • 基于STM32的智能循迹避障小车实验(小车运动部分)

    写在前面 这个实验是关于智能小车的实验,现在的想法就是先做出一个循迹和避障功能,后续可能会再添加一些其他的模块。 我在做这个实验之前基本了解了F1系列开发板的大部分模块,如果没有学习之前的模块,建议先学习下开发板的基本模块。 实验所需的硬件 本来是想

    2024年02月06日
    浏览(45)
  • 机器人制作开源方案 | 智能循迹避障小车

    作者: 刘元青、邹海峰、付志伟、秦怀远、牛文进 单位: 哈尔滨信息工程学院 指导老师: 姚清元       智能小车是移动式机器人的重要组成部分,而移动机器人不仅能够在经济、国防、教育、文化和生活中起到越来越大的作用,也是研究复杂智能行为的产生、探索人类思

    2024年01月16日
    浏览(46)
  • 使用STM32 再实现循迹/跟随/摇头避障小车

    硬件介绍和接线 TCRT5000 使用方法和原理见89C52时期的介绍。 循迹小车需要使用两个TCRT5000, 左侧的DO接到PB3 ; 右侧的DO接到PB4 CubeMX 1. 在上节的基础上进行修改 + 配置两个传感器的GPIO 2. 惯例配置更新代码 Keil 注意, 如果要使用PWM调速就必须全部是PWM调速 ,因为一旦使用PW

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包