基于Arduino UNO的智能自主避障小车和蓝牙遥控小车

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

       Hello,大家好!今天我要给大家分享我近期制作的一个arduino小项目----智能避障小车。之前在某站上无意间刷到某位博主制作的一款智能避障小车,觉得很有意思,便打算自己也做一个来玩玩,于是便制作了一款我自己理解的避障小车。在此基础上,我还增加了蓝牙遥控,让二者可以相互切换,提高项目可玩性。当然,和其他避障小车类似,这款也是采用超声波来测距避障,代码相对其他大佬来说显得比较浅显易懂,对于刚接触Arduino的朋友非常友好。好了,废话不多说,直接看代码!!!

一、代码

/*********************************/                  //调取蓝牙模块库,调取伺服电机库
                                                                                                    
#include <SoftwareSerial.h>                          //调取库函数
#include <Servo.h>                                   //声明调用Servo.h库
SoftwareSerial BT(A0, A1);                           //新建对象,接收脚为A0--TXD,发送脚为A1--RXD
Servo servo;                                         //创建一个舵机对象

/*********************************/                  //定义驱动模块串口及变量

int TrigPin = 2;                                     //发出超声波
int EchoPin = 3;                                     //收到反射回来的超声波                                                                                                   
int Input1 = 4;                                      //定义uno的pin4向Input1输出
int Input2 = 5;                                      //定义uno的pin5向Input2输出
int Input3 = 6;                                      //定义uno的pin6向Input3输出
int Input4 = 7;                                      //定义uno的pin7向Input4输出
int pos = 118;                                       //创建变量,存储从模拟端口读取的值
float cm;                                            //因为测得的距离是浮点型的,单位为cm
int xuan;                                            
int choice;                                          //小车功能选择

/********************* ************/                 //控制函数部分

void stop()                                          //小车停止
{
   digitalWrite(Input1,LOW);                         //给低电平
   digitalWrite(Input2,LOW);                         //给低电平
   digitalWrite(Input3,LOW);                         //给低电平
   digitalWrite(Input4,LOW);                         //给低电平
   delay(50);  
}

void forward()                                       //小车前进
{
   digitalWrite(Input1,HIGH);                        //给高电平
   digitalWrite(Input2,LOW);                         //给低电平
   digitalWrite(Input3,HIGH);                        //给高电平
   digitalWrite(Input4,LOW);                         //给低电平
   delay(50);
}

void backward()                                      //小车后退
{
   digitalWrite(Input1,LOW);                         //给低电平
   digitalWrite(Input2,HIGH);                        //给高电平
   digitalWrite(Input3,LOW);                         //给低电平
   digitalWrite(Input4,HIGH);                        //给高电平
   delay(50);  
}

void turnleft()                                      //小车左转
{
   digitalWrite(Input1,HIGH);                        //给高电平
   digitalWrite(Input2,LOW);                         //给低电平
   digitalWrite(Input3,LOW);                         //给低电平
   digitalWrite(Input4,HIGH);                        //给高电平
   delay(50);  
}

void turnright()                                     //小车右转
{
   digitalWrite(Input1,LOW);                         //给低电平
   digitalWrite(Input2,HIGH);                        //给高电平
   digitalWrite(Input3,HIGH);                        //给高电平
   digitalWrite(Input4,LOW);                         //给低电平
   delay(50);
}

void Left()                                          //舵机左转
{
   while(pos < 180)
    {
      pos++;
      servo.write(pos);                              //写入舵机角度       
      delay(15);                                     //延时使舵机转到相应角度    
    }
}
 
void Right()                                         //舵机右转
{
   while(pos > 60)
    {
      pos--;
      servo.write(pos);                                 
      delay(15);                                        
    }
}
 
void Ranging()                                       //测量距离
{
   digitalWrite(TrigPin, LOW);                       //低电平发一个短时间脉冲去TrigPin 
   delayMicroseconds(2);                             //delayMicroseconds在更小的时间内延时准确,delayMicroseconds是毫秒级计时单位
   digitalWrite(TrigPin, HIGH);                      //通过这里控制超声波的发射
   delayMicroseconds(10);                            
   digitalWrite(TrigPin, LOW);                       //通过这里控制停止超声波的发射
   cm = pulseIn(EchoPin, HIGH) / 58.0;               //将回波时间换算成cm ,其中pulseIn(接收信号引脚,高低电平)函数用来接收反射回来的声波
   cm = (int(cm * 100.0)) / 100.0;                   //保留两位小数 
   Serial.print("Distance:"); 
   Serial.print(cm); 
   Serial.print("cm"); 
   Serial.println(); 
   //以上四句在串口监视器中输出
   delay(1000);
}

