概述
光敏传感器
将光信号转换成电信号
敏感波长在可见光波长附近,包括红外波长和紫外波长
种类多 ,光电管、光电倍增管、光敏电阻、光敏三极管、太阳能电池、红外线传感器、紫外线传感器、光纤式光电传感器、色彩传感器、CCD和CMOS图像传感器等
光传感器是目前产量最多、应用最广的传感器之一,它在自动控制和非电量电测技术中占有非常重要的地位。
光敏二极管
光敏二极管也叫光电二极管
与半导体二极管类似,其管芯是一个具有光敏特征的PN结,具有单向导电性,工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN结时,可以使PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。
简而言之:照射光敏二极管的光强不同,通过光敏二极管的电流大小就不同
利用这个电流变化,串接一个电阻,就可以转换成电压的变化,通过ADC读取电压值,判断外部光线的强弱。
实验程序
通过ADC3_CH6检测光敏二极管一端电压间接检测光强的目的
初始化光敏传感器
void Lsens_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能PORTF时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//PA7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化
Adc3_Init();//初始化ADC3
}
读取Light Sens的值
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(ADC_Channel_5); //读取ADC值,通道5
delay_ms(5);
}
temp_val/=LSENS_READ_TIMES;//得到平均值
if(temp_val>4000)temp_val=4000;
return (u8)(100-(temp_val/40));
}
main函数
int main(void)
{
u8 adcx;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
LED_Init();
LCD_Init();
Lsens_Init();
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
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,"2021/8/28");
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);
}
}