简单循迹小车实验心得_你真的了解循迹小车吗,小宇教你如何制作属于自己的循迹小车...

很多人都想要一款属于自己的循迹小车,它可以安装我们的编程进行移动,规避障碍物等自主活动,那么最简单的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信号呢?

你们可以参考以下例程

四、程序设计思路

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

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

正确平稳地运行

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

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

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

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

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include #include "qudong.h" #include "duankou.h" #include "lcd1602.h" #include "celv.h" #define uchar unsigned char #define uint unsigned int #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //****************************************************************************** //全局变量 //****************************************************************************** float voltage=6.0; //实际电压值 int RS1=100; int LS1=100; int RS0=100; int LS0=100; char heixian=0x03; //不等于0x03表示检测到信号,等于0x03表示没检测到信号 char ji_shu=0; //表示第几次检测到黑线 char youxinhao=0; //=1表示检测到信号,=0表示没有检测到信号 uint total_time_count=0;//时间相关变量 uint start_low_speed=0; uint end_low_speed=0; uint end_all=0; uint start_all=0; uint LM_cap_new=0; //测速相关变量 uint LM_cap_old=0; uint LM_cap_count=0; uint LM_mai_kuai=0; float real_LM_speed=0.0; float top_speed=0; float average_speed=0; uint RM_cap_new=0; uint RM_cap_old=0; uint RM_cap_count=0; uint RM_mai_kuai=0; float real_RM_speed=0.0; float total_distance=0; //测量值转化为实际值相关变量 float dis1=0; float dis0=0; uint low_speed_time=0; uint total_time=0; //****************************************************************************** //系统时钟初始化,aclk=32768k,mclk=XT2,SMCLK = XT2。 //****************************************************************************** void Init_clock(void) { DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO数字晶振最高频率 BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL选择高速晶振最高频率 BCSCTL2 |=SELM_2+SELS; //MCLK=8M,SMCLK = XT2,系统主时钟选择高速晶振 do //清除振荡器失效标志,等振荡器稳定。 { IFG1&=~OFIFG; for(unsigned int i=0XFF;i>0;i--); } while((IFG1&OFIFG)!=0); } #pragma vector=ADC_VECTOR //ADC12 interrupt service routine __interrupt void ADC12_ISR (void) { if(ADC12MEM0<2816)P6OUT&=~BIT3; //欠压指示灯亮 else P6OUT|=BIT3; } //*************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值