精华内容
下载资源
问答
  • 51避障小车

    2020-06-12 21:39:37
    这个是有舵机的避障,中间还有小问题,望指正. #include <REGX52.H> #include "intrins.h" /********************变量定义******************************/ unsigned char count=0; unsigned char PWM_count=1; ...

    这个是有舵机的避障,中间还有小问题,望指正.

    #include <REGX52.H>
    #include "intrins.h"
    /********************变量定义******************************/
    unsigned char count=0;
    unsigned char PWM_count=1;                  //1--0,2--45,3--90,4--135,5--180
    unsigned char a=0;
    unsigned int zkb1=14;         //1为小车占空比,2为舵机
    unsigned int count1=0;
    unsigned int time,S,q,l,r;
    unsigned int b=0;
    /*******************管脚定义*********************************************************/
    sbit SG_PWM=P3^7;            //舵机PWM输出
    sbit trig=P2^0;              //超声波发射口
    sbit echo=P2^1;              //超声波接受口
    /********************小车功能**********************************************************/
    void 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 run()       
    {
    	if(count1<zkb1)	
    		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
    		stop();
    }//前进
    void right()        
    {
    	if(count1<zkb1)	
    		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
    		stop();
    }//右转
    void back()
    {
    	if(count1<zkb1)	
    		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
    		stop();
    }//后退
    void left()
    {
    	if(count1<zkb1)
    		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
    		stop();
    }//左转
    
    /**********************定时器与中断和延时***********************************************/
    void delay(unsigned int xms)		
    {
    	unsigned char i, j;
    	while(xms)
    	{
    	_nop_();
    	i = 2;
    	j = 199;
    	do
    	{
    		while (--j);
    	} while (--i);
    	xms--;
    	}
    }
    
    void Time0Init()     //定时器T0,1,T0为0.5ms
    {
    	
    	
    	TMOD = 0x11;
    	TH0 = 0xfe;
    	TL0 = 0x33;         
    	ET0 = 1;          //允许中断
    	EA = 1;           //开启总中断
    	TR0 = 1; 
    	
    	TH1=1;           //T1没有开启中断
    	TL1=1;
    }
    
    void Time0() interrupt 1     //中断实现小车的调速和舵机角度控制
    {
    	TH0=0xfe;
    	TL0=0x33;
    	
    	count1++;
    	 if(count<=PWM_count)    //高电平时间=PWM_count*0.1ms     //舵机pwm调节
      {
        SG_PWM=1;                 //PWM_count//9~0,13~45,//右边//18~90,//21~135,25~180//左边
      }
      else
      {
        SG_PWM=0;
      }                      //到此形成一个PWM波
      count++;
    	a++;
      if(count>=200)          //舵机20ms一周期
      {
        count=0;		          
    	}
    	
    	if(count1>=50);
    	{
    		count1=0;
    	}
    }
    /*******************************超声波模块************************************************/
    void open()             //开启超声波,一段时间后关闭
    {
    	trig = 1;
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	trig = 0;
    }
    void JL()             //测量距离
    {
    	open();
    	while (!P2_1);                      //未接受到超声波并等待
    	TR1 = 1;                            //开启定时器T1
    	while (P2_1);                       //接收到超声波并等待
    	TR1 = 0;                            //关闭定时器
    	time = TH1 * 256 + TL1;
    	TH1 = 1;
    	TL1 = 1;
    	S = (time * 1.7) / 100;       
    }
    /**************************舵机模块**********************************************/
    void JD(unsigned int M)
    {
    		PWM_count=M;
    		a=0;         //0,1,2,3,4分别对应-90,-45,0,45,90度;
    		while(a<=25);
    }
    
    /**************************主函数****************************************/
    void main()
    {
    	Time0Init();
    	while(1)
    	{
    	do
    		{
    			JD(2);
    			JL();
    			q=S;
    			
    			run();
    			delay(9);
    			stop();
    			delay(11);
    			
    			
    		}while(q>37);
    		do
    		{
    			stop();
    			delay(50);
    			
    			JD(0);
    			JL();
    			l=S;
    			delay(20);
    			
    			JD(2);
    			
    			JD(4);
    			JL();
    			r=S;
    			JD(2);
    			delay(20);
    			
    		}while(l<10&&r<10);
    		if(l<=r&&r>10)
    		{
    			right();
    			delay(54);
    		}	
    		if(l>=r&&l>10)
    		{
    			left();
    			delay(54);
    		}		
    	}
    }
    
    
    展开全文
  • 51避障小车仿真.7z

    2021-05-02 22:22:42
    Proteus仿真基于51单片机的避障小车(两个红外对管,一个集成MCU的超声波,串口通信)
  • 51避障小车程序

    2015-06-04 17:53:45
    基于51单片机的巡逻车程序,通过3路超声波实现避障,同时烟雾报警,1602显示。
  • /* 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();

    }

    }

    }

    }

    }

    展开全文
  • 51智能避障小车

    2018-07-02 15:07:02
    基于51单片机的避障小车的源码,可以实现红外避障功能。车头前方左右需用两个红外传感器。
  • 51 单片机 红外避障小车 大集合 压缩包里 含有简单的红外避障程序。然后进阶版,是跟随障碍物的,最后是制作成后退掉头的。三个程序,不用的功能,红外避障小车学习必备。
  • 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单片机 红外循迹 红外避障小车 双功能小车 把红外循迹和红外避障整合到了一起 可以学习一下
  • 基于51单片机的寻迹避障小车,共分为5个模块,分别为电源,显示,电机,寻迹,避障模块
  • 51超声波光电避障小车
  • 51单片机控制红外避障小车

    万次阅读 多人点赞 2019-04-28 11:38:33
    51单片机控制红外避障小车 产品图片

    51单片机控制红外避障小车

    产品图片在这里插入图片描述
    具体制作步骤如下:

    1、 材料准备:
    L298N电机驱动模块 1个
    红外避障模块 2个
    马达 2个
    车轮子 2个
    电池 8个
    51单片机最小系统 1个
    STC89C52RC 2个
    前轮转向轮子 1个

    2、 电路连接图
    在这里插入图片描述
    3、 对STC89C52RC芯片进行编程

    #include <reg52.h>
    
    //下面的是连接l298n模块的引脚与单片机引脚相连
    sbit IN1 = P1^0;
    sbit IN2 = P1^1;
    sbit IN3 = P1^2;
    sbit IN4 = P1^3;
    
    //红外避障模块
    sbit out1 = P2^0;
    sbit out2 = P1^6;
    
    
    /*函数声明*/
    void go();			//前进
    void back();		//后退
    void left();		//向左
    void right();		//向右
    void stop();		//停止
    
    
    void main()
    {
    	
    	while(1)
    	{
    		if(out2 == 0)											//检测到右边有障碍物时,向左移动
    		{
    			left();
    		}
    		else if(out1 == 0)								//检测到左边边有障碍物时,向右移动
    		{
    			right();
    		}
    		else if(out1 == 1 && out2 == 1)		//检测到都没有有障碍物时,向前移动
    		{
    			go();
    		}
    	}
    }
    
    //前进
    void go()
    {
    	IN1=1; 
    	IN2=0; 
    	IN3=1; 
    	IN4=0;
    }
    
    //后退
    void back()
    {
    	IN1=0; 
    	IN2=1; 
    	IN3=0; 
    	IN4=1;
    }
    
    //向左
    void left()
    {
    	IN1=0; 
    	IN2=0; 
    	IN3=0; 
    	IN4=1;
    }
    
    //向右
    void right()
    {
    	IN1=1; 
    	IN2=1; 
    	IN3=1; 
    	IN4=0;
    }
    
    //停止
    void stop()
    {
    	IN1=0; 
    	IN2=0; 
    	IN3=0; 
    	IN4=0;
    }
    
    
    展开全文
  • 基于51单片机的智能小车的设计资料,按里面的资料和设计图可以完整的制作出功能简单的智能小车
  • 基于51单片机的循迹避障小车的设计清 华 大 学本 科 生 毕 业 论 文题 目: 基于51单片机的循迹避障小车的设计专业班级: 电子信息工程2012级02班学 号:学生姓名:指导教师:论文完成日期: 年 月郑 重 声 明本人的...
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 本程序配套基于51单片机的超声波避障小车(含Proteus仿真)博客,现分享给大家学习使用,如有错误,希望批评指正,多多指教。
  • #include<reg52.h> #include #define uint unsigned int #define uchar unsigned char sbit trig=P1^2; //超声波测距模块Trig sbit echo=P1^1; //超声波测距模块Echo sbit trig2=P1^3; //超声波测距模块2Trig ...
  • 接法EN1 EN2 PWM输入端,本程序不使用这二个,直接使插上跳线帽,使能输出,这样就能全速运行PWM采用转向端输出PWM法来使小车,调速运行,原理,驱动端IN1=0IN2=1 的时候全速前进 ,IN1=0,I...
  • 自己写的简易版本的基于51单片机的超声波避障小车的工程文件,包含输出的.hex文件。如有写的不好的地方还请多多包涵。
  • 寻迹避障小车简单避障程序
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 《毕业论文:基于51单片机智能避障小车的设计报告.doc》由会员分享,可免费在线阅读全文,更多与《毕业论文:基于51单片机智能避障小车的设计报告》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。...
  • 智能避障小车开发

    2018-04-05 18:16:56
    资源包含了基于51单片机的智能避障小车兼红外控制的完整开发代码。
  • 基于89C51单片机的智能寻迹避障小车设计.pdf
  • 智能避障小车

    2013-12-08 22:19:15
    基于51单片机的超声波避障小车的设计,C语言代码,KEIL编译环境
  • 51自动避障小车整体程序

    万次阅读 多人点赞 2018-07-18 14:07:01
    #include&lt;reg52.h&gt; #include&lt;intrins.h&gt; #define uchar unsigned char #define uint unsigned int sbit Trig=P3^0;...uint dis,flag=0,timeH,timeL,succeed_...
  • 利用红外对管检测黑线与障碍物,并以STC89C51单片机为控制芯片控制电动小汽车的转向,从而实现自动避障的功能。其中小车驱动由L298N驱动电路完成。本文首先介绍了智能车的发展前景,接着介绍了该课题设计构想,各...
  • 基于AT89S51单片机的智能超声波避障小车,里面包括超声波避障原理等==
  • 基于51单片机的超声波避障小车,使用舵机控制方向,超声波采集障碍物距离,点击可变速,使用oled显示障碍物距离,有proteus仿真,代码附有详细注释

空空如也

空空如也

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

51避障小车