C51--小车——循迹
2023-12-21 15:26:17
循迹小车:
循迹模块:
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;
}
}
}
文章来源:https://blog.csdn.net/weixin_48208102/article/details/135070748
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!