首页 > 编程知识 正文

红外传感器,红外接收模块

时间:2023-05-04 07:06:45 阅读:112320 作者:1006

试验实现红外线屏蔽模块断开时点亮LED的功能。

1 .实物原理图

2 .模块描述电路板尺寸: 3.2CM*1.4CM; 固定、安装方便的3mm螺纹孔; 接通电源后,红色指示灯点亮,该传感器模块适应环境光的能力强,具有一对红外线发光和接收管,发光管发出一定频率的红外线,检测方向遇到障碍物(反射面)时,红外线反射后被接收管接收,比较器LM393 绿色指示灯点亮的同时,信号输出接口输出数字信号(低电平信号),可以用电位器调节检测距离,按电位器检测到的逆时针方向调节电位器,检测距离减少,有效距离范围为2~330 传感器模块的输出端口OUT直接与单片机的IO端口连接即可,也可以直接驱动5V继电器的传感器能主动反射红外线进行检测,目标反射率和形状是检测距离的关键。 黑色检测距离最小、白色最大、面积最小的物体距离小、面积大的距离大。 接口:1 VCC外置3.3V-5V电压(可直接连接5v单片机和3.3v单片机); 2 GND外部GND; 调试3 OUT数字输出接口(0和1 )时,请注意不要被黑色遮挡,以免红外线直接吸收回来。 3.STM32程序//主函数# include ' STM 32 F10 x.h ' # include ' bsp _ led.h ' # include ' IR EVA.h ' # include ' bsp _ rccp /*初始化密钥端口*/IREva_GPIO_Config (; 轮询/*键的状态,然后按键时led*/while(1) if(IREVA_scan ) IREVA_gpio_port,IR EVA _ gpio _ pin==IR EVA _ ll }}} //IREva.c红外线屏蔽. c程序# include ' IR EVA.h ' voidireva _ gpio _ config (void ) gpio _ inittypedefgpio _ init Stig //按钮的针脚gpio _ init structure.gpio _ pin=IR EVA _ gpio _ pin; //设置按钮的管脚是浮动输入gpio _ init structure.gpio _ mode=gpio _ mode _ in _ floating; //结构初始化按钮gpio_init(IREVA_gpio_port,GPIO_InitStructure ); } /* *函数名称: IREva_Scan *说明:检测有无按键*输入: GPIOx:x可以是a、b、c,或者E * GPIO_Pin :要读取的端口位*输出: KEY_OFF ()、)、()、()、()、()、()、()、()、()、()、()、()、()、()、endoffile )、() include 'stm32f10x.h'//引脚定义# defineireva _ gpio _ clk RCC _ AP B2 per iph _ gpiob # defineireva _ gpio _ portgpiob # 如果按下KEY_ON=1,KEY_OFF=0*键处于低电平,则将宏设置为KEY_ON=0,KEY_OFF=1即可*/# defineireva _ hi1 # defineiireva #endif //LED.c函数# include ' bsp _ led.h ' void led _ gpio _ config {/* gpio _ init typedef型结构*/* leled /*选择要控制的GPIO引脚*

/GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚速率为50MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化GPIO*/GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);/* 关闭所有led灯*/GPIO_ResetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);}/*********************************************END OF FILE**********************/ //Led.h函数#ifndef __BSP_LED_H#define__BSP_LED_H#include "stm32f10x.h"/* 定义LED连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED引脚 */#define LED1_GPIO_PORT GPIOC /* GPIO端口 */#define LED1_GPIO_CLK RCC_APB2Periph_GPIOC/* GPIO端口时钟 */#define LED1_GPIO_PINGPIO_Pin_3 /* 连接到SCL时钟线的GPIO */#define ON 1#define OFF 0/* 使用标准的固件库控制IO*/#define LED1(a)if (a)GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);elseGPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN)/* 直接操作寄存器的方法控制IO */#definedigitalHi(p,i) {p->BSRR=i;} //输出为高电平#define digitalLo(p,i) {p->BRR=i;} //输出低电平#define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态/* 定义控制IO的宏 */#define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)#define LED1_ON digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)#define LED1_OFF digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)void LED_GPIO_Config(void);#endif /* __LED_H */ //如果使用12M晶振,还需加上设置频率程序,如果报flash错误,需要将stm32f10x_flash.c加入文件#include "bsp_rccclkconfig.h"void HSE_SetSysClk( uint32_t RCC_PLLMul_x ){ErrorStatus HSEStatus;// 把RCC 寄存器复位成复位值RCC_DeInit();// 使能 HSE RCC_HSEConfig(RCC_HSE_ON);HSEStatus = RCC_WaitForHSEStartUp();if( HSEStatus == SUCCESS ){// 使能预取指FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);FLASH_SetLatency(FLASH_Latency_2);RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);// 配置 PLLCLK = HSE * RCC_PLLMul_x RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x); // 使能PLLRCC_PLLCmd(ENABLE);// 等待PLL稳定while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET ); // 选择系统时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while( RCC_GetSYSCLKSource() != 0x08 );}else {/* 如果HSE 启动失败,用户可以在这里添加处理错误的代码 */}}void HSI_SetSysClk( uint32_t RCC_PLLMul_x ){__IO uint32_t HSIStatus = 0;// 把RCC 寄存器复位成复位值RCC_DeInit();// 使能 HSI RCC_HSICmd(ENABLE);HSIStatus = RCC->CR & RCC_CR_HSIRDY;if( HSIStatus == RCC_CR_HSIRDY ){// 使能预取指FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);FLASH_SetLatency(FLASH_Latency_2);RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);// 配置 PLLCLK = HSE * RCC_PLLMul_x RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x); // 使能PLLRCC_PLLCmd(ENABLE);// 等待PLL稳定while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET ); // 选择系统时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while( RCC_GetSYSCLKSource() != 0x08 );}else {/* 如果HSI 启动失败,用户可以在这里添加处理错误的代码 */}}void MCO_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);} #ifndef __BSP_RCCCLKCONFIG_H#define __BSP_RCCCLKCONFIG_H#include "stm32f10x.h"void HSE_SetSysClk( uint32_t RCC_PLLMul_x );void MCO_GPIO_Config(void);void HSI_SetSysClk( uint32_t RCC_PLLMul_x );#endif /*__BSP_RCCCLKCONFIG_H */

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。