精华内容
下载资源
问答
  • 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 × t 0/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)

    展开全文
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 本程序配套基于51单片机的超声波避障小车(含Proteus仿真)博客,现分享给大家学习使用,如有错误,希望批评指正,多多指教。
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 智能小车-51单片机-智能小车超声波避障 智能小车-51单片机-智能小车超声波避障
  • 基于AT89S51单片机的智能超声波避障小车,里面包括超声波避障原理等==
  • cs-程序\避障\基于80C51单片机小车超声波避障技术设计
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。 这次主要给大家分享其Proteus仿真部分。 涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 基于单片机的超声波避障小车,能实现自动躲避障碍物和显示行驶过的路程
  • 51超声波红外避障.7z

    2021-05-02 22:26:04
    基于51单片机的红外超声波避障小车 编程工具:Keil C51 硬件:集成MCU的超声波模块(串口通信),两路光电对管,L298N电机驱动模块,STC89C52 可以配合本人上传的proteus仿真文件使用
  • 超声波避障程序

    热门讨论 2012-09-13 22:29:42
    本程序是基于51单片机的超声波避障程序,实现超声波避障,广泛应用于智能小车系统中,程序中重要代码已经做了详细注释,且程序已测试通过请放心下载!
  • 自己写的简易版本的基于51单片机的超声波避障小车的工程文件,包含输出的.hex文件。如有写的不好的地方还请多多包涵。
  • 51超声波光电避障小车
  • 基于51单片机的超声波避障小车,使用舵机控制方向,超声波采集障碍物距离,点击可变速,使用oled显示障碍物距离,有proteus仿真,代码附有详细注释
  • 超声波避障

    2015-12-15 21:22:41
    利用超声波实现避障,c语言编写,适用STC89C51单片机
  • 基于at89c51单片机的智能超声波避障小车
  • /* Main.c file generated by New Project wizard** Created: 周五 4月 3 2020* Processor: AT89C52* Compiler:Keil for 8051*/#include #include #include #defineTXP1_3#defineRXP1_2#define Forward_L_D...

    /* Main.c file generated by New Project wizard

    *

    * Created:   周五 4月 3 2020

    * Processor: AT89C52

    * Compiler:  Keil for 8051

    */

    #include

    #include

    #include

    #define  TX  P1_3

    #define  RX  P1_2

    #define Forward_L_DATA  180

    #define Forward_R_DATA  180

    /*****°′???-í??ó???¨ò?******/

    sbit L293D_IN1=P0^0;

    sbit L293D_IN2=P0^1;

    sbit L293D_IN3=P0^2;

    sbit L293D_IN4=P0^3;

    sbit L293D_EN1=P0^4;

    sbit L293D_EN2=P0^5;

    sbit BUZZ=P0^6;

    void Delay400Ms(void);

    unsigned char disbuff[4]={0,0,0,0};

    void Count(void);

    unsigned int  time=0;

    unsigned long S=0;

    bit  flag =0;

    bit  turn_right_flag;

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

    //oˉêy??3?:Delay1ms(unsigned int i)

    //oˉêy1|?ü:?óê±i*1msμ?×ó3ìDò(??ó|óú22.1184Mhz?§??)

    //D?ê?2?êy:unsigned int i

    //DD2??μ?÷:?T

    //·μ??2?êy:?T

    //ê1ó??μ?÷:i?aòa?óê±μ?ê±??3¤?è£?μ¥??ê?MS£?×?′ó?éò??óê±65536 ms

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

    void Delay1ms(unsigned int i)

    {

    unsigned char j,k;

    do{

    j = 10;

    do{

    k = 50;

    do{

    _nop_();

    }while(--k);

    }while(--j);

    }while(--i);

    }

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

    //oˉêy??3?:Delay10us(unsigned char i)

    //oˉêy1|?ü:?óê±i*10usμ?×ó3ìDò(??ó|óú22.1184Mhz?§??)

    //D?ê?2?êy:?T

    //DD2??μ?÷:?T

    //·μ??2?êy:?T

    //ê1ó??μ?÷:i?aòa?óê±μ?ê±??3¤?è£?μ¥??ê?US£?×?′ó?éò??óê±250 ms

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

    void Delay10us(unsigned char i)

    {

    unsigned char j;

    do{

    j = 10;

    do{

    _nop_();

    }while(--j);

    }while(--i);

    }

    //=========================================================================================================================

    void Forward()//           ?°??

    {

    L293D_IN1=1;

    L293D_IN2=0;

    L293D_IN3=1;

    L293D_IN4=0;

    //     PWM_Set(255-Speed_Right,255-Speed_Left);

    }

    void Stop(void)        //é23μ

    {

    L293D_IN1=0;

    L293D_IN2=0;

    L293D_IN3=0;

    L293D_IN4=0;

    //         PWM_Set(0,0);

    }

    void Turn_Retreat()         //oó

    {

    L293D_IN1=0;

    L293D_IN2=1;

    L293D_IN3=0;

    L293D_IN4=1;

    //        PWM_Set(255-Speed_Right,255-Speed_Left);

    }

    void Turn_left()         //×ó

    {

    L293D_IN1=0;

    L293D_IN2=1;

    L293D_IN3=1;

    L293D_IN4=0;

    //        PWM_Set(255-Speed_Right,255-Speed_Left);

    }

    //=========================================================================================================================

    /********?àà?????3ìDò***************/

    void Conut(void)

    {

    time=TH1*256+TL1;

    TH1=0;

    TL1=0;

    S=time*2;

    S=S*0.17;

    if(S<=300)

    {

    if(turn_right_flag!=1)

    {

    Stop();

    Delay1ms(5);

    }

    turn_right_flag=1;

    P1_7=0;

    P2_0=0;

    P0_6=0;

    Delay1ms(10);

    P1_7=1;

    P2_0=1;

    P0_6=1;

    Delay1ms(5);

    Turn_left();

    Delay1ms(10);

    }

    else

    {

    turn_right_flag=0;

    Forward();

    }

    if((S>=5000)||flag==1)

    {

    flag=0;

    }

    else

    {

    disbuff[0]=S%10;

    disbuff[1]=S/10%10;

    disbuff[2]=S/100%10;

    disbuff[3]=S/1000;

    }

    }

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

    void zd0() interrupt 3

    {

    flag=1;

    RX=0;

    }

    /********3?éù2¨??μ?????3??í?è????3ìDò***************/

    void Timer_Count(void)

    {

    TR1=1;

    while(RX);

    TR1=0;

    Conut();

    }

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

    void  StartModule()

    {

    TX=1;

    Delay10us(2);

    TX=0;

    }

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

    /*************?÷3ìDò********************/

    void main(void)

    {

    unsigned char i;

    unsigned int a;

    Delay1ms(400);

    //        LCMInit()

    Delay1ms(5);

    TMOD=TMOD|0x10;

    EA=1;

    TH1=0;

    TL1=0;

    ET1=1;

    turn_right_flag=0;

    BUZZ=0;

    Delay1ms(50);

    BUZZ=1;

    while(1)

    {

    RX=1;

    StartModule();

    for(a=951;a>0;a--)

    {

    if(RX==1)

    {

    Timer_Count();

    }

    }

    }

    }

    }

    展开全文
  • //超声波测距模块Trig sbit echo=P1^1; //超声波测距模块Echo sbit trig2=P1^3; //超声波测距模块2Trig sbit echo2=P1^4; //超声波测距模块2Echo sbit in1=P2^1; sbit in2=P2^2; sbit in3=P2^3; sbit in4=P2^4; ...
  • 超声波避障小车.zip

    2019-10-02 19:34:29
    基于51单片机的超声波避障代码和资料,小车可以自动避障,走迷宫。确保代码直接可以使用,不会有错误。代码中的注释很清楚,具体的接线问题也有注明。
  • 一路舵机超声波避障

    2017-09-21 18:26:48
    四驱小车的一路舵机加超声波避障,使用一路舵机减少超声波的使用,减少复杂性,还可以利用舵机进行角度变化
  • 这是51单片机控制的智能车的源程序,在keil 4下进行编译,可以实现红外避障超声波避障,循迹,跟随,遥控电视等功能。
  • **51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏) 本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容。 功能比较多: 1舵机云台超声波避障 2....

    **51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏)
    本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容。
    功能比较多:
    1舵机云台超声波避障
    2.循迹
    3.蓝牙
    4.红外跟随
    5.遥控

    按键切换模式和蓝牙切换模式可以会和使用。
    布线比较乱,如果学习了PCB制版 可以很整洁。
    在这里插入图片描述

    在这里插入图片描述超声波避障部分程序

    {
    	if(S>300)
    	{
    		zhixing();
    	}
    	if(S<=300)
    	{
    		Stoping();
    		DJrighting();	  //舵机云台you转30度
    		delayms1(2500);
    		ceju();
    		delayms1(200);
    		S1=S;			   //测距保存数据S1
    		LCD_Show2Num(35,50,S1,4);
    		delay(3000);
    
    		DJlefting();		  //舵机zuo转30度
    		delayms1(2500);
    		ceju();
    		delayms1(200);
    		S2=S;			  //测距保存数据S2
    		LCD_Show2Num(35,75,S2,4);
    		delay(4000);
    
    		if(S1>S2)		   //比较两侧前方距离
    		{
    			BZ_flag=1;		//左转前行标志	
    		}
    		if(S1<=S2)	 //S1<S2
    		{
    			BZ_flag=2;			//右转前行标志	
    		}	
    		switch(BZ_flag)
    		{
    			case(1):				
    				Righting();				
    				FWing();
    				delayms1(2500);				
    				zhixing();
    				break;
    			case(2): 
    				Lefting();			
    				FWing();
    				delayms1(2500);
    				zhixing();
    				break;
    		}
    	}	
    }
    
    
    
    主函数
    void main()
    {
    	LCD_LED=1;
    	UartInit();		//蓝牙定时计2初始化程序
    	InitTime();		//电机定时器0初始化
    	Lcd_Init();   //tft初始化
    	
    	LCD_Clear(WHITE); //清屏
    	BACK_COLOR=WHITE;;POINT_COLOR=RED;
    	xianshihanzi();
    	while(1)
    	{
    		Measure();
    		if(S4==0)	   //按键切换模式
    		{
    			delay(5);
    			if(S4==0)
    			{
    				while(!S4);
    				flag++;		//更换模式
    				switch(flag)
    				{
    					case(1): 
    						XJ_flag=1;T2CON=0;Stoping();
    						UartInit();		//蓝牙定时计2初始化程序
    						showhanzi(40,25,7);	 //循迹
    						showhanzi(55,25,8);
    						LCD_ShowString(70,25,"  ");
    						led1=0;led2=1;led3=1;led4=1;led5=1;break;
    				}
    			}
    		}						
    		while(XJ_flag)	   //循迹模式
    		{
    			XunJi();
    			if(S4==0)	   //按键切换模式
    			{
    				delay(5);
    				if(S4==0)
    				{
    					while(!S4);
    					flag++;		//更换模式
    					switch(flag)
    					{
    						case(2):	
    							XJ_flag=0;HWBZ_flag=1;CSB_flag=0;HWYK_flag=0;Stoping();
    							UartInit();		//蓝牙定时计2初始化程序
    							showhanzi(40,25,9);	 //跟随
    							showhanzi(55,25,10);
    							LCD_ShowString(70,25,"  ");
    							led1=1;led2=0;led3=1;led4=1;led5=1;break;						
    					}
    				}
    			}
    		}
    
    展开全文
  • 第一次做,这个是麦克纳姆轮轮的程序,...REGX51.H> #define uint unsigned int #define uchar unsigned char uint PWM = 5; //最大20,pwm调速 uchar time = 0; uint Shi_Jian; uint a,b,c,FJL,LJL,RJL; void Del

    第一次做,这个是麦克纳姆轮轮的程序,看着是没有任何问题的,但是小车不会动,求大佬帮助.
    程序如下

    // An highlighted block
    
    #include <REGX51.H>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    uint PWM = 5;          //最大20,pwm调速
    uchar time = 0;
    uint Shi_Jian;
    uint a,b,c,FJL,LJL,RJL;
    
    void Delay (uint t)                //@11.0592MHz    100us
    {
            unsigned char i;
            while (t)
            {
                   
                    i = 43;
                    while (--i);
                    t--;
            }
    }
    
    
    void Timer_Init()   //定时器    @11.0592MHZ   0.1ms
    {
            TMOD = 0x11;
            TH0 = 0xFB;
            TL0 = 0xAF;
            TF0        = 0;         
            ET0 = 1;          //允许中断
            EA = 1;           //开启总中断
            TR0 = 1;          /开启定时器
            
            TF1        = 0;
            TH1 = 0;
            TL1 = 0;
    }
    
    
    
    void Timer0_Rountine() interrupt 1   //T0  中断
    {
            time++;
            TH0 = 0xFB;
            TL0 = 0xAF;
            if(time >= 20)
                    time = 0;
    }
    int Front_Ju_Li ()               //测前方距离
    {
            P2_0 = 1;                      //发送超声波
            Delay(1);                      //延时100us
            P2_0 = 0;                      //关闭超声波
            while (!P2_1);                 //未接收到超声波并等待
            TR1 = 1;                       //开启定时器
            while (P2_1);                  //接收到超声波并等待
            TR1 = 0;                       //关闭定时器1
            Shi_Jian = TH1*256 + TL1;
            TH1 = 0;
            TL1 = 0;
            FJL = (Shi_Jian*1.7)/100;      //单位  cm
            return FJL;
            
    }
    int Zuo_Ju_Li ()               //测左边距离
    {
            P2_2 = 1;                      //发送超声波
            Delay(1);                      //延时100us
            P2_2 = 0;                      //关闭超声波
            while (!P2_3);                 //未接收到超声波并等待
            TR1 = 1;                       //开启定时器
            while (P2_3);                  //接收到超声波并等待
            TR1 = 0;                       //关闭定时器1
            Shi_Jian = TH1*256 + TL1;
            TH1 = 0;
            TL1 = 0;
            LJL = (Shi_Jian*1.7)/100;      /单位  cm
            return LJL;
            
    }
    int You_Ju_Li ()               //测右边距离
    {
            P2_4 = 1;                      //发送超声波
            Delay(1);                      //延时100us
            P2_4 = 0;                      //关闭超声波
            while (!P2_5);                 //未接收到超声波并等待
            TR1 = 1;                       //开启定时器
            while (P2_5);                  //接收到超声波并等待
            TR1 = 0;                       //关闭定时器1
            Shi_Jian = TH1*256 + TL1;
            TH1 = 0;
            TL1 = 0;
            RJL = (Shi_Jian*1.7)/100;      //单位  cm
            
    }
    
    void Car_Stop ()   //停止
    {
                    P1_0=0,P1_1=0,P1_2=0,P1_3=0,P1_4=0,P1_5=0,P1_6=0,P1_7=0;
    }
    void Car_Run ()   //前进
    {
            if (time <= PWM)
                    P1_0=1,P1_1=0,P1_2=0,P1_3=1,P1_4=0,P1_5=1,P1_6=0,P1_7=1;
            else
                    Car_Stop ();
    }
    void Car_Zuozhuan ()   //左转
    {
            if (time <= PWM)
                    P1_0=0,P1_1=1,P1_2=0,P1_3=1,P1_4=1,P1_5=0,P1_6=0,P1_7=1;
            else
                    Car_Stop ();
    }
    void Car_Youzhuan ()   //右转
    {
            if (time <= PWM)
                    P1_0=1,P1_1=0,P1_2=1,P1_3=0,P1_4=0,P1_5=1,P1_6=1,P1_7=0;
            else
                    Car_Stop ();
    }
    
    void Car_Houtui ()   /后退
    {
            if (time <= PWM)
                    P1_0=0,P1_1=1,P1_2=1,P1_3=0,P1_4=1,P1_5=0,P1_6=1,P1_7=0;
            else
                    Car_Stop ();
    }
    
    
    
    
    
    void main()
    {
            Timer_Init();
            while (1)
            {
                    do
                    {
                            Car_Run ();
                            a = Front_Ju_Li ();
                    }while(a >= 20);
                    Car_Stop ();
                    b = Zuo_Ju_Li ();
                    Delay(100);
                    c = You_Ju_Li ();
                    Delay(100);
                   
                   
                            if (b <= 15 && c <= 15)      //进入狭小空间,后退
                                    Car_Houtui ();
                            if (b <= c)             //左边距离小于右边距离,右转
                                    Car_Youzhuan ();
                            if (c <= b)             /右边距离小于左边距离,左转
                                    Car_Zuozhuan ();
                            else
                                    Car_Stop ();
            
            }
    }
    
    展开全文
  • 基于51单片机智能小车超声波避障程序,希望有用
  • 超声波避障C语言程序

    2011-08-28 10:51:02
    单片机 智能小车 超声波避障C语言程序
  • 超声波 避障 8051程序

    2009-12-07 13:41:20
    超声波避障程序 51芯片控制 应该很多人需要吧
  • 超声波避障与测距

    2018-07-06 10:40:40
    基于51单片机的超声波模块测距(数码管显示)与避障

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 407
精华内容 162
关键字:

51超声波避障