资讯详情

STM32CubeMX——光敏电阻检测光照强度

前言

有多少事,总是急;天地转,时间迫。 一万年太长,只争朝夕。-毛泽东《满江红》·郭沫若同志致郭沫若同志


一、简介

这些生产材料具有在特定波长的光照下迅速降低电阻值的特点。这是因为光产生的载流子参与导电,在外部电场的作用下进行漂移,电子奔向电源的正极,从而迅速降低光敏电阻的电阻。

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

是否可以通过旋钮调整 阈值 并改变其阈值,如图所示: 在这里插入图片描述

  • 光敏电阻对光非常敏感。光线越强,电阻值越低。随着光强度的增加,电阻值迅速降低至1KΩ以下。
  • 光敏电阻的工作原理是基于内部光电效应,即在半导体光敏材料的两端安装电极导线,并将其包装在带透明窗户的管壳中,形成光敏电阻。为了提高灵敏度,两个电极通常被梳成梳状。 在这里插入图片描述
  • 在这里插入图片描述

二、原理

我使用的模块只有三个引脚,其他不同类型的模块可能有四个引脚。相比之下,会有更多的引脚DO(数字输出)。 这三个引脚分别是VCC、GND、AO,简介图中已标明了具体的引脚。

  • VCC:接电源正极 3.3~5V;
  • GND:接地;
  • AO :连接模拟输出;(模数转换器通道 ADC1_IN0 对应I/O口 :PA0)

光敏模块接口 STM32的IO口 设置的工作模式
VCC VCC(3.3V) -
GND GND -
AO(S:Sign) PA0 GPIO_Mode_IPU(上拉输入模式)
- PA9 TX(USART1 串口1通信。
- PA10 RX(USART1 串口1通信。

光敏电阻收集的模拟量:

STM32F1的AD采样结果为12位,即采样最大值为4096(即2的12次方),参考电压3.3V,所以3.3V对应4096,当然,3.3V只是理想状态,实际上可能有轻微的偏差。假设单片机AD采集引脚电压为x,实际单片机的参考电压为z伏,读取AD值与x对应关系如下: 在这里插入图片描述 分析温度采集电路中电压值与电阻值的关系: 在这里插入图片描述 在这里插入图片描述 可以得出两个等式联立AD与电阻的关系:y = 1000 * AD / 4096 -AD在这里插入图片描述


三、新建工程

1.打开STM32CubeMX点击新建工程软件

2. 选择 MCU 和封装

3.配置时钟

我的博客网站-RCC学习

4.调试模式的配置

5.串口(USART1)配置

在这里插入图片描述

6.ADC配置

  • Analog中选择ADC1以规则通道为例,设置打开通道0(IN0),将ADC1的通道0(IN0)对应的引脚(PA0)光敏电阻AO引脚用杜邦线连接,接收模拟量。

7.生成代码

输入项目名称和路径。 选择应用的IDE,开发环境MDK-ARM V5

  • 所有初始化代码都生成在 main.c
  • 初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。

8.构建工程

芯片进行选择: 在这里插入图片描述


四、编写代码

main.c文件中,添加一下代码:

  • 重写fgetfput函数:,添加头文件<stdio.h>在这里插入图片描述
/* USER CODE BEGIN Includes */#include<stdio.h>/* USER CODE END Includes */
/**  * 函数功能: 重定向c库函数printf到DEBUG_USARTx  * 输入参数: 无  * 返 回 值: 无  * 说    明:无  */int fputc(int ch, FILE *f){  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);  return ch;} /**  * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx  * 输入参数: 无  * 返 回 值: 无  * 说    明:无  */int fgetc(FILE *f){  uint8_t ch = 0;  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);  return ch;}
  • 定义变量:接收数据;
  /* USER CODE BEGIN 1 */  int Val;    //定义一个变量表示光照强度    /* USER CODE END 1 */
  • 对ADC进行代码具体操作:
  /* Infinite loop */  /* USER CODE BEGIN WHILE */  while (1)  {    /* USER CODE END WHILE */    /* USER CODE BEGIN 3 */    HAL_ADC_Start(&hadc1);        HAL_ADC_PollForConversion(&hadc1 ,50);        if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))    {      Val = HAL_ADC_GetValue(&hadc1);    }        printf("光照强度:%d \r\n",Val);    HAL_Delay(1000);      }  /* USER CODE END 3 */

五、实验结果

在这里插入图片描述

谢谢阅读!!!

在这里插入图片描述

标签: rx20电阻用做什么电路里光敏电阻的阻值随光电容笔导电橡胶涩

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台