用发光二极管和光敏电阻怎样组成一组光电开关啊,能在什么环境下使用啊?急求使用avr电路与程序,谢谢

用发光二极管和光敏电阻怎样组成一组光电开关啊,能在什么环境下使用啊?急求使用avr电路与程序,谢谢,第1张

常用的是将光敏电阻放在三极管基极,和另一上拉电阻分压,根据光线的强弱不同可导通和接至。如果用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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8281519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存