好好学习,天天向上
- 前言
- 一、了解红外
- 二、标准库的代码
- 1.infrared.c
- 2.infrared.h
- 3.main.c
- 4 现象
- 总结
前言
红外线:频率介于微波与可见光之间的电磁波。
参考如下
【STM32】标准库与HAL库对照学习教程外设篇–红外避障传感器
光电红外传感器详解(STM32) <-这个UP🐖的常见传感器教学系列不错
一、了解红外
红外传感器,又叫循迹模块
对红外光线发射管与红外光线接收管、传感器电路组成,引脚上有VCC、GND、OUT三个引脚。
工作原理是红外光线发射管发射红外光线,红外光线接收管接收红外光线,当没有接收到返回的红外光线时,OUT引脚输出高电平,当接收到返回的红外光线时,OUT引脚输出低电平。
简单来说,就是有障碍物会输出为低电平。
原理图
LM393电压比较器,将红外对管的电压和电位器的电压进行比较,如果没有达到阈值,输出高电平。反之,低电平
二、标准库的代码
1.infrared.c
#include "infrared.h"
//光电传感器-红外对管
void infrared_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//GPIO配置控制 - 读取带电平信号
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = read_HW_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(read_HW_Port, &GPIO_InitStructure);
}
uint16_t infrared_Read(void)
{
uint16_t tempData;
tempData = !GPIO_ReadInputDataBit(read_HW_Port,read_HW_Pin);
return tempData;
}
2.infrared.h
#ifndef __INFRARES_H
#define __INFRARES_H
#include "stm32f10x.h"
#define read_HW_Pin GPIO_Pin_6
#define read_HW_Port GPIOA
void infrared_Init(void);
uint16_t infrared_Read(void);
#endif
3.main.c
点灯不放了,根据实际情况来
/**
******************************************************************************
* @file 通信测试
* @author susocool
* @date 11-October-2024
* @brief 红外对管测试
******************************************************************************
*/
#include "stm32f10x.h"
#include "LED.h"
#include <stdlib.h>
#include "infrared.h"
#include "OLED.h"
int main(void)
{
uint16_t value;
infrared_Init();
OLED_Init();
My_LED_Init();
while(1)
{
value= infrared_Read();
OLED_ShowNum(1,1,value,6);
if(value == 1)
{
My_LED3_ON();
}
else
{
My_LED3_OFF();
}
}
}
4 现象
感觉,他的感知能力很奇怪啦。但是基本实现功能。
总结
我之前用的3.3V,半天没反应,我还以为是坏了,后面切换到5V供给VCC,就可以正常了。未必不是一种思路.
-----2024/10/10