C51——循迹小车实现

TCRT5000模块(循迹)
1、模块原理:红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或强度不够大时,模块的输出高电平1(指示灯不亮);当红外线有被反射回来,此时模块输出低电平0(指示灯亮)

2、接线:vcc接5v,gnd接地,DOttl开关信号输出,A0模拟信号输出(不同距离输出不同电压,在此实验可以不接)

3、循迹原理:有感应到黑线,红外线被吸收反射较弱,DO=1(灭灯);没有感应到黑线,红外线能反射回来,DO=0(亮灯)
向前:两个模块都能反射回来,输出低电平
向左:左边压线,左边模块反射不回来是高电平,右边模块能反射回来是低电平
向右:右边压线,左边模块能反射回来输出低电平,右边模块反射不回来输出低电平

4、识别不灵敏或过于灵敏的时候将模上电位器调整到合适的位置

代码:

1、

main.c

//#include "reg52.h"//代码里边没有,sbit i/o口,可以不要声明
//#include "intrins.h"//代码里边没有_nop_();可以不要该声明
#include "motor.h"
#include "dalay.h"
#include "uart.h"

sbit leftsenser=P2^6;
sbit rightsenser=P2^7;

void main()
{
	Delay1000ms();
	UartInit();
  if(leftsenser==0&&rightsenser==0){
    goforward();
  }
	if(leftsenser==1&&rightsenser==0){
    goleft();
  }
	if(leftsenser==0&&rightsenser==1){
    goright();
  }
  if(leftsenser==1&&rightsenser==1){
    stop();
  }
	  while(1);
}

2、

motor.c

#include "reg52.h"

sbit right1=P3^2;
sbit right2=P3^3;
sbit left1=P3^4;
sbit left2=P3^5;

void goback()
{
  left1=1;
	left2=0;
	right1=1;
	right2=0;
}
void goforward()
{
  left1=0;
	left2=1;
	right1=0;
	right2=1;
}
void goleft()
{
  left1=0;
	left2=0;
	right1=0;
	right2=1;
}
void goright()
{
  left1=0;
	left2=1;
	right1=0;
	right2=0;
}
void stop()
{
  left1=0;
	left2=0;
	right1=0;
	right2=0;
}

motor.h

void goback();

void goforward();

void goleft();

void goright();

void stop();

 3、

uart.c

#include "reg52.h"
#include "motor.h"
#include "string.h"

#define SIZE 12
sfr AUXR=0x8E;//不认识AUXR,报错需要声明
char buffer[SIZE];
void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR=0x01;
	SCON=0x50;//配置串口工作方式1,ren能接收01000000
	TMOD&=0x0F;
	TMOD|=0x20;//定时器1的工作方式8位自动重装配置
	TH1=0xFD;
	TL1=0xFD;//9600波特率的初值
	TR1=1;//启动定时器
	EA=1;//打开总中断
	ES=1;//允许串口中断
}
void uart_toutine()interrupt 4
{
  static int i = 0;
	char tmp;

	if(RI)
	{
  	RI = 0;
			tmp = SBUF;
			if(tmp=='M'){//WIFI GOT IP中既包含W、又包含F,底下条件满足FI,D5亮
				i = 0;
			}
			buffer[i++] = tmp;
      if(buffer[0] == 'M'){
        switch(buffer[1]){
          case '1':
					  goforward();
					  break;
					case '2':
					  goleft();
					  break;
					case '3':
					  goright();
					  break;
					case '4':
						goback();
					  break;
					default:
						stop();
					  break;
        }
      }
	}
	if(i == 12){
	memset(buffer, '\0', SIZE);
  i = 0;
  }

}

uart.h


void UartInit();		//9600bps@11.0592MHz

 4、

dalay.c

#include "intrins.h"

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

dalay.h

	void Delay1000ms();

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
四路红外寻迹小车是一种常见的智能小车设计,它可以根据周围环境中的红外信号来跟踪路径。以下是一个基本的四路红外寻迹小车设计的简要说明: 硬件部分: 1. 小车底盘:选择一个适合的底盘,可以是四轮驱动或两轮驱动,具备足够的稳定性和承载能力。 2. 红外传感器:使用四个红外传感器安装在小车前方,用于检测前进方向上的障碍物或黑线。 3. 控制模块:选择一个合适的控制模块,如Arduino、树莓派等,用于接收红外传感器的信号并进行相应的控制。 4. 驱动电机:根据底盘类型选择合适的驱动电机,可以是直流电机或步进电机,用于实现小车的前进、后退和转向。 软件部分: 1. 红外信号处理:使用控制模块编写代码,读取红外传感器的信号,并根据信号判断小车当前所处位置。 2. 路径跟踪算法:根据红外传感器的信号判断小车是否偏离了预定路径,根据情况进行相应的调整,使小车能够保持在路径上。 3. 障碍物避障:如果红外传感器检测到前方有障碍物,控制模块可以采取相应的措施,如停车、后退或绕行。 总结: 四路红外寻迹小车设计需要硬件和软件两个方面的配合。通过红外传感器检测信号,控制模块进行实时处理和判断,从而实现小车的路径跟踪和障碍物避障功能。具体的设计和实现可以根据需求进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值