常用的是将光敏电阻放在三极管基极,和另一上拉电阻分压,根据光线的强弱不同可导通和接至。如果用AVR单片机的话感觉有点点浪费,不过还是给你设计下下,用的mega8:
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
/*********定义AD转换通道*********/
#define ADC0 0x00 //ADC0通道
/*********定义档位指示灯及电源指示和新风指示********/
#define LED1_ON PORTC &=~BIT(1)
#define LED1_OF PORTC |= BIT(1)
/**********全局变量定义************/
uchar adc_time = 0 //定义累加时间
uchar adc_num = 0 //用于AD通道选择的计数
uchar vlo_eer = 0 //用于检测光敏电阻的电灯点
unsigned int voltage
unsigned int voltage1
//端口初始化
void port_init(void)
{
PORTB = 0x00
DDRB = 0xFF
PORTC = 0xFE
DDRC = 0xFE
PORTD = 0x00
DDRD = 0xFF
}
// 定时器0分频: 8
// 定时初值 : 100uSec
// 真实定时值 : 100.000uSec (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00//停止定时器
TCNT0 = 0x9C//初始值
//OCR0 唯敏 = 0x9B//匹配值
TIMSK |= 0x01//中断允许
TCCR0 = 0x02//启动定时器
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0x9C //重装100us定时初值
adc_time++
if(adc_time==10) //控制AD转换的速度
{
adc_time=0 //清零AD计数时间
ADCSRA=0xEE //打开AD使能
ADMUX = ADC0 //选择ADC0通道
else
{
ADCSRA= 0x00 //关闭AD转换,这样做的目的是防止
} //AD转换过频而导致系统堵塞
}
// 缓塌ADC初始化
// 转换时间 : 52uS
void adc_init(void)
{
//adc转换初始化
ADCSRA = 0x00 //禁止AD转换
SFIOR |= 0x00
ACSR = 0x80 //禁止模拟比较器
}
unsigned int adc_calc(void)
{
//计算实际电压
unsigned long value=0
unsigned int voltage1=0 //电压单位为(mV)
value=ADCL //首先读低位
value|=(int)ADCH << 8 //然后读高位
voltage1=(value*5000)/1023
return voltage1
}
#pragma interrupt_handler adc_isr:12
void adc_isr(void)
{
//转换完成后中断处理,对电压值进行区间划分
voltage=adc_calc()voltage=adc_calc()
if(voltage<XXX){vol_eer=0} //欠压
if(vol_eer>XXX){vol_eer=1} //过压
//其中XXX是你自己测试的电压值,什么时候亮LED就看他了。
if(vlo_eer==1) LED1_ON
else LED1_OF
}
//初始化服务函数
void init_devices(void)
{
CLI() 指哪枝 //禁止中断
port_init()
timer0_init()
adc_init()
MCUCR = 0x00
MCUCSR = 0x80//禁止JTAG
GICR = 0x00
SEI() //开中断
}
void main(void)
{
init_devices()
while(1)
{
}
}
用途:光线亮度检测,光线亮度传感器,具有方向性,只感应传感器正前方的光源,用于寻光效果更佳
模块特色:
1 可以检测周围环境的亮度和光强度(与光敏电阻比较,方向性比较好哪搭,可以感知固定方向的光源)
2 灵敏度可调(图中蓝色数字电位器调节)
3 工作电压3.3V-5V
4 数字开关量输出(0和1)
5 设有固定螺栓孔,方便安装
6 小板PCB尺寸:3.2cm * 1.4cm
使用说明:
1 光敏二极管模块对环境光强最敏感,一般用来检测周围环境的亮度和光强,在大多数物陪场合可以与光敏电阻传感器模块通用,二者区别在于,光敏二极管模块方向性较好,可以感知固定方向的光源。
2 模块在无光条件或者光强达不到设定阈值时,DO口输出高电平,当外界环境光强超过设定阈值时,模块D0输出低电平;
3 小板数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光强改变;
4 小板数字量输出DO可以直接驱动本店继电器模块,由此可以组成一个光电开关罩缓蠢;
离开等就灭了,很简单的一个小程序。显示屏上是显示的串口01数据
靠近就出0
离开就出1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)