20.光敏传感器

1.光敏传感器介绍:

  • 光敏二极管(光敏电阻),作为光敏传感器;光敏二极管也称光电二极管;
  • 光敏二极管与半导体二极管在结构上类似,其管芯是一个具有光敏特征的PN结,具有单向导电性,因此工作时需要加上反向电压。无光照时,有很小的饱和和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成了光电流,它随入射光强度的变化而变化。
  • 利用这个电流变化,可以串接一个电阻,就可以转换成电压的变化,从而通过ADC读取电压值,判断外部光线的强弱;
  • 光敏传感器是利用光敏元件,将光信号转换为电信号的一种传感器;

2.光敏传感器实验:

功能实现:通过ADC3通道6采集光敏传感器的AD值,并将该值转换为光照强度值0-100,0对应最暗。100对应最亮,并通过串口1输出光照强度值,LED0指示灯闪烁提示系统正常运行。

(1)原理图:

  

(2)主函数:

#include "delay.h"
#include "led.h"
#include "usart1.h"
#include "ldr.h"int main(){u8 i=0;    int LIGHT_VALUE=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置分组delay_init();                                        //延时初始化LED_Init();  usart1_Init(9600);                                   //串口通信初始化LDR_Init();                                          //光敏传感器初始化while(1){i++;if(i%20==0){LED0=!LED0;}delay_ms(10);if(i%100==0){LIGHT_VALUE+=Get_LDR_Value();           //获取光照强度值printf("当前光照强度值:%d \r\n",LIGHT_VALUE);printf("\r\n");}}       
}

(3)头文件:
 

#ifndef __LDR_H
#define __LDR_Htypedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;void LDR_Init(void);                         //光敏传感器初始化
u16 Get_ADC3_Value(u8 ch,u8 times);          //获取ADC3的值
u8 Get_LDR_Value(void);                      //获取光照强度值#endif

(4)光敏传感器功能函数:

#include "stm32f10x.h"
#include "delay.h"
#include "ldr.h"/*功能:光敏传感器初始化变量:无返回值:无
*/
void LDR_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;ADC_InitTypeDef ADC_InitStruct;//1.使能端口时钟和ADC时钟,设置引脚模式RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF|RCC_APB2Periph_ADC3,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;                    //模拟输入GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;                        //PF8GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOF,&GPIO_InitStruct);//2.设置ADC的分频因子RCC_ADCCLKConfig(RCC_PCLK2_Div6);//3.初始化ADC参数ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;                                      //不连续转换ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;                                   //右对齐ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;                      //不使用外部触发,使用软件触发ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;                                       //独立模式ADC_InitStruct.ADC_NbrOfChannel=1;                                                  //通道数量ADC_InitStruct.ADC_ScanConvMode=DISABLE;                                            //不扫描ADC_Init(ADC3,&ADC_InitStruct);//4.使用ADC校准ADC_Cmd(ADC3,ENABLE);                                          //使能ADC3ADC_ResetCalibration(ADC3);                                    //复位校准while(ADC_GetResetCalibrationStatus(ADC3));                    //判断复位校准是否完成ADC_StartCalibration(ADC3);                                    //开启校准while(ADC_GetCalibrationStatus(ADC3));                         //判断开启校准是否完成//5.开启软件触发ADC_SoftwareStartConvCmd(ADC3,ENABLE);}/*功能:获取ADC3的值变量:ch:通道       times:获取次数返回值:ADC滤波后的值*/
u16 Get_ADC3_Value(u8 ch,u8 times)
{u8 i=0;u32 LDR_Val=0;             //存储获取到的ADC值ADC_RegularChannelConfig(ADC3,ch,1,ADC_SampleTime_239Cycles5);    //配置ADC规则通道for(i=0;i<times;i++){ADC_SoftwareStartConvCmd(ADC3,ENABLE);                         //开启软件触发while(!ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));                  //判断规则组转换是否完成LDR_Val+=ADC_GetConversionValue(ADC3);                         //获取ADC3的值delay_ms(10);}return LDR_Val/times;                                             //将所获得的ADC值进行滤波}/*功能:获取光照强度值变量:无返回值:光照强度值*/#define LIGHT_READ_TIMES      20             //采集ADC3的次数
u8 Get_LDR_Value()
{u8 i=0;u32 light_val=0;                          //存储关照强度值for(i=0;i<LIGHT_READ_TIMES;i++){light_val+=Get_ADC3_Value(ADC_Channel_6,LIGHT_READ_TIMES);        //获取ADC3采集的值delay_ms(10);}light_val/=LIGHT_READ_TIMES;        //将获取的ADC值进行滤波if(light_val>4000){light_val=4000;                  //将大于4000的值都设置为4000}return (100-light_val/40);          //返回光照强度值(0~4000,设置笑死范围[0,100]中)}

(5)实验结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13148.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux性能优化实践——如何学习Linux性能优化

性能指标 学习性能优化的第一步便是了解“性能指标”这个概念。 “高并发”和“响应快”对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的角度来考察性能的&#xff0c;直接影响了产品终端的用户体验。跟他们对应的&#xff0c;是从系统资源的视…

前后端实现mqtt物联网消息互通对话(图文详解)

需求&#xff1a;前端使用mqtt订阅主题和硬件设备进行通讯功能&#xff0c;不走后端&#xff0c;前端操作可以控制。从部署到对话&#xff0c;跟着图文一套下来你也可以学会。很简单的。后端用node&#xff0c;前端就用原生的js&#xff0c;如果要使用vue&#xff0c;可以看我另…

LabVIEW脉冲检测实现

文章目录 前言一、脉冲检测的原理二、代码实现1、前面板①、输入波形相关参数②、脉冲检测结果 2、程序框图 三、代码自取结论 前言 本节通过 labview 软件实现先导脉冲检测的功能&#xff0c;从而获取先导脉冲的频率、先导脉冲与线性调频信号的延时的相关信息。 一、脉冲检测…

网站制作(道歉)

王心怡* , 张钊* (淮北师范大学计算机科学与技术学院&#xff0c;安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. &#x1f31e;欢迎来到数据结构的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎…

Docker深入

一、简介 Docker是一个用于构建、运行、传送应用程序的平台。 2、为什么使用Docker 在部署服务器过程中&#xff0c;配置各种环境变量、第三方依赖等等&#xff0c;耗费时间太长&#xff0c;使用Docker可以将他们打包成一个集装箱&#xff0c;只要在开发环境中运行成功&…

[SSM]MyBatis查询语句与动态SQL

目录 十、MyBatis查询语句专题 10.1返回Car 10.2返回List 10.3返回Map 10.4返回List 10.5返回Map,map> 10.6resultMap结果映射 使用resultMap进行结果映射 是否开启驼峰命名自动映射 10.7返回总记录条数 十一、动态SQL 11.1 if标签 11.2 where标签 11.3 trim标…

【Python】Selenium操作cookie实现免登录

文章目录 一、查看浏览器cookie二、获取cookie基本操作三、获取cookie并实现免登录四、封装成函数 一、查看浏览器cookie cookie、session、token的区别&#xff1a; cookie存储在浏览器本地客户端&#xff0c;发送的请求携带cookie时可以实现登录操作。session存放在服务器。…

户外运动耳机推荐,盘点最适合运动时佩戴的五款耳机

音乐能有效地激发人体潜能&#xff0c;充分释放能量&#xff0c;达到更好的运动效果&#xff0c;因此对于运动爱好者来说&#xff0c;一个合适的运动耳机至关重要。面对产品种类众多的运动耳机&#xff0c;很多人都会感到迷茫&#xff0c;经常有人问“有什么适合运动的时候佩戴…

【成都】EFDC建模方法、SWAT模型高阶研修

EFDC建模方法及在地表水环境评价、水源地划分、排污口论证应用 为了定量地描述地表水环境质量与污染排放之间的动态关系&#xff0c;EFDC、MIKE、Delft3D、Qual2K等数值模型被广泛应用在环境、水务、海洋等多个领域。Environmental Fluid Dynamics Code&#xff08;EFDC&#…

STM32的ADC模式及其应用例程介绍

STM32的ADC模式及其应用例程介绍 &#x1f4cd;ST官方相关应用笔记介绍资料&#xff1a;https://www.stmcu.com.cn/Designresource/detail/application_note/705947&#x1f4cc;相关例程资源包&#xff1a;STSW-STM32028&#xff1a;https://www.st.com/zh/embedded-software/…

微信小程序使用第三方组件wxParse加载富文本html

微信小程序使用第三方组件wxParse加载富文本html 微信小程序微信小程序加载富文本html微信小程序富文本第三方组件wxParsewxParse富文本html wxParse简介 wxParse 是一个微信小程序富文本解析组件&#xff0c;支持支持Html及markdown转wxml。 wxParse gitHub地址&#xff1…

ARM中断实验

#ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//对RCC/GPIO/EXTI章节的初始化 void hal_key1_exti_init();//对GIC的初始…