stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)

什么是光遮断器?是怎么来用的?我们打开百度来搜索一下,发现百度百科有详细的介绍。
光断续器又称为穿透型光电感应器,光遮断器,光电断续器,光电遮断器,也就是将发光组件与受光组件面对面排列并设置于同一封装内,·利用检测物体通过时会遮光的原理便得以实现检测功能。ROHM将此种穿透型光电感应器称为断续器。
光断续器是什么?
光断续器又称为穿透型光电感应器,光遮断器,光电断续器,光电遮断器,也就是将发光组件与受光组件面对面排列并设置于同一封装内,·利用检测物体通过时会遮光的原理便得以实现检测功能。ROHM将此种穿透型光电感应器称为断续器。
发光组件采用高输出功率及使用寿命长的GaAs红外线发光二极管,而受光组件则主要采用单只光电三极管或殊电IC。
如下图所示:
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第1张图片
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第2张图片
参考:https://baike.baidu.com/item/%E5%85%89%E9%81%AE%E6%96%AD%E5%99%A8/7870713

原理看起来对于不太懂硬件的嵌入式软件工程师来说有点复杂,其实不用担心,市面上已经有现成的模块,对它的识别就像点个灯那么简单的事情。
这类传感器我通常都叫它二值传感器,因为不是0则是1。我使用的模块如下:
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第3张图片
也就是,我们只要读模块引出IO口的电平,为1则说明有物体遮挡,为0表示没有物体遮挡。

一、应用场景

应用场景一、保险柜防盗报警
应用场景二、荧光爆炸物检测擦拭模式,检测纸张是否插入
应用场景三、检测是否有卡片插入终端机器
等等。。。。

二、硬件接口

stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第4张图片
其中-表示接GND,中间接VCC(接3.3-5V均可),S表示模块0-1信号输出,我们将S接在PB8这个IO口。
下面LED是用来调试的,低电平点亮。
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第5张图片

三、stm32CubeMX配置

3.1 配置外部时钟源

stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第6张图片
然后将时钟设置为72MHz
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第7张图片

3.2 配置LED、遮断器IO

stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第8张图片
我们需要读取遮断器IO的电平,所以GPIO的模式为输入模式。
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第9张图片

3.3 生成KEIL工程

stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第10张图片

四、软件编程

/**
  * @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 */
}

五、运行结果

当有物体卡在缝隙中间,灯亮。
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第11张图片
当没有物体在缝隙中间,灯灭。
stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)_第12张图片

你可能感兴趣的:(stm32cubeMX)