光敏电阻传感器详解(STM32)

ops/2024/9/23 9:30:58/

  目录

一、介绍

二、传感器原理

1.光敏电阻传感器介绍

2.原理图

三、程序设计

main.c文件

ldr.h文件

ldr.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光电导探测器。 入射光强,电阻减小,入射光弱,电阻增大。常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)

 以下是光敏电阻传感器的参数:

型号

5516

最大电压

150VDC

最大功耗

90MW

环境温度

-30~70

光谱峰值

540nm

亮电阻

5~10kΩ

暗电阻

0.5MΩ

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1zT421k7Dh/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、传感器原理

1.光敏电阻传感器介绍

使用光敏电阻构成光线亮度传感器模块,有3针和4针两种选择。比较器输出,信号干净,波形好,驱动能力强,超过15mA。配可调电位器可调节检测光线亮度

传感器参数:

工作电压

3.3V~5V

输出形式

D0开关量(0/1)或

A0模拟量(电压)

PCB尺寸

3.2cm×1.4cm

比较器型号

LM393

光敏电阻型号

5516

2.原理图

  以下是引脚描述:

引脚名称

描述

VCC

供给电压3~5V

GND

地线

D0

开关信号

A0

模拟信号

三、程序设计

1.使用STM32F103C8T6读取光敏电阻传感器采集的数据,通过串口发送至电脑

2.将读取得到的光照数据同时在OLED上显示

光敏

PA0

OLED_SCL

PB11

OLED_SDA

PB10

串口

串口1

 

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "LDR.h"
#include "adcx.h"/*****************辰哥单片机设计******************STM32* 项目			:	光敏传感器实验                     * 版本			: V1.0* 日期			: 2024.8.9* MCU			:	STM32F103C8T6* 接口			:	参看LDR.h							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************/u16 light;int main(void)
{ SystemInit();//配置系统时钟为72M	delay_init(72);LED_Init();LED_On();LDR_Init();USART1_Config();//串口初始化OLED_Init();printf("Start \n");delay_ms(1000);//显示“光照强度:”OLED_ShowChinese(0,0,0,16,1);OLED_ShowChinese(16,0,1,16,1);OLED_ShowChinese(32,0,2,16,1);OLED_ShowChinese(48,0,3,16,1);OLED_ShowChar(64,0,':',16,1);while (1){LED_Toggle();light = LDR_LuxData();printf("光照强度: %d\r\n",light);OLED_ShowNum(80,0,light,3,16,1);delay_ms(500);}
}

ldr.h文件

#ifndef __LDR_H
#define	__LDR_H
#include "stm32f10x.h"
#include "adcx.h"
#include "delay.h"
#include "math.h"/*****************辰哥单片机设计******************STM32* 文件			:	光敏传感器h文件                   * 版本			: V1.0* 日期			: 2024.8.9* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************/#define LDR_READ_TIMES	10  //光照传感器ADC循环读取次数/***************根据自己需求更改****************/
// LDR GPIO宏定义
#define		LDR_GPIO_CLK							RCC_APB2Periph_GPIOA
#define 	LDR_GPIO_PORT							GPIOA
#define 	LDR_GPIO_PIN							GPIO_Pin_0
/*********************END**********************/// ADC 通道宏定义
#define   ADC_CHANNEL               ADC_Channel_0//#define    ADC_IRQ                       ADC3_IRQn
//#define    ADC_IRQHandler                ADC3_IRQHandlervoid LDR_Init(void);
uint16_t LDR_Average_Data(void);
uint16_t LDR_LuxData();#endif /* __ADC_H */

ldr.c文件

