一、光敏传感器简介

光敏传感器是最常见的传感器之一,它的种类繁多,主要有:光电管、光电倍增管、光敏电阻、光敏三极管、太阳能电池、红外线传感器、紫外线传感器、光纤式光电传感器、色彩传感器、CCD 和 CMOS 图像传感器等。光传感器是目前产量最多、应用最广的传感器之一,它在自动控制和非电量电测技术中占有非常重要的地位。
**光敏传感器是利用光敏元件将光信号转换为电信号的传感器,它的敏感波长在可见光波长附近,包括红外线波长和紫外线波长。**光传感器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号的变化即可。
精英 STM32F103 板载了一个光敏二极管(光敏电阻),作为光敏传感器,它对光的变化非常敏感。

光敏二极管也叫光电二极管。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的 PN结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN 结时,可以使 PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。利用这个电流变化,我们串接一个电阻,就可以转换成电压的变化,从而通过 ADC 读取电压值,判断外部光线的强弱。

二、硬件设计

本实验用到的硬件资源有:
1) 指示灯 DS0
2) TFTLCD 模块
3) ADC
4) 光敏传感器

图中,LS1 是光敏二极管(实物在开发板摄像头接口右侧),R29 为其提供反向电压,当环境光线变化时,LS1 两端的电压也会随之改变,从而通过 ADC3_IN6 通道,读取LIGHT_SENSOR(PF8)上面的电压,即可得到环境光线的强弱。
光线越强,电压越低,光线越暗,电压越高。

三、软件设计

代码:

#include "lsens.h"
#include "delay.h"//初始化光敏传感器
void Lsens_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);//使能PORTF时钟    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//PF8 anolog输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;      //模拟输入引脚GPIO_Init(GPIOF, &GPIO_InitStructure);  Adc3_Init();
}
//读取Light Sens的值
//0~100:0,最暗;100,最亮
u8 Lsens_Get_Val(void)
{u32 temp_val=0;u8 t;for(t=0;t<LSENS_READ_TIMES;t++){temp_val+=Get_Adc3(LSENS_ADC_CHX);    //读取ADC值delay_ms(5);}temp_val/=LSENS_READ_TIMES;//得到平均值 if(temp_val>4000)temp_val=4000;return (u8)(100-(temp_val/40));
}
#ifndef __LSENS_H
#define __LSENS_H
#include "sys.h"
#include "adc.h" #define LSENS_READ_TIMES 10      //定义光敏传感器读取次数,读这么多次,然后取平均值
#define LSENS_ADC_CHX       ADC_Channel_6   //定义光敏传感器所在的ADC通道编号void Lsens_Init(void);               //初始化光敏传感器
u8 Lsens_Get_Val(void);             //读取光敏传感器的值
#endif
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "adc.h"
#include "lsens.h"int main(void){  u8 adcx; delay_init();          //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级uart_init(115200);     //串口初始化为115200LED_Init();               //初始化与LED连接的硬件接口LCD_Init();             //初始化LCDLsens_Init();           //初始化光敏传感器POINT_COLOR=RED;//设置字体为红色    //显示提示信息                                                  LCD_ShowString(30,50,200,16,16,"Elite STM32");  LCD_ShowString(30,70,200,16,16,"LSENS TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,"2015/1/14");    POINT_COLOR=BLUE;//设置字体为蓝色LCD_ShowString(30,130,200,16,16,"LSENS_VAL:");                while(1){adcx=Lsens_Get_Val();LCD_ShowxNum(30+10*8,130,adcx,3,16,0);//显示ADC的值 LED0=!LED0;delay_ms(250); }
}

四、实验结果


伴随 DS0 的不停闪烁,提示程序在运行。此时光照越强,该值越大,光照越弱,该值越小。

