C51--小车——循迹

循迹小车:

循迹模块:

TCRT5000模块:

1、模块原理:
TCRT5000传感器的红外发射二极管不断发射红外线,
当发射出的红外线没有被反射回来或反射回来强度不够大时,红外接收管一直处于关闭状态,模块的输出高电平1(指示二极管处于熄灭状态);当红外线有被反射回来且足够强大,此时模块输出低电平0(二极管被点亮)

2、接线
VCC---------5v
GND--------地
DO: TTL 开关信号输出 0,1(是否有红外信号返回输出高低电平)
AO: 模拟信号输出(不同距离输出不同电压,在此实验可以不接)

3、循迹原理:
当循迹模块发射出来的红外线照射到黑线,红外线被黑线吸收,循迹模块上的光敏三极管处于关闭状态,反射较弱,DO=1(灭灯);没有感应到黑线,红外线能反射回来,DO=0(亮灯)
感应到黑线,输出高电平 1,灭灯

模块装在小车车头两端:
向前:两个模块都能反射回来,输出低电平
向左:左边压线,左边模块反射不回来,输出高电平,右边模块能反射回来是低电平
向右:右边压线,右边模块不能反射回来,输出高电平,左边模块反射回来输出低电平

4、代码:
主函数:


#include "motor.h"
#include "Delay.h"
#include "uart.h"
#include "time.h"
#include "reg52.h"

extern char speedLeft;
extern char speedRight;

sbit leftFind = P2^7;
sbit rightFind = P2^6;

void main()
{
	Time0Init();		//定时器0初始化
	Time1Init();		//定时器1初始化
	//UartInit();			//串口初始化
	
	
	while(1){
		if(leftFind == 0 && rightFind == 0){	//向前:两个模块都能反射回来,输出低电平
		//前进
			speedLeft = 40;
			speedRight = 40;
		}
		if(leftFind == 1 && rightFind == 0){	//向左:左边压线,左边模块反射不回来,输出高电平,右边模块能反射回来是低电平
		//左转
			speedLeft = 10;		//10份(5ms)全速,30份停止。20ms是40份的0.5ms
			speedRight = 40;
		}
		if(leftFind == 0 && rightFind == 1){	//向右:右边压线,右边模块不能反射回来,输出高电平,左边模块反射回来输出低电平
		//右转
			speedLeft = 40;
			speedRight = 10;
		}
		if(leftFind == 1 && rightFind == 1){	//停止:两个都无法反射,输出高电平
		//停止
			speedLeft = 0;
			speedRight = 0;
		}
	}
}

你可能感兴趣的:(STC51,单片机,51单片机,嵌入式硬件,stm32,c语言)