#include "LDR.h"/*****************辰哥单片机设计******************STM32* 文件			:	光敏传感器c文件                   * 版本			: V1.0* 日期			: 2024.8.9* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************/void LDR_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd (LDR_GPIO_CLK, ENABLE );	// 打开 ADC IO端口时钟GPIO_InitStructure.GPIO_Pin = LDR_GPIO_PIN;					// 配置 ADC IO 引脚模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		// 设置为模拟输入GPIO_Init(LDR_GPIO_PORT, &GPIO_InitStructure);				// 初始化 ADC IOADCx_Init();}uint16_t LDR_ADC_Read(void)
{//设置指定ADC的规则组通道,采样时间return ADC_GetValue(ADC_CHANNEL, ADC_SampleTime_55Cycles5);
}uint16_t LDR_Average_Data(void)
{uint32_t  tempData = 0;for (uint8_t i = 0; i < LDR_READ_TIMES; i++){tempData += LDR_ADC_Read();delay_ms(5);}tempData /= LDR_READ_TIMES;return (uint16_t)tempData;
}uint16_t LDR_LuxData()
{float voltage = 0;	float R = 0;	uint16_t Lux = 0;voltage = LDR_Average_Data();voltage  = voltage / 4096 * 3.3f;R = voltage / (3.3f - voltage) * 10000;Lux = 40000 * pow(R, -0.6021);if (Lux > 999){Lux = 999;}return Lux;
}//void LDR_LuxData(uint16_t *Lux)
//{
//	float voltage = 0;	
//	float R = 0;	
//	voltage = LDR_Average_Data();
//	voltage  = voltage / 4096 * 3.3f;
//	
//	R = voltage / (3.3f - voltage) * 10000;
//		
//	*Lux = 40000 * pow(R, -0.6021);
//	
//	if (*Lux > 999)
//	{
//		*Lux = 999;
//	}
//}

四、实验效果 

五、资料获取

项目分享


http://www.ppmy.cn/ops/103585.html

相关文章

STM32 - 笔记3

1 开发有基于寄存器和HAL库 在开发 STM32 系列微控制器时&#xff0c;你可以选择基于寄存器的开发方法或使用 STM32 HAL&#xff08;硬件抽象层&#xff09;库进行开发。两者各有优缺点&#xff0c;适用于不同的场景和开发需求。下面详细介绍两种方法的特点、使用场景以及示例…

0基础学习spark

零、pyspark模板 import os from pyspark import SparkContext, SparkConf os.environ[SPARK_HOME] /export/server/spark os.environ[PYSPARK_PYTHON] /root/anaconda3/bin/python3 os.environ[PYSPARK_DIRVER_PYTHON] /root/anaconda3/bin/python3 if __name__ __main__:…

Python爬虫(一文通)

Python爬虫&#xff08;基本篇&#xff09; 一&#xff1a;静态页面爬取 Requests库的使用 1&#xff09;基本概念安装基本代码格式 应用领域&#xff1a;适合处理**静态页面数据和简单的 HTTP 请求响应**。 Requests库的讲解 含义&#xff1a;requests 库是 Python 中一个…

.NET Razor类库 - 静态资源组件化

1. 找到Razor类库 打开VS2022 文件 - 新建 - 项目 或者 使用 CtrlShiftN 快捷键 输入Razor 搜索 &#xff0c; 选中Razor类库&#xff0c; 点击 下一步2.创建Razor类库项目 输入项目名称 IX.RCL.Front RCL 是 RazorClassLibrary的简称意思 Front 代表前端静态资源的意思 位…

Python中的“break”与“continue”:控制循环的艺术

引言 在日常编程任务中&#xff0c;我们经常遇到需要根据某些条件提前终止循环或跳过当前迭代的情况。这时&#xff0c;break和continue就显得尤为重要了。它们不仅能够简化代码结构&#xff0c;提高程序效率&#xff0c;还能让我们编写出更加灵活、易读性更高的代码。接下来&…

OSPF路由协议详解

基本信息 开放式最短路径优先&#xff08;Open Shortest Path First&#xff0c;OSPF&#xff09;是广泛使用的一种动态路由协议&#xff0c;它属于链路状态路由协议&#xff0c;具有路由变化收敛快、无路由环路、支持变长子网掩码&#xff08;VLSM&#xff09;和汇总、层次区…

大数据5v特性、集群、分布式

目录 数据分析六部曲 大数据的特点 &#xff08;5v特征&#xff09; 分布式与集群的区别 常用的分布式方案 数据分析六部曲 明确分析目的和思路&#xff1a;确保分析框架的体系化和逻辑性&#xff0c;简单来说就是先分析什么&#xff0c;后分析什么&#xff0c;使得各个分析…

Spark on YARN

Apache Spark 和 Apache Hadoop YARN 是两个紧密相关的项目&#xff0c;它们经常一起使用来处理大规模数据集。下面我将解释 Spark 如何与 YARN 配合工作&#xff0c;以及如何在 YARN 上运行 Spark 应用程序。 Apache Spark Apache Spark 是一个快速通用的大规模数据处理引擎…