/****************************************************/

void setup()
{
   Serial.begin(9600);                               //与电脑串口相连,波特率为9600
   servo.attach(9);                                  //9号引脚输出舵机控制信号,仅能使用输出PWM信号的引脚
   pinMode(Input1, OUTPUT);                          //Input1引脚设置为输出模式
   pinMode(Input2, OUTPUT);                          //Input2引脚设置为输出模式
   pinMode(Input3, OUTPUT);                          //Input3引脚设置为输出模式
   pinMode(Input4, OUTPUT);                          //Input4引脚设置为输出模式
   pinMode(TrigPin, OUTPUT);                         //发出超声波串口设置为输出
   pinMode(EchoPin, INPUT);                          //接受超声波接口设为输入
   BT.begin(9600);                                   //设置波特率为9600
}

void loop()
{
  switch(choice)
    {
       case 'X' :                                    //选择避障
         Ranging();                                  //测量距离
         if(cm > 10.0)                               //没有碰到障碍物
           forward();
         else                                        //碰到障碍物
           {
             backward();                             //小车后退
             delay(200);                             //延时确定后退距离
             stop();                                 //小车停止
             Right();                                //舵机右转
             Ranging();                              //测量距离
             servo.write(118);                       //舵机回中
             if(cm > 10.0)                           //如果右边满足条件
               {
                 turnright();                        //小车右转
                 delay(200);                         //延时确定转弯角度
               }
             else                                    //如果右边不满足
               {
                 Left();                             //舵机左转
                 Ranging();                          //测量距离
                 servo.write(118);                   //舵机回中
                 turnleft();                         //小车左转
                 delay(200);                         //延时确定转弯角度
               }
           }
      case 'Y' :                                     //选择遥控
        while(BT.available())                        //蓝牙识别字符
          {
             xuan = BT.read();                       //蓝牙读取字符
             switch(xuan)
               {
                 case 'A' :                                
                   forward();                        //调取前进函数
                 case 'B' :                                 
                   backward();                       //调取后退函数  
                 case 'C' :                                
                   turnleft();                       //调取左转函数
                 case 'D' :                               
                   turnright();                      //调取右转函数   
                 case 'E' :                                
                   stop();                           //调取停止函数
               }
          }   
    }
}

代码看起来是不是很通俗易懂呢!!!

接下来给你们介绍我理解的手机蓝牙通讯和电脑串口通讯:

手机:BT.begin(9600); 

电脑:Serial.begin(9600);

括号里是波特率。二者更深层次的含义由于学术不精,无法给出具体解释,但经过实际测试是正确的。

        代码中涉及的伺服电机角度,是根据我购买的伺服电机结合制作时的需要所测量和设定的角度,只具有参考性。各位可以根据自己购买的伺服电机来进行修改。

