51单片机循迹小车学习方案

1.总体介绍

可参照桂林电子科技大学光电工程学院2023年光电创意设计竞赛(低年级组):“光电导航寻物竞技车”赛题。

具体内容见:OSTA智能寻迹小车

OSTA智能寻迹小车 - 嘉立创EDA开源硬件平台

2.底盘布局

底盘布局简而言之就是各种器件的分布情况。对于循迹小车而言主要就是红外探头的分布情况,其余零器件只要保证接线时自己不混乱就行。

红外探头的放置需要靠前。如果红外探头放在小车车身中间,遇到拐角时,小车转弯便会不灵活,半个车身越过弯道才会开始执行转弯命令,放在后面更不用说。同时根据其工作原理,红外探头的位置需要接近地面,避免阳光直射,便于其更加稳定、灵敏的接受信号、判断黑线。

位置分布需要看情况。对于多个红外探头,如下图,如果仅需实现循迹功能,可以直接并排间隔或不间隔放置。探头的数量多可以保证循迹的精确度。(不是越多越好)如果要制作的小车有其他任务与地图限制,则需要调整部分红外探头位置

红外探头工作原理:红外探测器由两部分——发射器(红外发光二级管)与接收器(红外光电二极管)组成。在其工作时,由发射器向外发出一定波长的红外光,经物体表面反射后由接收器接收。当物体表面类似黑体时,便会使发射器发出的红外光无法发射会接收器,接收器本质是红外光电二极管,失去了光,电流会发生变化,由此产生信号。

黑色外表的是接受端,透明的是发射端。接收端需要抵抗外界光线的干扰,所以采用黑色外表。而发射端采用透明外表是为了更好的向各个方向发射红外光。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_62449114/article/details/123011109

3.电控部分

3.1芯片:stc89c52

3.2驱动:L298N电路驱动

3.3比较器

当红外探头的电压值位于0.3vcc-07vcc之间,此时会由于单片机识别不准确二误判,可使用比较器改善。使用方法为给定一个判断阈值,当探头的OUT口低于该阈值则输出0V,反之则为高电平(需要用到上拉电阻)。

4.原理图

4.1探头

4.1比较器

4.2其他原理图

【单片机】基于51单片机的智能小车设计 - 嘉立创EDA开源硬件平台

【嵌入式】逐梦壹号-基于STC32的智能小车设计 - 嘉立创EDA开源硬件平台包含学习视频

5.代码

5.1pwm信号调节直流电机转速

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码

unsigned char zkbL1 = 0;
unsigned char zkbR1 = 0;
unsigned char zkbL2 = 0;
unsigned char zkbR2 = 0;
unsigned char zkbD1 = 0;
unsigned char pwmL1 = 0;
unsigned char pwmR1 = 0;
unsigned char pwmL2 = 0;
unsigned char pwmR2 = 0;
 
//调占空比调速
void Pwm_L1 (void)//左前电机调速 
{
	pwmL1%=20;
		if(pwmL1<=zkbL1)
		{
			L_EnL1 = 1;
		}else 
		{
			L_EnL1 = 0;
		}
}

设置定时自增的数,我们需要用到单片机的定时器与中断功能。这些在这里不加以讲解,购买了单片机的人参考厂商配备的操作手册即可。下面就是产生pwm信号的函数。

void Timer0Init(void)		//10us@12.000MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0xF7;		//设置定时初始值
	TH0 = 0xFF;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	ET0 = 1;
	EA = 1;
	TR0 = 1;		//定时器0开始计时
}
 
 
//定时器中断服务产生pwm信号
void Timer0() interrupt 1
{
	TR0 = 0;//关闭定时器 
	TH0 = 0xF7;//初始化便于后续计时 
	TL0 = 0xFF;//初始化便于后续计时  
	pwmL1++;
	pwmR1++;
	Pwm_L1;
	Pwm_R1;
	TR0 = 1;//开启定时器 
}

完整完整函数

 void forward (void)//前进 
 {
 	zkbL1 = 18;
 	zkbR1 = 18;
 	Moto_Go_L1;//左前轮前进 
 	Moto_Go_R1;//右前轮前进 
 }
 
 void back (void)//后进 
 {
 	zkbL1 = 18;
 	zkbR1 = 18;
 	Moto_Back_L1;//左前轮后退 
 	Moto_Back_R1;//右前轮后退 
 }
void rightrunB (void)//大右转 
{
	zkbL1 = 20;
	zkbR1 = 18;
	Moto_Go_L1;//左前轮前进
	Moto_Back_R1;//右前轮后转 
 
}
 
void rightrunL (void)//小右转 
{
	zkbL1 = 20;
	zkbR1 = 18;
	Moto_Go_L1;//左前轮前进
	Moto_Go_R1;//右前轮慢速 
}
 
void leftrunB (void)//大左转 
{
	zkbL1 = 16;
	zkbR1 = 20;
	Moto_Go_R1;//右前轮前进
	Moto_Back_L1;//左前轮后转 
}
 
void leftrunL (void)//小左转 
{
	zkbL1 = 18;
	zkbR1 = 20;
	Moto_Go_R1;//右前轮前进
	Moto_Go_L1;//左前轮慢速 
}
 
void stop (void)
{
	Moto_Stop_L1;//左前轮停 
	Moto_Stop_R1;//右前轮停 
}

