精华内容
下载资源
问答
  • 循迹小车

    千次阅读 多人点赞 2019-08-19 17:19:32
    循迹小车,顾名思义就是沿着已定的线路跑的小车,循迹小车在可以代替人工进行固定地点的搬运、传递信息等… 一个循迹小车主要有以下几个模块组成: 电机驱动模块 PWM调速模块 红外循迹模块 剩下的就是在主函数中...

    循迹小车,顾名思义就是沿着已定的线路跑的小车,循迹小车在可以代替人工进行固定地点的搬运、传递信息等…

    一个循迹小车主要有以下几个模块组成:

    • 电机驱动模块
    • PWM调速模块
    • 红外循迹模块

    剩下的就是在主函数中对这几个模块进行相互配合,让小车能够在红外寻迹模块的反馈下,通过PWM模块的调速,使电机驱动, 寻迹小车的大体运作过程就是这样,接下来详细说明一下几个模块的配合。

    电机驱动模块

    电机驱动模块是L293D,只要将相应接口使用杜邦线连接在单片机上,再由程序控制相应接口的电平高低,就可以控制俩个电机的转动,实现小车前进、后退、左转、右转等动作。
    如下是电机驱动模块头文件,利用六根杜邦线连接电机与单片机,控制相应引脚的电平输出就可以控制电机的转动。

    sbit L_back = P1^2; //为1 左电机反转
    sbit L_advance = P1^3; //为1 左电机正转
    sbit R_advance = P1^6; //为1 右电机正转
    sbit R_back = P1^7; //为1 右电机反转
    sbit L_en = P1^4; //为1 左电机使能
    sbit R_en = P1^5; //为1 右电机使能
    
    #define Left_forward()   	 L_back=0,L_advance=1
    #define Left_back()      	 L_back=1,L_advance=0
    #define Left_stop()     	 L_back=0,L_advance=0
    #define Left_en()            L_en=1
    #define Right_forward()      R_back=0,R_advance=1
    #define Right_back()      	 R_back=1,R_advance=0
    #define Right_stop()      	 R_back=0,R_advance=0
    #define Right_en()       	 R_en=1
    

    下面是具体实现小车前进、后退、左转、右转的函数:

    /* 小车前进:左右电机同时前进 */
    void Forward(void)
    {
    	Left_forward();
    	Right_forward();	
    }
    
    /* 小车后退:左右电机同时倒转 */
    void Back(void)
    {
    	Left_back();
    	Right_back();
    }
    
    /* 小车左转:右电机前进,左电机不转 */
    void Left_motor_go(void)
    {
    	Left_stop();
    	Right_forward();	
    }
    
    /* 小车右转:左电机前进,右电机不转 */
    void Right_motor_go(void)
    {
    	Right_stop();
    	Left_forward();	
    }
    
    

    然后就是再程序中直接调用这些,小车的驱动函数即可。

    PWM调速模块

    关于PWM调速的内容之前的博客中已经做了详细的介绍,链接:PWM调速
    在此程序中对电机调速至关重要,因为如果电机产生的扭矩不够的话,小车可能停止不前,如果电机转速过快的话,小车可能失去控制

    定时器的配置如示:
        TMOD |= 0x02;//8位自动重装模块
    	TH0 = 220;
    	TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ
    	TR0 = 1;//启动定时器0
    	ET0 = 1;//允许定时器0中断
    	EA	= 1;//总中断允许
    	
    /* 定义全局变量作为PWM的参数 */
    unsigned char pwm_t,pwm_k=70;	
    
    /* 在中断里进行PWM调速 */
    void timer0() interrupt 1
    {
    	pwm_t++;
    	if(255 == pwm_t)
    	{
    		L_en=1;
    		R_en=1;
    		pwm_t=0;
    	}	
    	if(pwm_t == pwm_k)
    	{
    		L_en=0;
    		R_en=0;
    	}
    }
    
    

    解释一下pwm_t和pwm_k的含义(简称t、k):t是计数,计满255(从0开始)为一个周期,k大小代表占空比大小,256/t就是占空比,k越大电机转速越快,但k小于70时电机难以维持正常转动。

    红外循迹模块

    首先了解一下红外循迹的原理:
    红外循迹是通过判断黑白线来完成的,利用了红外光的反光特性,当红外光遇到黑色不反光物体时,反射回的红外光大大减少,同理,当红外光遇到白色反光物体时,反射会的红外光较多。红外循迹的传感器就是利用这个特性,判断反射回红外光的多少来判断,小车下面是黑线还是地面。从而反馈给程序,程序会依据返回的数据进行调整小车的下一步行动。
    利用杜邦线连接相应的引脚,使传感器将信息传回单片机:

    sbit Left_led = P3^3;//左寻迹信号 为0 没有识别到黑线 为1识别到黑线
    sbit Right_led = P3^2;//右寻迹信号	为0 没有识别到黑线 为1识别到黑线
    

    (左右各有一个红外传感器)
    要使小车沿着黑线走,只要小车偏离黑线红外传感器就会传回1,所以在程序中要不断的检测红外传感器的状态。当小车在黑线路线上时,就直走;当小车向左偏时,让小车右转;当小车向右偏时,让小车左转;当小车踩到黑线上时,让小车后退。 实现代码如下:

    while(1)
    	{
    		if((1==Left_led)&&(1==Right_led))
    		{
    			Back();
    			Forward();
    		}
    		if((0==Left_led)&&(1==Right_led))
    		{
    			Right_motor_go();
    		}
    		if((1==Left_led)&&(0==Right_led))
    		{
    			Left_motor_go();
    		}
    		if((0==Left_led)&&(0==Right_led))
    		{
    			Forward();
    		}
    
    	}
    

    最后附上主函数:

    int main(void)
    {
    	TMOD |= 0x02;//8位自动重装模块
    	TH0 = 220;
    	TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ
    	TR0 = 1;//启动定时器0
    	ET0 = 1;//允许定时器0中断
    	EA	= 1;//总中断允许
    	while(1)
    	{
    		if((1==Left_led)&&(1==Right_led))
    		{
    			Back();
    			Forward();
    
    		}
    		if((0==Left_led)&&(1==Right_led))
    		{
    			Right_motor_go();
    
    		}
    		if((1==Left_led)&&(0==Right_led))
    		{
    			Left_motor_go();
    
    		}
    		if((0==Left_led)&&(0==Right_led))
    		{
    			Forward();
    
    		}
    
    	}
    }
    

    代码亲测可以运行
    有需要的朋友可以联系博主
    qq:2723808286
    有完整的循迹小车、红外遥控、各种传感的模块

    展开全文
  • 智能循迹小车总结 智能循迹小车报告 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电机驱动,控制小车,速度由...

    智能循迹小车总结 智能循迹小车报告 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电机驱动,控制小车,速度由单片机提供的PWM波控制。利用红外传感器检测黑线,红外对管来实现循迹功能,利用超声波传感器进行检测避障。整个系统的电路结构简单,可靠性能高。根据小车各部分功能,模块化硬件电路,并调试电路。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。IO 是指MCU 的普通的输入输出接口。 您所在位置:网站首页 > 海量文档 > 企划文宣(应用文书) > 工作总结

    智能循迹小车总结 智能循迹小车报告 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电机驱动,控制小车,速度由单片机提供的PWM波控制。 利用红外传感器检测黑线,红外对管来… 本册教学目标: 这一册教材的教学目标是,使学生: 1.理解分数乘、除法的意义,掌握分数乘、除法的计算方法,比较熟练地计算简单的分数乘、除法,会进行简单的分数四则混合运算。2.理解倒数的意义,掌握求倒数的方法。 3.理解比的意义和性质,会求比值和化简比… 科 学 论 坛 ●I 浅 析 悬 索 结 构 的特 点 及 其 主 要 形 式 尹 建 兵 ( 淮北 市 第二 建 筑安 装有 限 责任 公 司 安 徽 淮北 [ 摘 要] 浅析 悬索 结构 的发 展 、 概念、 特点, 以及 主 要结 构形 式 。… 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电机驱动,控制小车,速度由单片机提供的PWM波控制。 利用红外传感器检测黑线,红外对管来实现循迹功能,利用超声波传感器进行检测避障。整个系统的电路结构简单,可靠性能高。根据小车各部分功能,模块化硬件电路,并调试电路。将调试成功的各个模块逐个地 “融合” 成整体,再进行软件编程调试,直到完成。 关键词:STC12C5A60S2 直流电机 红外对管传感器 寻迹小车 L293D 电机驱动 一、循迹小车的系统的要求和总体方案设计 1.1设计要求 1.1.1 基本要求 利用单片机实验板,并制作一定的外围电路,编写程序设计制作一个智能循迹壁障的小车,具体要求如下: (1)具有启动、停止功能; (2)能够完成前进、后退、左转、右转单独动作和复合动作; (3)能按照规定路线循迹行驶; 1.1.2 发挥要求 利用超声波或红外等方式实现避障功能 1.2智能循迹小车的工作原理 我们知道小车的循迹原理是根据实现电位的高低来实现对前进方向的控制的。在这里我们设定了白色和黑色的通道界面来行驶,而根据我们所学的知识通常采取的方法是红外探测法。 红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。通过查资料我们知道红外探测器探测距离有限,一般最大不应超过3cm。 1.2.1恒压恒流桥式驱动芯片L293D驱动电机原理 本 L293D 驱动模块,采用 ST 公司原装全新的 L293D 芯片,采用SMT工艺稳定性高,采用高质量铝电解电容,使电路稳定工作。可以直接驱动4路3-16V直流 电机,并提供了5V输出接口(输入最低只要6V),可以给5V单片机电路系统供电(低纹波系数),支持3.3V MCUARM控制,可以方便的控制直流电机速度和方向,也可以控制2相步进电机,5线4相步进电机,是智能小车必备利器。本模块可以 51,AVR,PIC,ARM 等控制器连接,下图 MCU_GNDMCU_+5V 是指可以用驱动输出+5V的电源给控制系统供电。当然,也可以不用,当不用的时候悬空。但它们一定要共地。即MCU_GND要与驱动模块GND 相连(这点至关重要)。IO 是指MCU 的普通的输入输出接口。这里特别指出的是 EN1 EN2 这里我们已经用跳线帽直接插到5V了,直接使能,如果有 PWM 调速可以去掉跳线帽直接从这里输入PWM 信号,调节电机速度。 从左至右接口定义为: +5 GND IN1 IN2 IN3 IN4 EN1 EN2 EN1 EN2为电机1 电机2使能端 +5 GND IN5 IN6 IN7 IN8 EN1 EN2 EN1 EN2为电机3 电机4使能端 如下图1、图2所示: 图1 L293D驱动电路实物图 以下举例:控制紧逻辑。这里一路其它的,其它三路类推 图2 电机驱动使能端子 1. 3模块方案比较与论证 根据设计要求,本系统主要由主控模块、电源模块、寻迹传感器模块、直流电机及其驱动模块、电压比较模块等模块构成。 为较好的实现各模块的功能,我们分别设计了几种方案并分别进行了论证。 1.3.1 主控制器模块 方案一: 采用凌阳公司的16位单片机,它是16位控制器,具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。处理速度高,尤其适用于语音处理和识别

    展开全文
  • 智能循迹小车设计智能循迹小车设计智能循迹小车设计智能循迹小车设计
  • 基于51单片机四路循迹小车

    万次阅读 多人点赞 2018-11-14 13:54:59
    这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~

    这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~

    一. 任务要求

    在这里插入图片描述
    在这里插入图片描述

    二. 系统原理

    本系统以设计题目的要求为目的,采用STC89C52单片机为控制核心,利用红外传感器检测轨道,控制电动小汽车的自动循迹,快慢速行驶。

    这里的轨道是指汽车沿着白色地板上的黑线行驶。由于黑线与白地板的反射系数不同,可以根据接收到的反射光的强度来判断“道路”。常用的方法是红外检测。

    红外检测方法,即在汽车行驶过程中,利用红外光在具有不同颜色的物体表面的不同反射特性,不断向地面发射红外光。当红外光与白纸地板相遇时,会发生漫反射,反射光被安装在车内的接收器接收,如果遇到黑线,就会变成红色。外部光被吸收,车内的接收器不能接收红外线。单片机根据是否接收到反射的红外光来确定黑线的位置和汽车的行驶路线。

    三. 整体方案

    1. 控制模块

    小车的核心控制部件采用STC公司生产的8位单片机STC89C52。它是一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。STC89C52有3个16 位定时器/计数器,2个外部中断,1个串口中断。

    最小系统

    51单片机的具体引脚功能不细说,不了解的可自行百度。直接上最小系统电路图(自己画的,凑合着看)。顺便说一句,在我看来一个没有指示灯的电路是最烦的电路<(`^´)> 我的复位一定要有灯才行!

    在这里插入图片描述
    三部分:
    ①电源电路:给单片机提供5V的电源
    ②时钟电路:外接11.0592M石英晶振。
    ③复位电路:确保单片机是从一个确定的初始状态开始。

    焊接时注意P0口要接上拉电阻,否则不能用,一般都用排阻做上拉电阻(当然如果能自己画板子就更好了)。

    去除AD网格线

    记一下怎么去除AD网格线,如图步骤,最后去掉Visible前面的对勾即可,别忘记最后点OK:
    在这里插入图片描述

    2. 电机驱动模块

    我使用的是最经典的LM298N电机驱动:

    我太喜欢用298了。不仅可以接至12v(即拥有更强的驱动能力),而且有过电流保护功能,当出现电机卡死时,可以保护电路和电机等。且自带7805降压模块可直接给单片机供电~~
    实物图:
    在这里插入图片描述
    驱动与各部分的连接简介:
    输出A、B:分别接到左右马达上,通过使能A、使能B来控制电机正常工作(接高电平为正常工作);
    单片机IO控制输入(即IN1-IN4):用来控制马达正反转。接单片机引脚,通过在程序中给引脚高低电平实现正转或反转(详见下边输入输出关系表);
    12V输入:接电池盒正极;
    5V输入:接单片机VCC,给单片机供电;
    电源地(即GND):把电池盒负极和单片机的GND一起接入。
    在这里插入图片描述
    电路图:
    在这里插入图片描述
    输入输出关系(使能ENA、ENB均为1的状态下):

    In1 In2 运转状态
    1 0 正转
    0 1 反转
    1 1 刹停
    0 0 停止

    3. 电源模块

    我自己使用的是两节18500锂电池供电。如果觉得两节电池不够,三节12V又太大,也可以在中间加一个7809稳压管把电压降到9V再接入驱动:
    在这里插入图片描述

    4. 循迹模块

    光电循迹是由四对红外收发管组成,通过检测接收到的反射光强,判断黑白线。

    当模块探测灯检测到黑线时指示灯熄灭,同时 OUT端口持续输出高电平信号,反之未检测到黑线的探测灯应常亮,OUT端口输出低电平。该模块检测距离 2~60cm,检测角度 35 ° ,检测距离可以通过电位器进行调节,顺时针调电位器,灵敏度增加;逆时针调电位器,灵敏度减少。
    在这里插入图片描述
    原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。

    主控板的电路图:
    在这里插入图片描述
    小板电路图:
    在这里插入图片描述
    注意连接的时候:VCC-VCC、GND-GND、IN-OUT。

    比较器LM339
    在这里插入图片描述

    5. 超声波测距模块

    实物图:
    在这里插入图片描述
    电路图:
    在这里插入图片描述
    工作原理
      (1)采用IO口TRIG触发测距,给至少10us的高电平信号;
      (2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
      (3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
      测试距离=(高电平时间*声速(340M/S))/2;

    四. 车体实物图

    在这里插入图片描述

    五. 软件实现

    #include<reg52.h>
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    sbit ENA = P2^0;   //右点机使能
    sbit IN1 = P2^1;   //为0右轮反转
    sbit IN2 = P2^2;   //为0右轮正转
    sbit IN3 = P2^3;   //为0左轮正转
    sbit IN4 = P2^4;   //为0左轮反转
    sbit ENB = P2^5;   //左电机使能
    
    sbit left1 = P1^3;
    sbit left2 = P1^2;
    sbit right1 = P1^1;
    sbit right2 = P1^0;
    
    u8 PWMCnt1 = 0;
    u8 PWMCnt2 = 0;
    u8 cntPWM1 = 0;
    u8 cntPWM2 = 0;
    
    void Timer0Init();
    void XunJi();
    
    void main()
    {
    	Timer0Init();
    	while(1)
    	{
    		XunJi();
    
    	}	
    }
    // i = 1时, 大概延时10us
    //void delay(u16 i)
    //{
    //    while (i--);
    //}
    
    void Timer0Init()
    {
    	TH0 = 0xFF;
    	TL0 = 0xA3;
    	TMOD &= 0xF0;
    	TMOD |= 0x01;
    	EA = 1;
    	ET0 = 1;
    	TR0 = 1;
    }
    
    void TurnRight1()		   //右转
    {
    	IN1 = 0;	//右轮反转
    	IN2 = 1;
    
    	IN3 = 0;	//左轮正转
    	IN4 = 1;
    	cntPWM1 = 70;
    	cntPWM2	= 55;
    }
    
    void TurnRight2()		   //右转
    {
    	IN1 = 0;	//右轮反转
    	IN2 = 1;
    
    	IN3 = 0;	//左轮正转
    	IN4 = 1;
    	cntPWM1 = 50;
    	cntPWM2	= 40;
    }
    
    void TurnLeft1()				//左转
    {
    	IN1 = 1;
    	IN2 = 0;   	//右轮正转
    
    	IN3 = 1;
    	IN4 = 0;   	//左轮反转
    	cntPWM1 = 55;
    	cntPWM2	= 70;
    }			  	
    
    void TurnLeft2()				//左转
    {
    	IN1 = 1;
    	IN2 = 0;   	//右轮正转
    
    	IN3 = 1;
    	IN4 = 0;   	//左轮反转
    	cntPWM1 = 40;
    	cntPWM2	= 50;
    }	
    	
    void Forward()				 //前进
    {
    	IN1 = 1;
    	IN2 = 0;   	//右轮正转
    
    	IN3 = 0;   	//左轮正转
    	IN4 = 1;
    
    	cntPWM1 = 40;
    	cntPWM2	= 40;
    }
    
    //void Backward()					 //后退
    //{
    //	IN1 = 0;	//右轮反转
    //	IN2 = 1;
    //
    //	IN3 = 1;
    //	IN4 = 0;	//左轮反转
    //	cntPWM1 = 30;
    //	cntPWM2	= 30;
    //}
    
    void Stop()					  //停止
    {
    	IN1 = 0;
    	IN2 = 0;
    
    	IN3 = 0;
    	IN4 = 0;
    }
    void XunJi()
    
    {
    	unsigned char flag = 0;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 0)&&(right2 == 0))   //0 0 0 0
    		flag = 0;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 0)&&(right2 == 1))   //0 0 0 1
    		flag = 1;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 1)&&(right2 == 0))   //0 0 1 0
    		flag = 0;
    
    	if((left1 == 0)&&(left2 == 0)&&(right1 == 1)&&(right2 == 1))   //0 0 1 1
    		flag = 1;
    
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 0)&&(right2 == 0))   //0 1 0 0
    		flag = 0;
    
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 0)&&(right2 == 1))   //0 1 0 1
    		flag = 4;
    
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 1)&&(right2 == 0))   //0 1 1 0
    		flag = 0;
    	
    	if((left1 == 0)&&(left2 == 1)&&(right1 == 1)&&(right2 == 1))    //0 1 1 1
    		flag = 1;
    	
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 0)&&(right2 == 0))   //1 0 0 0
    		flag = 3;
    	
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 0)&&(right2 == 1))   //1 0 0 1
    		flag = 0;
    	
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 1)&&(right2 == 0))   //1 0 1 0
    		flag = 2;
    	// ?
    	if((left1 == 1)&&(left2 == 0)&&(right1 == 1)&&(right2 == 1))   //1 0 1 1
    		flag = 0;
    	
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 0)&&(right2 == 0))   //1 1 0 0
    		flag = 3;
    	 //?
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 0)&&(right2 == 1))   //1 1 0 1
    		flag = 0;
    
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 1)&&(right2 == 0))   //1 1 1 0
    		flag = 3;
    	
    	if((left1 == 1)&&(left2 == 1)&&(right1 == 1)&&(right2 == 1))   //1 1 1 1
    		flag = 5;
    	
    	switch(flag)
    	
    {
    		case 0:Forward();break;
    		
    		
    		case 1:TurnRight1();break;
    		
    		
    		case 2:TurnRight2();break;
    		
    		
    		case 3:TurnLeft1();break;
    		
    		
    		case 4:TurnLeft2();break;
    
    
    		default:Stop();break;
    	}
    }
    
    void InterruptTime0() interrupt 1
    {
    	PWMCnt1++;
    	PWMCnt2++;
    	
    	if(PWMCnt1  >= 200)
    	{
    		PWMCnt1 = 0;
    	}
    	if(PWMCnt1 <= cntPWM1)
    	{
    		ENA = 1;
    	}
    	else
    	{
    		ENA = 0;
    	}
    
    	if(PWMCnt2 >= 200)
    	{
    		PWMCnt2 = 0;
    	}
    	if(PWMCnt2 <= cntPWM2)
    	{
    		ENB = 1;
    	}
    	else
    	{
    		ENB = 0;
    	}
    
    	TH0 = (65536 - 50)/256;
    	TL0 = (65536 - 50)%256;
    }
    
    展开全文
  • 做单片机的工程师相比都对循迹小车有所认识,它是自动引导机器人系统的基本应用,那么今天小编就给大家介绍下自动自动循迹小车的原理,智能循迹小车的应用,智能循迹小车程序,循迹小车用途等知...

    很多人都想要一款属于自己的循迹小车,它可以安装我们的编程进行移动,规避障碍物等自主活动,那么最简单的51循迹小车怎么做呢?今天小编带给大家一款自动循迹小车的设计方案。

    自动循迹小车是一项比较热门的电子竞赛,有许多设计方案。做单片机的工程师相比都对循迹小车有所认识,它是自动引导机器人系统的基本应用,那么今天小编就给大家介绍下自动自动循迹小车的原理,智能循迹小车的应用,智能循迹小车程序,循迹小车用途等知识吧!

    我们本次智能小车制作主要是让小车实现根据黑线的路径进行循迹的功能(避障功能可自由完成)

    智能小车可以分成三个部分——传感器部分、控制器部分、执行器部分

    控制器部分:接收传感器部分传递过来的信号,并根据事前写入的决策系统(软件程序),来决定机器人对外部信号的反应,将控制信号发给执行器部分。好比人的大脑。

    执行器部分:驱动机器人做出各种行为,包括发出各种信号(点亮发光二极管、发出声音)的部分,并且可以根据控制器部分的信号调整自己的状态。对机器人小车来说,最基本的就是轮子。这部分就好比人的四肢一样。

    传感器部分:机器人用来读取各种外部信号的传感器,以及控制机器人行动的各种开关。好比人的眼睛、耳朵等感觉器官。

    一、智能循迹小车简介

    小车工作原理

    本系统采用较为简单的设计方案,通过红外传感器循迹模块判断黑线的路径,然后由80C51单片机通过IO口控制L298N电机驱动模块改变两个直流电机的工作状态,最后实现循迹功能。

    系统构成——系统框图

    系统构成——工作流程

    二、组件说明

    1、单片机主控电路

    本次小车制作用89C51单片机作为其主要控制器部分,接受由传感器传输来的信息,进行判断后将控制信号发送给执行部分。

    控制器部分的制作即是制作一个51单片机最小系统。通过传感器部分和执行部分的连接,编写程序来判断接收到的信息然后做出响应。

    2、红外传感器模块

    采用的是TCRT5000红外循迹探头传感器,检测发射距离:1mm~25mm适用。所以安装红外传感模块要尽量在此检测距离内。其上有三个引脚,分别是VCC、GND、OUT。VCC:连接电源正极;GND:连接电源负极;OUT:输出信号端口,与单片机IO口相连。

    工作原理:传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平(即输出0),指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平(即输出1),指示二极管被点亮

    注意:由于各个厂家生产的红外传感器模块原理图不尽相同,高低电平逻辑也不相同。例如模块发射的光线被反射回并被模块识别到,即输出高电平信号,但是,不同厂家生产的可能输出低电平信号。因此红外传感器的工作模式需要自己甄别。

    3、超声波测距模块

    采用HC-SR04,有四个引脚分别是VCC、GND、TRIG(控制开始测距)、ECHO(响应输出)

    工作原理:

    (1)通过TRIG触发测距,给至少10us的高电平信号;

    (2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

    (3)有信号返回,通过ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

    本模块使用方法:一个控制口(TRIG)发一个10US以上的高电平,就可以在接收口(ECHO)等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值。

    4、L298N电机驱动模块

    采用光电耦合器件隔离单片机与L298N的控制电路,工艺精度高,性能可靠。L298N模块内部通过H桥电路实现直流电机的正转,反转,还可以通过单片机输出PWM控制使能端进而控制直流电机的转速,实现前进、后退、转弯。

    主要参数:

    电流-输出\通道:2A

    电流-峰值输出:3A

    电源电压:4.5~46V(一般采用12V供电)

    工作温度:-25℃~130℃

    工作原理及实物图:

    通过改变逻辑输入端,输入高\低电平使直流电机工作状态发生改变。

    5、直流电机

    电机有正负极,把电机的+和-分别接到电源的正极和负极,电机即可转动,如果要改变电机的转动方向,改变正负极即可。电机的转速我们可以理解为和外接的电压是正相关的。电源电压一般是已经确定了,因此如果我们要对电机进行调速,就需要用PWM波对电机进行调速。

    6、电源模块

    电源建议采用两个18650电池给L298N电机模块供电,再通过L298N上的5V输出端口给单片机和传感器供电。

    三、PWM简介

    什么是PWM:

    PWM是脉冲宽度调制的简称,脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

    PWM产生过程:

    利用51单片机的T0定时计数器,工作在预装载模式下。设置定时器定时中断时间(本次设计采用0.1ms)中断一次从而产生占空比可调的方波信号,即PWM信号。

    (占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。)

    PWM调速原理:

    通过输出PWM调节驱动电压脉冲宽度的方式,并与电路中一些相应的储能元件配合,改变了输送到电枢电压的幅值,从而达到改变直流电机转速的目的

    PWM产生流程图

    那么如何编写程序使51单片机产生PWM信号呢?

    你们可以参考以下例程

    四、程序设计思路

    我们组装好小车后,关键的是如何编写小车的程序

    程序决定了小车能否根据黑线的路径

    正确平稳地运行

    以下是程序设计的思路框图

    除此之外,我们还需要了解小车循迹的流程

    以三路循迹为例,当中间的红外传感器检测到黑线,则小车在轨道中间,直流电机正转,两个轮子保持前进;当左边的红外传感器检测到黑线,则说明小车要进行左拐弯,左边的电机停止转动,右边的电机保持转动,实现左转弯;当右边的红外传感器检测到黑线,则说明小车要进行右拐弯,右边的电机停止转动,左边的电机保持转动,实现右转弯。

    根据以上的分析,我们就可以动手编写小车的循迹程序了

    展开全文
  • 智能机器人之循迹小车——循迹原理01什么是循迹小车 循迹小车是指使用一定的循迹方法,使得小车自动循着赛道运行的小车。02循迹小车原理 循迹一般是黑色轨迹,传感器发出红外信号被接收后收入比较器,如果小车偏出...
  • 循迹小车是一种能够自己寻找轨迹并按轨迹运动的“智能”车。本文简要记录这一电子制作过程,希望大家喜欢。有什么建议和意见,欢迎大家留言。循迹小车完成图第一步根据元器件清单清点器件,看是否缺件少件。下图是元...
  • 循迹小车代码

    2018-04-23 14:01:53
    循迹小车代码,使用的是STM32最小系统制作的循迹小车
  • 红外循迹小车,简单循迹小车测试代码,不含PID算法。 红外循迹小车,简单循迹小车测试代码,不含PID算法。 红外循迹小车,简单循迹小车。 测试代码,不含PID算法。
  • 简单循迹小车程序

    2016-03-13 21:31:21
    循迹小车
  • 循迹小车abc

    2017-08-11 10:18:00
    循迹小车 c语言
  • 小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹小车单片机自动循迹...
  • 51 循迹小车 红外循迹 大集合 里面含有两个程序 一个是基础的循迹小车,一个是带有防出线功能的循迹小车
  • arduino 循迹小车

    2019-02-03 16:42:11
    用arduino做循迹小车 可过各种路口(包括丁字路口,十字路口等)
  • 本程序为参加软银杯竞速小车机器人组冠军组的程序,为双向循迹小车程序,本程序通过PID循迹让小车更快速且稳定的按照固定轨迹竞速,小车前后安装两个循迹模块,进行双向循迹,免去了小车转弯的时间。由于小车在双向...
  • AVR循迹小车

    2018-12-06 16:23:33
    AVR循迹小车,包含所有相关源程序和电路图。有需要的同学可以下载!
  • 循迹小车+仿真.zip

    2020-10-29 22:06:33
    循迹小车循迹小车、程序仿真实物 、论文
  • 微信搜索【沛华测控】订阅我们上期内容我们用光电传感器做了一辆避障小车,今天我们继续用光电传感器来做另外一个好玩的项目——循迹小车!由于实现思路基本一致,只需要对上期内容的代码稍做修改!这次换用以下的...
  • 红外自动循迹小车实验报告 1摘要 本实验完成采用红外反射式传感器的自寻迹小车的设计与实现。采用与白色地面色差很大的黑色 路线引导小车按照既定路线前进,在意外偏离引导线的情况下自动回位,并能显示小车停止的...
  • 摄像头循迹小车

    2016-01-03 20:34:50
    智能循迹小车的设计与制作 摘要介绍了一种智能循迹小车的制作方法,给出了控制系统的硬件设计和软件设计。控制 系统的硬件电路部分主要包括控制器。
  • 51循迹小车做起来很简单,基于单片机的循迹小车,单片机循迹小车,循迹小车程序,智能小车循迹程序,四路循迹小车程序,红外循迹小车程序
  • 基于arduino的循迹小车(含有PID算法)

    万次阅读 多人点赞 2018-08-11 20:39:36
    循迹小车一般分为两方面:一方面是简单的闭环赛道只有直道和弯道,另一方面是毕设类型的包括一些元素:90度弯道、十字道路、S形弯道等。 1、CSDN下载: 含有PID:...
  • 1循迹小车实训报告目录一、项目目标.....................................第3页二、项目内容.....................................第3页三、项目原理.....................................第3页四、项目原理图和...
  • 小车循迹 小车循迹

    2012-04-16 21:05:43
    小车循迹. 小车循迹

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,676
精华内容 670
关键字:

循迹小车