避障小车_避障小车原理 - CSDN
精华内容
参与话题
  • stm32 智能避障小车(一)

    千次阅读 热门讨论 2019-02-14 16:33:14
    避障小车制作过程 今年寒假期间,我再csdn上看到别人制作的避障小车,我想了想,越想越觉得好玩,于是在这20多天里,我基本已经做到我想要的效果了,这期间我也是很烦恼,很简单的制作,我花费了这么长的时间,我...

    避障小车制作过程

    今年寒假期间,我再csdn上看到别人制作的避障小车,我想了想,越想越觉得好玩,于是在这20多天里,我基本已经做到我想要的效果了,这期间我也是很烦恼,很简单的制作,我花费了这么长的时间,我觉得我是缺少一个干到底的劲,或者说是专注。废话不多说了,开始正题。
    首先先看成品,主控芯片我用的还是我自己买的实验板,以后我会用c8t6来代替,毕竟这么重。在这里插入图片描述 然后我会把视频上传到哔哩哔哩,直达哔哩哔哩然后我会把整个过程分为,电源l298n,超声波hc-sr04,舵机sg90以及其他小的注意事项,各单独写一篇博文。希望对大家有所帮助。
    最后打完收工。。。。。

    展开全文
  • 51单片机的超声波智障(避障小车

    万次阅读 多人点赞 2020-01-20 21:24:51
    最近在学习51单片机,暑假闲着无聊,便从网上买了个51单片机和一些传感器模块,不知怎么的突然想起小时候对小车的痴迷,于是便准备利用暑假时间做一超声波避障小车,就算是对童年时光的祭奠吧,,,,,, ...

    51单片机制作的超声波智障(避障)小车

    最近在学习51单片机,暑假闲着无聊,便从网上买了个51单片机和一些传感器模块,准备利用暑假时间做一超声波避障小车。
    小车做的很简陋,因为是初学51单片机,所以代码可能写的不是很好。
    小车需要用到的材料:

    • 51单片机小板
    • HC-SR04超声波模块
    • SG90舵机
    • L298n电机驱动模块
    • 两个电机

    keil中的代码

    #include<reg52.h>
    #include<intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    #define barrierDis 15      //距离障碍物的距离 
    uint sum;
    float L;
    sbit LED = P0^0;
    sbit Trig = P1^1;	   //超声波模块的TRIG
    sbit Echo = P1^2;	   //超声波模块的ECHO
    sbit motorDriver_1 =P2^1;  //控制第一个电机,从单片机出来后接L298n模块的IN1
    sbit motorDriver_2 =P2^2;  //控制第一个电机,从单片机出来后接L298n模块的IN2
    sbit motorDriver_3 =P2^3;  //控制第二个电机,从单片机出来后接L298n模块的IN3
    sbit motorDriver_4 =P2^4;  //控制第二个电机,从单片机出来后接L298n模块的IN4
    sbit servorControl =P1^0;  //舵机的控制引脚
    uchar flag=0;
    uchar control=5;
    uchar servorTime=0;
    uchar lFlag=0;//左方向是否有障碍的标志
    uchar rFlag=0;//右方向是否有障碍的标志
    void delay(uchar time){	 //延迟函数
    	uchar i;
    	for(;time>0;time--){
    		for(i=0;i<255;i++);
    	}
    }
    void stop(){	 //小车停止
    	motorDriver_1=0;
    	motorDriver_2=0;
    	motorDriver_3=0;
    	motorDriver_4=0;
    }
    void turnLeft(){		//小车向左转
    	motorDriver_1=1;
    	motorDriver_2=0;
    	motorDriver_3=0;
    	motorDriver_4=0;
    }						 //小车向右转
    void turnRight(){
    	motorDriver_1=0;
    	motorDriver_2=0;
    	motorDriver_3=1;
    	motorDriver_4=0;
    }
    void turnUp(){			  //小车向前走
    	motorDriver_1=1;
    	motorDriver_2=0;
    	motorDriver_3=1;
    	motorDriver_4=0;
    }
    void turnDown(){		  //小车向后走
    	motorDriver_1=0;
    	motorDriver_2=1;
    	motorDriver_3=0;
    	motorDriver_4=1;
    }
    void openHc(){
       Trig=1;
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       Trig=0;
    }
    uchar getDistance(){  //利用超声波模块判断有无障碍物
    	TH0=0;
    	TL0=0;
    	openHc();
    	while(!Echo);
    	TR0=1;
    	while(Echo);
    	TR0=0;
    	sum=TH0*256+TL0;
    	L=(sum*1.78)/100;
    	if(L<barrierDis&&flag==0){
    		LED=0;
    		return 0;
    	}
    	else{
    		LED=1;
    		flag=0;
    		return 1;
    	}
    }
    void main(){
    		LED=1;
    		EA=1;
    		ET0=1;
    		ET1=1;
    		TMOD=0x11;
    		TH1=0xff;
    	    TL1=0x9c;
    		servorTime=0;
    		while(1){
    			 stop();	 
    			 control=15;//控制舵机使超声波模块正对前方
    			 servorTime=0;
    			 TR1=1;
    			 delay(200);
    			 TR1=0;
    			 turnUp();
    			 LED=0;
    			 delay(200);
    			 LED=1;
    			 while(getDistance()==1); //向前行驶,直到前方有障碍物
    			 do{
    			    stop();
    				control=22;	   //使舵机向左摆动
    				servorTime=0;
    				TR1=1;
    			 	delay(200);
    				TR1=0;
    				rFlag=getDistance();
    		 		control=5;		 //使舵机向右摆动
    				servorTime=0;
    				TR1=1;
    		 		delay(200);
    				TR1=0;
    				lFlag=getDistance();
    				turnDown();
    				delay(220);
    				delay(220);
    				delay(220);
    			}while(lFlag==0&&rFlag==0);
    			 if(rFlag==1&&lFlag==0)	//左侧没有障碍物
    			 	turnLeft();
    			 else if(rFlag==0&&lFlag==1)//右侧没有障碍物
    			 	turnRight();
    			 else if(rFlag==1&&lFlag==1)//两侧都没有障碍物,默认向左走
    			 	turnLeft();
    			 delay(220);
    			 delay(220);
    			 delay(200);
    		}
    }
    void T1_int(void) interrupt 3{	  //产生舵机所需要的脉冲
     		TH1=0xff;
    		TL1= 0x9c;
    		servorTime++;
    		if(servorTime<=control)
    			servorControl=1;
    		else
    			servorControl=0;
    		if(servorTime>=200)
    			servorTime=0;
    }
    void T0_int(void) interrupt 1{	  //超声波超出测量范围
    		flag=1;
    }
    
    
    

    ###做好的实物图
    这里写图片描述

    展开全文
  • 51超声波避障小车

    千次阅读 多人点赞 2018-12-26 13:24:11
    超声波避障小车 简介 本文小车的功能主要有两个:超声波测距避障,以及蓝牙遥控。主控芯片用的是STC89C52,电机驱动模块用的是L298N,超声波传感器HC-SR04,蓝牙模块使用的是HC-05,电机采用5V的直流电机。 总体设计...

    超声波避障小车

    简介

    本文小车的功能主要有两个:超声波测距避障,以及蓝牙遥控。主控芯片用的是STC89C52,电机驱动模块用的是L298N,超声波传感器HC-SR04,蓝牙模块使用的是HC-05,电机采用5V的直流电机。

    总体设计

    总体方案框图

    在这里插入图片描述

    硬件篇

    1. 主控芯片STC89C52
      本实验使用的最小系统主控芯片是STC89C52,功能不是很多。该最小系统是学习单片机时,在淘宝购买集成好的开发板Mini51。(建议:自己购买洞洞板和其他配件搭建最小系统,需要的功能模块再拓展,这样能学到的东西比较多)
      Mini51实物图

    2. 超声波模块HC-SR04
      能测距的传感器有很多,如红外传感器,激光传感器等等。也考虑过使用红外传感器,因为价格成本比较低,但红外传感器的抗干扰能力就没超声波好,红外传感器主要是利用光反射的原理,对于透明的障碍物就会有影响。所以本实验使用的是超声波传感器。
      其原理也并不难理解,超声波测距的原理正是基于其物理基础,当超声波模块产生超声波后,单片机的计时器开始计时。超声波在遇到障碍物后会被反射,超声波模块接收到反射波后,单片机的计时器停止计时。根据收发超声波所产生的时间差,便可计算出超声波模块与障碍物的距离。超声波模块在接收超声波时存在能量转化,当超声波接收到反射波后,声信号转换为电信号,从而使单片机的停止计时。设超声波的声速为v,时间差为t0则超声波的测距公式如下:

      S = v × t0/2

      附上超声波传感器的实物图:
      HC-SR04超声波传感器

    3. 蓝牙模块HC-05
      该模块价格不会很高,网上基本有该模块的使用方法,首先要连接USB转TTL的模块接入电脑,使用串口调试软件,输入AT指令配置蓝牙模块。该蓝牙模块的源码资料有提供,也可从其他网站或 Github 找。
      详细的蓝牙模块的配置和使用方法参考:
      【常用模块】HC-05蓝牙串口通信模块使用详解(实例:手机蓝牙控制STM32单片机)—Yngz_Miao

    软件篇

    编程环境是使用Keil5 C51。

    展示几个流程图,代码就不放了,需要就在链接中下载。

    主程序流程图:
    主程序流程图

    超声波测距:
    在这里插入图片描述

    避障程序:
    避障程序

    总结

    本项目成本不高,功能也不多,适合课程设计,练练手,熟悉一下做项目的流程,如何写文档等。小车的功能可以继续扩展,如自动循迹,实时测速等等。或者使用更加强大的芯片,如STM32系列的芯片,可以扩展的功能就可以很多

    本文最后附上几张小车实物图:
    小车1

    小车2

    小车3

    手机蓝牙终端控制App(app商城有很多,或者自己开发):
    手机蓝牙终端控制App

    另附
    小车的详细资料源码下载:https://pan.baidu.com/s/1kyYyLXyMrLQX8SMp5YrOZg (提取密码:twk7)

    展开全文
  • 模块应用:Arduino避障小车

    千次阅读 多人点赞 2019-01-21 14:39:46
    避障小车是arduino的入门作业,用到的传感器并不多,只是需要较强的动手能力。 材料清单 Arduino UNO; 双驱小车底盘(带两个130电机和俩车轮); 双路H桥电机控制器 9g舵机; 超声波模块; 超声波模块固定支架; ...

    一直在熟悉Arduino周边的传感器,不过这应该是第一次将传感器应用到实践上。避障小车是arduino的入门作业,用到的传感器并不多,只是需要较强的动手能力。

    材料清单

    1. Arduino UNO;
    2. 双驱小车底盘(带两个130电机和俩车轮);
    3. 双路H桥电机控制器
    4. 9g舵机;
    5. 超声波模块;
    6. 超声波模块固定支架;
    7. LED灯板;
    8. 红外避障传感器;
    9. 10K电位器;
    10. 小型继电器;
    11. 蓝牙模块;
    12. 9V电源×2;
    13. 稳压模;
    14. 迷你面包板;
    15. 面包线;
    16. M3铜柱;

    小车拼装

    买回来的小车底盘到手就后悔,当时考虑到四驱独立电机相同电压可能存在转速差走不了直线的问题,所以就买了双驱的,到手看到后面拖的那个万向轮真是惨不忍睹。感觉配重要是不平衡了分分钟翻车,所以还是推荐买四驱底盘,也就是多一个电机控制器和多十几行代码的事。

    亚克力上面的不透明覆撕掉了,裸裸的镂空质感比较好看,然而后面就不想吐槽这块板子了,开口完全不准,传感器完全靠自己想办法往上固定,最后又看了看那个四驱的板子,孔位好像想要的都有。
    比如这个鸡肋的舵机,硬生生是扎带固定上去的,而四驱的有舵机预留孔位。

    舵机固定好以后,将超声波模块塞进传感器支架,然后用扎带将其固定在舵机的90度方向。
    在舵机后方粘贴迷你面包板,方便蓝牙模块、继电器、电位器的连接;
    依次连接固定电机控制器、车前LED灯板、后置红外避障模块。

    关于供电方面,Arduino板和电机驱动板要独立供电,Arduino板接受的电压范围相对较宽(5-12V),所以一节9V电池给DC口供电刚好。而电机接受电压范围3-6V,考虑电机转速和扭矩,所以在底盘加上稳压模块,将9V降压到5-6V。

    演示效果视频:
    http://player.youku.com/embed/XMjc5NjU3NzkzMg==

    源代码

    #include <Servo.h>
    //转向舵机
    Servo head;
    //超声波
    const int Echo = A0;
    const int Trig = A1;
    //左路电机
    const int IA1 = 4;
    const int IB1 = 5;
    //右路电机
    const int IA2 = 6;
    const int IB2 = 7;
    //后置红外避障
    const int MHsensor = 9;
    int MHdata;
    //LIGHT
    const int JDQ = 11;
    //初始化距离数据
    float echoDistance;
    int leftDistance = 0;
    int rightDistance = 0;
    int forwardDistance = 0;
    int backDistance = 0;
    //FLAG
    int flag = 1;
    void setup(){
      Serial.begin(9600);
      head.attach(8);
      pinMode(Trig,OUTPUT);
      pinMode(Echo,INPUT);
      pinMode(MHsensor,INPUT);
      pinMode(IA1,OUTPUT);
      pinMode(IB1,OUTPUT);
      pinMode(IA2,OUTPUT);
      pinMode(IB2,OUTPUT);
      pinMode(JDQ,OUTPUT);
      stop();
    }
    void loop(){
      while (Serial.available() > 0) {
          char inform=Serial.read();
          Serial.print("Bluetooth:");
          Serial.println(inform);
          if(inform == 's'){
            stop();
            flag = 1;
            }
          else if(inform == 'g'){
            flag = 0;
          }
          else if(inform == 'l'){
            digitalWrite(JDQ,HIGH);
          }
          else if(inform == 'c'){
            digitalWrite(JDQ,LOW);
          }
        }
        if(flag == 0){
          head.write(90);
          delay(500);
          forwardDistance = testDistance();
          if(forwardDistance<=40){
            stop();
            head.write(5);
            delay(500);
            leftDistance = testDistance();
            head.write(90);
            delay(500);
            head.write(175);
            delay(500);
            rightDistance = testDistance();
            head.write(90);
            if(leftDistance>rightDistance && leftDistance>40){
              turnLeft();
              delay(100);
            }
            else if(rightDistance>leftDistance && rightDistance>40){
              turnRight();
              delay(100);
            }
            else{
              //后置红外避障
              back();
              if(backTest()==0){
                forward();
              }
            }
          }
          else{
            forward();
          }
        }
    }
    int testDistance(){
      //激发超声波模块
      digitalWrite(Trig,LOW);
      delayMicroseconds(2);
      digitalWrite(Trig,HIGH);
      delayMicroseconds(20);
      digitalWrite(Trig,LOW);
      echoDistance = pulseIn(Echo,HIGH);
      echoDistance /= 58;
      return (int)echoDistance;
    }
    int backTest(){
      MHdata = digitalRead(MHsensor);
      return MHdata;
    }
    void forward(){
      digitalWrite(IA1,HIGH);
      digitalWrite(IB1,LOW);
      digitalWrite(IA2,HIGH);
      digitalWrite(IB2,LOW);
    }
    void turnLeft(){
      digitalWrite(IA1,LOW);
      digitalWrite(IB1,HIGH);
      digitalWrite(IA2,HIGH);
      digitalWrite(IB2,LOW);
    }
    void turnRight(){
      digitalWrite(IA1,HIGH);
      digitalWrite(IB1,LOW);
      digitalWrite(IA2,LOW);
      digitalWrite(IB2,HIGH);
    }
    void back(){
      digitalWrite(IA1,LOW);
      digitalWrite(IB1,HIGH);
      digitalWrite(IA2,LOW);
      digitalWrite(IB2,HIGH);
    }
    void stop(){
      digitalWrite(IA1,LOW);
      digitalWrite(IB1,LOW);
      digitalWrite(IA2,LOW);
      digitalWrite(IB2,LOW);  
    }
    
    展开全文
  • 51 单片机 红外避障小车 大集合 压缩包里 含有简单的红外避障程序。然后进阶版,是跟随障碍物的,最后是制作成后退掉头的。三个程序,不用的功能,红外避障小车学习必备。
  • 避障小车.zip

    2020-06-06 23:30:22
    避障小车
  • Arduino综合实例之一_避障小车

    万次阅读 2017-02-20 14:06:56
    此实例实现了通过蓝牙连接小车和手机,在手机端用软件控制小车前进,后退,左/右转向,控制行驶速度。并能让小车自动行驶,躲避障碍。 我买的是最便宜的黄色四驱小车,加了一个电机驱动模块(用于控制小车),一个...
  • 基于STM32三路超声波避障小车

    万次阅读 多人点赞 2020-05-09 19:20:03
    一般学习单片机的第一步就是做智能小车,通过PWM控制调节车速,以及使用超声波模块进行输入捕获,而这篇文章在于多通道实现输入捕获,因为用到了3个超声波。详细讲解了输入捕获的原理以及一些重要功能的实现代码
  • 基于arduino的避障.跟随小车(带有魔术手)

    万次阅读 多人点赞 2019-04-11 17:36:42
    避障小车的制作方法大概有两种:一个是利用超声波制作,一个是光电开关(避障模块),而跟随小车便一个是利用超声波和光电开关配合制作,一个是光电开关(避障模块)制作。 所以本篇博客,最终决定:用超声波模块...
  • 基于Arduino的智能避障小车

    千次阅读 2019-06-28 10:50:09
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • 一、使用Arduino与L298N(红板) 驱动直流电机 Arduino uno + L298N 驱动模块接线 ** 上边这个接法,电机只会哆嗦不会转到,修改下如下图: ** 二、接超声波传感器(百度) 三、接红外传感器(百度) ...
  • 51单片机控制红外避障小车

    千次阅读 多人点赞 2019-04-28 11:48:18
    51单片机控制红外避障小车 产品图片
  • 大一暑假,在家自己动手做的。记录下 源码:
  • 使用VREP建立四轮小车模型
  • 智能小车红外避障模块----使用教程

    千次阅读 2020-01-10 21:21:21
    博主本科期间做过两个智能小车 b站小车视频分享 今天就给·大家分享一下,何如在你的单片机或者树莓派上调用红外避障模块。 循迹模块介绍 循迹模块和红外避障模块类似。循迹模块的红外发射二极管不断发射红外线,当...
  • 避障小车是一种智能设备,可以自动感知前方的障碍物,并通过朝另一个方向转动来避开障碍物。该设计允许小车通过避免碰撞在未知环境中导航,这是任何自主移动小车的主要要求。避障小车的应用不受限制,现在大多数军事...
  • 智能循迹避障小车项目总结

    千次阅读 2013-12-11 08:53:49
    1.项目介绍 2.项目实施过程 3.项目学习总结 4.后期感想
  • 硬件课设一直拖到还有几天要毕业了才分享一下,做...3.代码部分是用verilog完成的,项目报告,完成代码,以及小车跑动的视频都在以下链接里,可以下载使用。 https://download.csdn.net/download/sinat_30372583/10...
  • 51单片机实现智能小车的寻轨避障功能

    万次阅读 多人点赞 2017-05-10 14:46:50
    我们先来讨论智能小车的各个模块: 1.电机驱动 2.寻迹传感器 它具有四个引脚,分别是:VCC GND D0 A0,我们只需要用到三个引脚,AO不需要使用。一般智能小车上我们是安装两个,左边一个右边一个。 原理: ...
  • 基于Arduino的超声波避障小车

    千次阅读 多人点赞 2019-11-27 20:20:28
    基于Arduino的超声波避障小车 利用超声波,判断前方是否有障碍物,如果有小车转向,没有小车直行 所需材料 小车车架及车轮(可以用sw建模然后利用3D打印机打印,也可以在网上直接购买小车地板,用纸板最廉价O...
1 2 3 4 5 ... 20
收藏数 1,443
精华内容 577
关键字:

避障小车