循迹小车51单片机编程_循迹小车有什么实际应用

循迹小车51单片机编程_循迹小车有什么实际应用循迹小车话从哪里说起,等到你要说话,什么话都是那样渺茫地找不到个源头

循迹小车

话从哪里说起,等到你要说话,什么话都是那样渺茫地找不到个源头。
假期来了,决定自己动手做点东西,于是刚接触51不久的我就将眼光转向了“简单”的循迹小车,但即使如此简单的一个东西也耗费了我许多的时间,更犯了很多的错误。

元器件的使用

考虑到简单方便,采用了51单片机开发板,L298N,四个电机,一对红外传感器用以循迹以及一块航模电池作为电源。
开发板的使用要慎重,毕竟五十多块钱的东西烧起来心都在滴血。
循迹小车51单片机编程_循迹小车有什么实际应用
L298N这个元件真的需要弄明白在使用,并且要避免把所有的线都接在一起,那样真的让自己都会眼花缭乱。
在这里插入图片描述
红外传感器精度较低,要注意把它尽量放低一点。
在这里插入图片描述
电机的优劣是决定实验成功与否的重要因素,空转比太低的时候,电机容易停。
第一代电机
循迹小车51单片机编程_循迹小车有什么实际应用
第二代电机
在这里插入图片描述
在整个制作过程中最令我头疼的就是电源的选择,刚开始使用的是学生电源,一个大块头,领着这个东西满地乱跑的画风不正常的很,图如下。
在这里插入图片描述
于是学长给了我一块航模电池,处于安全起见,他让我加个开关。
最蠢的是我居然把开关和电路还有电源并列了起来,一连上正负极就滋滋冒电火花那种,当时我居然还傻fufu去问学长,想到这里还是很羞愧。
在这里插入图片描述

代码部分

#include <reg51.h>

sbit IN1   = P1^2; 
sbit IN2   = P1^3;
sbit IN3   = P1^4; 
sbit IN4   = P1^5;
sbit ENA   = P1^0;//左边两个电机的使能
sbit ENB   = P1^1;//右边两个电机的使能
sbit lse1  = P3^0;//左边红外传感器的数据口
sbit lse2  = P3^1;//右边红外传感器的数据口
unsigned char zkb1 = 0;//定义了一下左边两个轮的占空比
unsigned char zkb2 = 0;//定义了一下右边两个轮的占空比
int t = 0;

void PIT_Init()
{
  EA    = 1;
	TMOD |= 0x01;
	TH0   = (65536 - 200) / 256;
	TL0   = (65536 - 200) % 256;
	ET0   = 1;
	TR0   = 1;
}

void timer()interrupt 1//interrrupt 1ΪÄÚ²¿Öжϣ¬0ΪÍⲿÖжÏ
{
  TH0 = (65536-200)/256;
	TL0 = (65536-200)%256;
	
  if(t<zkb1)
	{
	   ENA = 1;
	}
  else
	{
	  ENA = 0;
	}
	
	if(t<zkb2)
	{
	   ENB = 1;
	}
  else
		
	{
	  ENB = 0;
	}
	
	t = (t + 1) %50;
}

void run()
{   zkb1  = 10;
	zkb2  = 10;
    IN1   = 1;
    IN2   = 0;
    IN3   = 1;
    IN4   = 0;
}

void stop(void)
{   zkb1 = 0;
	zkb2 = 0;
    IN1  = 0;
    IN2  = 0;
    IN3  = 0;
    IN4  = 0;
}

void leftrun(void)
{ 
	zkb1 = 15;
	zkb2 = 15;
    IN1  = 1;
    IN2  = 0;
    IN3  = 0;
    IN4  = 0;
}

void rightrun(void)
{ 
	zkb1 = 15;
	zkb2 = 15;
    IN1  = 0;
    IN2  = 0;
    IN3  = 1;
    IN4  = 0;
}

void delay(unsigned int k)
{
  unsigned int x,y;
  for(x=0;x<k;x++)
  {
   for(y=0;y<2000;y++);
  }
}

void xunji()
{   unsigned char flag;
    if((lse1==0)&&(lse2==1))
    {
	    flag = 0;//左边检测到黑线
    }
    else if((lse1==1)&&(lse2==0))
    {
		  flag = 1;//右边检测到黑线
	}
    else if((lse1==1)&&(lse2==1))
	{
			flag = 3;
	}
		else
	{
		  flag = 4;
	}
		switch(flag)
	{
		case 0:  rightrun();delay(48);stop(); delay(50);break;
		case 1:  leftrun();delay(48);stop(); delay(50);break;
		case 3:  run();delay(11);stop();delay(50);break;
		case 4:  run();delay(11);stop();delay(50);break;
		default: run();delay(10);stop();delay(50);break;
	}
}

void main()
{
	PIT_Init();
	zkb1 = 8  ;
	zkb2 = 8  ;
    IN1  = 1  ;
    IN2  = 0  ;
    IN3  = 1  ;
    IN4  = 0  ;
	while(1)
	{
		xunji() ;
	}
}

文章最后

感谢学长的支持,和队友们的帮助,这是一个让我印象深刻的6天,也掌握了很多以前不曾了解过的知识。

今天的文章循迹小车51单片机编程_循迹小车有什么实际应用分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/79161.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注