什么是光遮断器?是怎么来用的?我们打开百度来搜索一下,发现百度百科有详细的介绍。
光断续器又称为穿透型光电感应器,光遮断器,光电断续器,光电遮断器,也就是将发光组件与受光组件面对面排列并设置于同一封装内,·利用检测物体通过时会遮光的原理便得以实现检测功能。ROHM将此种穿透型光电感应器称为断续器。
光断续器是什么?
光断续器又称为穿透型光电感应器,光遮断器,光电断续器,光电遮断器,也就是将发光组件与受光组件面对面排列并设置于同一封装内,·利用检测物体通过时会遮光的原理便得以实现检测功能。ROHM将此种穿透型光电感应器称为断续器。
发光组件采用高输出功率及使用寿命长的GaAs红外线发光二极管,而受光组件则主要采用单只光电三极管或殊电IC。
如下图所示:
参考:https://baike.baidu.com/item/%E5%85%89%E9%81%AE%E6%96%AD%E5%99%A8/7870713
原理看起来对于不太懂硬件的嵌入式软件工程师来说有点复杂,其实不用担心,市面上已经有现成的模块,对它的识别就像点个灯那么简单的事情。
这类传感器我通常都叫它二值传感器,因为不是0则是1。我使用的模块如下:
也就是,我们只要读模块引出IO口的电平,为1则说明有物体遮挡,为0表示没有物体遮挡。
一、应用场景
应用场景一、保险柜防盗报警
应用场景二、荧光爆炸物检测擦拭模式,检测纸张是否插入
应用场景三、检测是否有卡片插入终端机器
等等。。。。
二、硬件接口
其中-表示接GND,中间接VCC(接3.3-5V均可),S表示模块0-1信号输出,我们将S接在PB8这个IO口。
下面LED是用来调试的,低电平点亮。
三、stm32CubeMX配置
3.1 配置外部时钟源
然后将时钟设置为72MHz
3.2 配置LED、遮断器IO
我们需要读取遮断器IO的电平,所以GPIO的模式为输入模式。
3.3 生成KEIL工程
四、软件编程
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//如果检测到遮断器IO输出电平为高,则点亮LED灯,否则熄灭
if(GPIO_PIN_SET == HAL_GPIO_ReadPin(Photointerrupter_GPIO_Port,Photointerrupter_Pin))
{
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
}
}
/* USER CODE END 3 */
}
五、运行结果
当有物体卡在缝隙中间,灯亮。
当没有物体在缝隙中间,灯灭。
转载:https://blog.csdn.net/morixinguan/article/details/100577176