红外循迹模块

模块描述
    此模块是为智能小车、机器人等自动化机械装置提供一种多用途的红外线探
测系统的解决方案。该传感器模块对环境光线适应能力强,其具有一对红外线发
射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面 )
时,红外线反射回来被接收管接收,经过比较器电路处理之后,同时信号输出接
口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距
离范围 2~60cm,工作电压为 3.3V-5V。该传感器的探测距离可以通过电位器调
节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避
障小车、流水线计数及黑白线循迹等众多场合。
模块参数说明
  1. 当模块检测到前方障碍物信号时,电路板上红色指示灯点亮,同时 OUT端口持续输出低电平信号,该模块检测距离 2~60cm,检测角度 35 ° ,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。
  2. 传感器属于红外线反射探测,因此目标的反射率和形状是探测距离的关键。其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。
  3. 传感器模块输出端口 OUT 可直接与单片机 IO 口连接即可,也可以直接驱动一个 5V 继电器模块或者蜂鸣器模块;连接方式:VCC-VCC;GND-GND;OUT-IO
  4. 比较器采用 LM339,工作稳定 。
  5. 可采用 3.3V-5V 直流电源对模块进行供电。当电源接通时,绿色电源指示灯点亮 。
模块接口说明( 6 16 线制)
  • 红外探头 VCC GND OUT 对应接入中控板 VCC GND INx
  • 中控板供电:模块 6p 排针接口处 VCC 外接 3.3V-5V 电压(可以直接与 5v 单片机和 3.3v 单片机相连);GND 外接 GND ;OUT1-OUT4 接单片机 IO 口
模块测试说明
  • 测试探头 :移开探头前面所有物体,且探头不要指向有阳光的地方(光线对探头有较大干扰),将探头板接上电源后用万用表测量 OUT 和 GND之间的电压,正常范围应该在 0.6v-2.5v 之间,用白纸挡在探头前,用万用表测量 OUT 和 GND之间的电压,正常范围应该接近0V.简单的说,就是用白纸挡住探头后,OUT 和GND 之间的电压会有一个明显的降低,这样就算正常。
  • 单独测试中控板:这个需要先了解一下 LM339 的工作原理,我们以第一路来简单
  • 说明一下:IN1-为定位器调节的电压输入端,IN+为探头输出的电压(就是探头OUT 与 GND 的电压),当 IN1- 电压 >IN1+电压时,对应的 1 OU1 输出的电平电压接近0v ,此时,对应的 D LED 灯会亮;当 IN1- 压 电压 < < < < IN1+电压时,对应的 1 OU1 输出的电平电压接近 5v, 此时 ,对应的 D LED 灯会点亮。这个就是整个电路工作的核心。我们根据这个原理,就可以简单的进行一个测试了,调节第一路的电位器 ,使 IN-的电压为 2.5v左右,然后根据上面的原理,分别对 IN1 接 0V 和 5V 电压 ,然后根据上面的原理,就会发现,接 OV 时,LED 灯亮;接 5v时,LED 灯灭。
  • 联机测试:按照要求将探头与中控板连接好,移开探头前面所有物体,且探头不要指向有阳光的地方(光线对探头有较大干扰),调节每一路的电位器,直到灯刚灭掉,然后用白纸遮挡探头,会发现led 会点亮,这样就算测试成功了,然后我们就可以将中控板的输出信号传入单片机进行高低电平检测了。
电路图

在这里插入图片描述
在这里插入图片描述

void xunji(void)
{
 //四路都检测到
 if(Ray1==1&&Ray2==1&&Ray3==1&&Ray4==1)
 {
  run();
  delay_ms(100);
 }
 
 //中间两路检测到
 if(Ray1 == 0 && Ray2 == 1 && Ray3 == 1 && Ray4 == 0 |   
  Ray1 == 0 && Ray2 == 0 && Ray3== 1 && Ray4 == 0 |
  Ray1 == 0 && Ray2 == 1 && Ray3 == 0 && Ray4 == 0 )
 {
  run();
  delay_ms(100);
 }
 
 //左边检测到
 if(Ray1 == 1 && Ray2 == 0 && Ray3 == 0  && Ray4 == 0 |
  Ray1 == 1 && Ray2 == 1 && Ray3 == 0  && Ray4 == 0)
 {
  left();
  delay_ms(100);
 }
 
 //右边检测到
 if(Ray1 == 0 && Ray2 == 0 && Ray3 == 0  && Ray4 == 1 |
  Ray1 == 0 && Ray2 == 0 && Ray3 == 1 && Ray4 == 1)
 {
  run();
  delay_ms(100);
 }
 
 //四路都没检测到
 if(Ray1==0&&Ray2==0&&Ray3==0&&Ray4==0)
 {
  stop();
  delay_ms(100);
 }
 
}
#include "redray.h"
#include "delay.h"

void RedRayInit(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG , ENABLE);
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;//配置使能GPIO管脚
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//配置GPIO模式,输入上拉
 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//配置GPIO端口速度
 GPIO_Init(GPIOC , &GPIO_InitStructure); 
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;//配置使能GPIO管脚
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//配置GPIO模式,输入上拉
 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//配置GPIO端口速度
 GPIO_Init(GPIOG , &GPIO_InitStructure); 
 }
#ifndef __REDRAY_H
#define __REDRAY_H

#define Ray1           GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_7)  
#define Ray2           GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_8)
#define Ray3           GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6)
#define Ray4           GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)

void RedRayInit(void);
void xunji(void);

#endif
发布了5 篇原创文章 · 获赞 9 · 访问量 140

猜你喜欢

转载自blog.csdn.net/R_Z_Q/article/details/104456440