STM32学习笔记(六 定时器及应用 4 光敏传感器实验 )相关推荐

  1. STM32学习笔记之定时器(2)

    文章结构: --> 一.定时器基本介绍 --> 二.普通定时器详细介绍TIM2-TIM5 --> 三.定时器代码实例 一.定时器基本介绍  之前有用过野火的学习板上面讲解很详细,所以 ...

  2. stm32学习笔记-6TIM定时器

    6 TIM定时器 文章目录 6 TIM定时器 6.1 TIM定时中断原理 6.2 TIM定时中断相关实验 6.2.1 实验:定时器定时中断-内部时钟 6.2.2 实验:定时器定时中断-外部时钟 6.3 ...

  3. STM32学习笔记——通用定时器的PWM介绍及配置

    脉冲宽度调制(PWM),是英文"Pulse Width Modulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是 ...

  4. stm32学习笔记 TIM定时器中断1.定时器基本定时功能(含代码)

    TIM定时器分四个部分 目录 一.定时器基本定时功能 二.定时器输出比较功能 三.定时器输入捕获功能 四.定时器编码接口 一.定时器基本定时功能 RCC时钟树 SystmInit函数 外部晶振出问题会 ...

  5. STM32学习笔记 高级定时器TIM1TIM8 14

    高级定时器TIM1&TIM8 TIM1和TIM8简介 高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动 它适合多种用途,包含测量输入信号的脉冲 ...

  6. STM32学习笔记 通用定时器TIM3~TIM5 13

    通用定时器TIM3~TIM5 TIM3~TIM5简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成. 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出 ...

  7. STM32学习笔记(十九)RTC实时时钟实验

    STM32F103ZET6之RTC实时时钟实验 文章目录 STM32F103ZET6之RTC实时时钟实验 前言 一.简介 二.相关寄存器及配置过程 三.程序源码 1.rtc.h 2.rtc.c 3.m ...

  8. STM32 学习笔记 -- 基于stm32f4的看门狗配置和实验代码

    基于stm32f4的看门狗配置和实验代码 以下本人对stm32f4xx的独立看门狗和窗口看门狗学习.理解和总结,程序的说明和解释均在注释中,仔细阅读不难理解.我已经过验证,有问题或错误请指出. 版权声 ...

  9. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

最新文章

  1. Javascript模块化编程(三):require.js的用法
  2. WPF 提供了以下关键帧动画类[msdn]
  3. 那些年,我们踩过的 Java 坑
  4. 2013\Province_Java_C\1.猜年龄
  5. 在多个的共享ndk项目之间共享模块
  6. unicode 编解码记录
  7. 68 SD配置-发票凭证配置-定义出具发票类型
  8. java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
  9. Pandas之DataFrame的简单使用
  10. 恢复出厂设置后itms注册失败_手机恢复出厂设置后,与新手机的区别已被确认,望大家相互转告!...
  11. 第一章,安装 composer
  12. Python学习笔记--Python字符串连接方法总结
  13. FANUC系统开发API(FOCAS2)pc应用开发,机加工领域
  14. Mac pip安装allennlp
  15. 计算机主机风扇安装方法,散热风扇怎么装 电脑机箱散热风扇安装图解教程 (全文)...
  16. linux(ubuntu)下实现鼠标侧键映射双击、鼠标中键 快捷键的方法—— 使用xbindkeys
  17. 疫情过后,制造业中小企业应用工业互联网数字化转型之路的探讨
  18. Nazo前三十三关攻略
  19. 计算字符串出现的次数
  20. php下lua的运行,phpStudy中起用lua脚本

热门文章

  1. 支付中心,防止重复支付的一些思路!
  2. 【解决方案】阿里企业云邮箱 报错 526 Authentication failure[0]
  3. 计算机word怎么选中全文,word选定全文快捷键是什么
  4. 荐书 | 从启蒙到进阶,值得推荐的五本少儿编程
  5. php+laravel+百度智能云人脸识别详解
  6. MySQL学习:修改和删除数据表字段
  7. 清理yum源缓存_缓存是万恶之源
  8. 剑门高级中学2021年高考成绩查询,剑门关高级中学2021年高中部入学条件是什么?...
  9. picgo免费搭建个人图床
  10. IDEA使用Tomcat