stc15w系列单片机——TCRT5000(寻迹传感器)与光敏传感器
- 一、TCRT5000
- 1.模块介绍
- 2.寻迹传感器原理图
- 二、寻迹与光敏传感器代码
一、TCRT5000
1.模块介绍
一般功能有
1、电度表脉冲数据采样
2、传真机碎纸机纸张检测
3、障碍检测
4、黑白线检测
参数介绍:
1、采用 TCRT5000 红外反射传感器
2、检测反射距离:1mm~25mm 适用
3、比较器输出,信号干净,波形好,驱动能力强,超过 15mA。
4、配多圈可调精密电位器调节灵敏度
5、工作电压 3.3V-5V
6、输出形式 :数字开关量输出(0 和 1)
7、设有固定螺栓孔,方便安装
8、小板 PCB 尺寸:3.2cm x 1.4cm
9、使用宽电压 LM393 比较器
2.寻迹传感器原理图
该模块十分容易使用,因为一般使用时仅仅需要连接一个IO口还有VCC和GND三根线即可。
该原理图为一个非常经典的电路,其中下方框住的红外部分可以替换成光敏或者热敏电阻等元件,即可以通过不同的元器件来达到不同的目的,原理相同。
其原理是:**刚开始红外所在的电路不导通,VCC与10K电阻相连接之后接到LM393电压比较器,此时接比较器输入正,故D0口输出高电平,数字信号1,且由于输出电路上并了一个1K电阻和开关指示灯,VCC与此时的输出均为高电平,指示灯不亮。直到检测到红外前方2.5cm(最大范围)有物体遮挡时才会使得红外所在电路导通,让LM393正输入接地,输出低电平0,灯亮。**这就是循迹的原理。
二、寻迹与光敏传感器代码
//串口可以不用,我只是写着玩,当两个传感器检测到遮挡或者光照不足时
#define MAIN_Fosc 24000000L //定义主时钟
#include "STC15F.H"
unsigned char date;
#define uchar unsigned char
#define uint unsigned int
sbit Infrared_Sensor=P3^0; //寻迹模块的IO口
sbit Light_Sensor=P5^4; //光敏传感器的IO口
/* 函数申明 -----------------------------------------------*/
void Delay15ms(); //都是24MHz的,不同指令集下可能不太准确
void Delay500ms();
void Initial_com(void); //串口初始化
void UART_SendByte(unsigned char Byte); //发字符
/******************** 主函数 **************************/
void main(void)
{
P0M1 = 0; P0M0 = 0; //设置为准双向口
P1M1 = 0; P1M0 = 0; //设置为准双向口
P2M1 = 0; P2M0 = 0; //设置为准双向口
P3M1 = 0; P3M0 = 0; //设置为准双向口
P4M1 = 0; P4M0 = 0; //设置为准双向口
P5M1 = 0; P5M0 = 0; //设置为准双向口
P6M1 = 0; P6M0 = 0; //设置为准双向口
P7M1 = 0; P7M0 = 0; //设置为准双向口
Initial_com(); //串口初始化
while(1)
{
if(Infrared_Sensor==0) //检测前方是否有遮挡
{
Delay15ms(); //消抖动
if(Infrared_Sensor==0) //有遮挡时,灯亮0.5s然后熄灭
{
P55 = 0;
Delay500ms();
P55 = 1;
UART_SendByte(1); //发个1
Delay500ms();
}
}
if(Light_Sensor==1) //检测光线是否充足
{
Delay15ms(); //消抖动
if(Light_Sensor==1) //不充足时,灯亮0.5s然后熄灭
{
P55 = 0;
Delay500ms();
P55 = 1;
UART_SendByte(2); //发个2
Delay500ms();
}
}
if(RI) //接收到任意指令之后灯亮0.5s
{
date=SBUF;
P55 = 0;
Delay500ms();
P55 = 1;
RI=0;
}
}
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
void Delay15ms() //@24.000MHz
{
unsigned char i, j, k;
i = 2;
j = 212;
k = 132;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay500ms() //@24.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 46;
j = 153;
k = 245;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//*****串口初始化函数***********
void Initial_com(void) //9600
{
EA=1; //开总中断
ES=1; //允许串口中断
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x8F; //设置定时初始值
TH1 = 0xFD; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
}
过两天会上传MPU-6050加速度传感器的资料代码,非常感谢各位的观看。