跟随小车---3

红外避障模块

比较后就会发现,跟随模块的设计和上节的传感器的设计是一样的,只是跟随模块的红外发射和接受口朝前,而上节的传感器朝下

因此,同样的逻辑:

模块输出端为高电平:当发射出的红外线没有或反射强度不够大时,红外线接收管就会一直处于关断状态,指示二级管一直处于熄灭状态。

模块输出端为低电平:而当被检测物体出现再检测范围内导致红外线被反射回来且强度足够大,此时红外接收管饱和,指示二级管被点亮。

说人话就是: 反射的强度不够时,DO为高,开关指示灯不亮;反之DO为低,开关指示灯亮

跟随小车的原理

和循迹小车类似,只不过循迹循的是地板上的黑色,而跟随是跟随前方的黑色:

左边跟随模块能返回红外(输出低电平)且右边模块不能返回红外(输出高电平)时,说明物体在左边,需要左转

右边跟随模块能返回红外(输出低电平)且左边模块不能返回红外(输出高电平)时,说明物体在右边,需要右转

接线也和上节一样,这里我选择了左边传感器OUT接P2.5,右边传感器OUT接P2.4:

跟随小车的代码实现

也和上节的代码相差无几:

follow部分:

#include "reg52.h"
#include "motor.h"
#include "timer0.h"

sbit sensor_left = P2^5;
sbit sensor_right = P2^4;

extern char speed_left;
extern char speed_right;

void sensor_react()
{
	if(sensor_left == 0 && sensor_right == 0){ //左右模块都能反射红外,物体在正前方,直行
		speed_left = 32;
		speed_right = 30;
	}
	if(sensor_left == 1 && sensor_right == 0){ //右模块能反射红外而左模块不能,物体在右边,右转
		move_rightturn();
	}
	if(sensor_left == 0 && sensor_right == 1){ //左模块能反射红外而右模块不能,物体在左边,左转
		move_leftturn();
	}
	if(sensor_left == 1 && sensor_right == 1){ //左右模块都不能反射红外,前方无物体,停止
		speed_left = 0;
		speed_right = 0;
	}
	
}

main部分:

#include "reg52.h"
#include "intrins.h" //这个库加了,delay函数里面的nop()才不会报错
#include "motor.h"
#include "delay.h"
#include "UART.h"
#include "433M.h"
#include "timer0.h"
#include "route_sensor.h"



void main()
{
	Timer0Init();
	Timer1Init();
		
	while(1){
		sensor_react();
	}
		
}

实现效果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值