上述代码可放在.h文件中

主要循迹代码

#include <REGX52.H>
#include <Define.H>
 
 
void main()
{
 
		Timer0Init();//开启10us定时与中断
		while(1)
		{
			if(CgqL1==0&&CgqL2==1&&CgqR1==1&&CgqR2==0)
			{
				forward();
			}else if (CgqL1==0&&CgqL2==1&&CgqR1==1&&CgqR2==1)
			{
				rightrunB();
			}else if (CgqL1==1&&CgqL2==0&&CgqR1==0&&CgqR2==0)
			{
				leftrunB();
			}else if (CgqL1==0&&CgqL2==0&&CgqR1==0&&CgqR2==0)
			{
				stop();
				Delay(50) ;
			}else if(CgqL1==0&&CgqL2==1&&CgqR1==0&&CgqR2==0)
			{
				leftrunL(); 
			} else if(CgqL1==0&&CgqL2==0&&CgqR1==1&&CgqR2==0)
			{
				rightrunL();
			}
 
	}
}


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_62449114/article/details/123011109

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 51单片机循迹小车是一种基于51单片机控制的智能小车,能够通过不同传感器对地面的黑线进行检测,并且根据检测结果实现自主的循迹行驶。 CSND是指CSDN(中文全称:中国软件开发网),是一个专门为程序员和IT技术从业者提供技术资讯、编程技术支持、职业培训等服务的网站。在CSDN上,有很多人分享了关于51单片机循迹小车的相关资源和教程,供其他开发者进行学习和参考。 循迹小车通常由底盘、驱动电机、电源、51单片机、传感器等组成。其中,51单片机循迹小车的控制中心,通过程序的编写和算法的运算,实现小车的自主行驶。 循迹小车中的传感器可以是红外线传感器、光敏传感器或者颜色传感器等,通过探测地面的黑线与白地之间的反差,判断小车当前位置。根据传感器输出的信号,51单片机可以控制电机的转速和方向,使小车能够跟随黑线进行行驶,并实现前进、后退、转向等操作。 循迹小车的设计和制作是一个典型的嵌入式系统开发过程,需要具备一定的电子技术、编程和机械设计等综合能力。在CSDN上,有很多技术大牛分享了他们的经验和教程,对于想要学习和制作循迹小车的开发者来说,是非常有帮助的资源。 总之,51单片机循迹小车CSND是指使用51单片机控制的智能小车,并在CSDN上有相关资源和教程供开发者学习和参考。通过学习和实践,可以了解嵌入式系统开发、电子技术和编程等知识,提高自己的技术水平。 ### 回答2: 51单片机循迹小车CSND是一款基于51单片机循迹小车项目,由CSDN网站提供,用于学习和实践嵌入式系统开发的。该项目的目的是通过循迹小车的制作和程序编写,帮助使用者更好地理解和掌握嵌入式系统的原理和应用。 该循迹小车是由51单片机控制,通过采集底部感应器获取地面反光率的变化,从而判断小车所在位置。根据传感器的反馈信号,51单片机通过编写的程序来控制车轮的运动,以实现循迹的功能。 在该项目中,用户可以学习到循迹原理、51单片机的编程和控制、传感器的使用以及电子元件的连接与焊接等基础知识。该项目还提供了详细的硬件和软件设计资料,使用户可以按照文档提供的步骤一步一步地搭建出一个完整的循迹小车。 通过该项目,使用者可以在实践中了解和掌握嵌入式系统开发的各个环节,提高自己的实践能力和创新能力。同时,通过对循迹小车的制作和编程,还可以培养使用者的逻辑思维和问题解决能力。 总的来说,51单片机循迹小车CSDN是一个实用的教学项目,通过这个项目,使用者可以全面了解嵌入式系统的开发流程和技术知识,并在实践中提高自己的能力。 ### 回答3: 51单片机循迹小车是一款由CSDN开发的智能小车,它采用了51单片机作为控制核心。循迹小车通过在地面上布置的黑线进行自动导航,从而实现路径规划和自主移动的功能。 循迹小车的原理是利用光电传感器来检测地面上的黑线。光电传感器通过测量反射光的强弱来判断是否经过黑线,并将这些信息传输给51单片机51单片机根据传感器的信号来判断小车当前的位置和方向,从而做出相应的控制动作,使小车能够沿着黑线正确行驶。 循迹小车的控制过程可以分为三个主要步骤:检测黑线、判断方向和控制行驶。在检测黑线的过程中,光电传感器会不断采集地面颜色的信息,并与事先设定的阈值进行比较,以判断是否经过黑线。判断方向时,根据传感器的信号变化来调整小车的舵机,使其朝向黑线的方向。控制行驶时,根据舵机的角度控制小车的转向,使其沿着黑线行驶。 除了基本的循迹功能,CSDN51单片机循迹小车还具有一些其他的附加功能。例如,它可以通过无线通信模块与外部设备进行通信,实现远程控制和数据传输。同时,它还可以通过添加其他传感器,如温度传感器和声音传感器,来进行更多的应用扩展,如环境监测和声音识别等。 总的来说,CSDN51单片机循迹小车是一款功能强大的智能小车,通过51单片机和光电传感器的配合,实现了精准的循迹导航和自主移动。它不仅具备基本的循迹功能,还可以通过扩展模块实现更多的应用,具备一定的可扩展性和实用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值