void Left()                               //舵机左转
{
   while(pos < 180)
    {
      pos++;
      servo.write(pos);      //写入舵机角度  
      delay(15);//延时使舵机转到相应度        }
}

        该部分控制舵机转动采用while循环来实现,主要是使舵机逐角度的变化,也可以直接使用

servo.write(pos);

写入需要的角度,但会使的舵机转动到所设定角度的时间很短,可能会对舵机造成伤害(个人观点)。

二、所需材料

1.Arduino UNO开发板

2.HC-SR04超声波模块

3.HC-06蓝牙模块

4.L298N电机驱动板模块

5.智能小车底盘

6.18650充电电池及电池仓

7.杜邦线若干

        以上这些材料是我制作时用到的,均可在淘宝上购买到。对于小车框架,可以直接在网上购买或者自己制作。有能力的朋友,可以自己设计建模一款小车框架,然后通过3D打印实现。

         当然,小车并不只限于轮式结构,履带式小车相较轮式适应路况的性能更优秀,是不错的选择哦。

         手机端蓝牙遥控器用的是‘手机蓝牙调试器’,在应用商店里就可以下载到。相对应的A,B,C,D,E,X,Y在按键操作里编辑即可。文章来源地址https://www.toymoban.com/news/detail-428813.html

到了这里,关于基于Arduino UNO的智能自主避障小车和蓝牙遥控小车的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于51单片机的智能小车(循迹、避障、蓝牙控制)

    文章目录 前言 一、功能 二、主要模块 1.L298N模块 2.循迹模块 3.红外避障模块 4.超声波避障模块 5..蓝牙模块 代码 三、其余模块 四、总结   本项目可实现小车红外循迹,L298N电机驱动,红外避障,超声波避障,蓝牙控制等功能的切换。   红外循迹,L298N电机驱动,PWM电机调速

    2024年02月04日
    浏览(71)
  • 将循迹小车改为蓝牙控制自动避障小车#arduino

    演示视频: https://www.bilibili.com/video/BV1CM41187oh/?share_source=copy_webvd_source=d43eaf7cae2ed3677cb93f05f1110b0f 前言:         这是本人大一寒假期间,在某宝上捡了个蓝牙模块,于是心血来潮想把前阵子做的循迹小车改成可以蓝牙遥控且有自动避障功能的小车。ps:本人作为大一咸鱼一条

    2023年04月14日
    浏览(45)
  • 基于MSP430 红外避障-遥控小车(电赛必备 附项目代码)

    项目环境: 1. MSP430F5529 2. Code Composer Studio 3. 蓝牙调试助手 项目简介: 小车可分为3种工作模式,每种工作模式都会打印在OLED显示屏上,通过按键转换工作模式。 模式1: 小车红外循迹,通过超声波实时监测障碍物距离,若超出规定路线,距离障碍物相对较近时,原地停止,

    2023年04月08日
    浏览(42)
  • LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)

    目录 1、项目概述 2、项目架构 3、传感器和控制器 3.1、传感器 3.2、控制器 4、硬件环境 5、Arduino功能设计 6、LabVIEW功能设计 6.1、前面板设计 6.2、程序框图设计 智能小车是以轮子作为移动机构,并且能够实现自主行驶的机器人,又被称为轮式机器人。由于具有智能化的特点,

    2023年04月10日
    浏览(51)
  • 基于STM32的最简易蓝牙遥控小车

    本篇博客主要针对的读者为有一定单片机基础,但是第一次自制蓝牙遥控小车的小白同学,所用物件型号选择的是作者最熟悉、最常用的,老手请自行发挥。 硬件包括小车的机械部分、STM32f103c8t6最小系统板、ST-LINK下载器,HC-05蓝牙模块、CH340模块、L298N电机驱动模块,焊接设

    2024年02月04日
    浏览(46)
  • 基于arduino及PS2的麦克纳姆轮遥控小车

           2、设计原理 通过建模模拟车体基本构架,便于结构设计、无实物展示展示和组装;                              (b) 图 3.1  小车 sw 模型    小车简介:小车将采用钢质小车地盘作为车身;以直流减速电机提供动力;麦克纳姆轮作为车轮;采取可装卸推

    2024年02月02日
    浏览(63)
  • STM32超级蓝牙小车——基于STM32F103C8T6的多功能蓝牙小车(PID循迹、跟踪、有源蜂鸣器播放音乐、蓝牙遥控、AD采集+DMA转运等超多元素小车)

    一、项目时间:2023.7.24~11.26 二、实现效果:通过蓝牙控制小车运动与模式转换                         模式一:循迹模式                         模式二:跟踪模式                         模式三:音乐模式                         模式四:控制运动模式 三、使

    2024年02月04日
    浏览(56)
  • 基于LD3320的51智能遥控语音小车

    小车实物图  本实验基于51单片机和LD3320语音识别模块 小车能够实现遥控器直接控制,语音控制以及自动避障 涉及到的知识有:I/O口的配置(点亮led),定时器(循迹),串口通信(两个板子的连接),SPI同步通信(遥控器),中断(定时器中断和串口中断),PWM(循迹)

    2024年02月06日
    浏览(45)
  • 100、基于STM32单片机自动跟随小车 红外遥控控制小车避障模式 跟随模式设计(程序+原理图+PCB源文件+流程图+硬件设计资料+元器件清单等)

    智能小车通过各种感应器获得外部环境信息和内部运动状态,实现在复杂环境背景下的自主运动,从而完成具有特定功能的机器人系统。而随着智能化电器时代的到来,它们在为人们提供的舒适的生活环境的同时,也提高了制造智能化电器对于人才要求的门槛。智能小车是集

    2024年02月15日
    浏览(82)
  • Arduino UNO HC-05蓝牙配对教程

    1. 准备材料         Arduino1(主)、Arduino2(从)、蓝牙1(主)、蓝牙2(从)、杜邦线若干 2. 接线方式(主从一致) 1.主机配对 1. 新建一个空白工程,直接上传到Arduino。   2. 设置蓝牙进入AT指令模式,具体操作方法:按住蓝牙模块按钮,然后上电,直到蓝牙模块LED进入慢闪烁模式,

    2023年04月27日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包