LED感光检测又一方法
前些时,坛里发表了用LED感光的测试方法,就是利用给LED的结电容反向充电,再测试电荷放电的时间长短来判断无光照还是有光照。下面给出另一个方法:利用AVR的ADC,直接测量LED的光电效应。方法简单至极:用一个透明封装的LED:红绿均可,正极接ADC口,例如PC3,负极接地。然后进行ADC转换即可。程序没有特别之处。等一会上效果图。 占位 哦?好东西哦 http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_454448.jpg近窗荫处 (原文件名:led1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_454449.jpg
节能灯照射 (原文件名:led2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_454450.jpg
手指遮挡 (原文件名:led3.jpg) 不错....支持一下 占位.学习. 简单就是最好的
我早有此想法 而没试验 好东西,等会俺也试一下~ copy 等程序看看~早些时候也考虑过这个方法 这个方法确实简单实用,支持一下。 刚刚做了试验 以下是许许多多的数据之一:
00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 04 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 07 FF FF 00 08 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 05 FF FF 00 09 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 0B FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0B FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 10 FF FF 00 03 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 0D FF FF 00 03 FF FF 00 00 FF FF 00 00 FF FF 00 0D FF FF 00 0E FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 10 FF FF 00 0F FF FF 00 00 FF FF 00 00 FF FF 00 06 FF FF 00 0E FF FF 00 04 FF FF 00 00 FF FF 00 00 FF FF 00 06 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 0B FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 06 FF FF 00 04 FF FF
FF FF是分界
03以下是 手不遮
06以上是 手遮
然后 中间有些00 00以上是每隔1秒测一次的数 又做一次 100ms测一次 因为室内 光线 太暗了 (当前时间是17:53 天又下雨 )
前一半是手不遮
后一半是手遮
可以看出来 后半偶有出现大于5 的 前面偶有小于4 的
00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 04 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 06 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 04 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 04 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 04 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 03 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 04 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 05 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 05 FF FF 00 08 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 07 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 04 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 09 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 10 FF FF 00 07 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 0C FF FF 00 02 FF FF 00 00 FF FF 00 00 FF FF 00 07 FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 0E FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0F FF FF 00 08 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 09 FF FF 00 03 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 09 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0F FF FF 00 07 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 0A FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0F FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0B FF FF 00 04 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 0C FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 07 FF FF 00 0A FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0A FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0B FF FF 00 05 FF FF 00 00 FF FF 00 00 FF FF 00 01 FF FF 00 0A FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0A FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 09 FF FF 00 04 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 09 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 09 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0A FF FF 00 0B FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 06 FF FF 00 00 FF FF 00 00 FF FF 00 02 FF FF 00 0C FF FF 00 01 FF FF 00 00 FF FF 00 00 FF FF 00 03 FF FF 00 09 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0C FF FF 00 0C FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 0E FF FF 00 06 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 太乱了...建议按数值大小显示不同颜色..哈哈.. 学习! 临时搭了一个,大概0.xS测一次,使用串口助手查看。
拿灯照着大概800+。
平常400到800左右不固定。
拿手捂了一会,怎么会出现800+和0交替出现呢?(AD采样不对?二极管特性?)
一下是俺的程序:
//===========================================================
/*
//By: SlowHand
*/
#include "iom16v.h"
#include <macros.h>
#define AD_FLAG (1 << ADIF)
#define AD_SC (1 << ADSC)
#define AD_EN (1 << ADEN)
void UartInit(void){
UCSRB = 0x00; //Close usart
UCSRA = 0x02; //Document page151
UCSRC = 0x06; //Write UCSRC,set 8 bit
UBRRH = 0x00;
UBRRL = 0x0C; //BAUD 9600(1M->0C;6M->4D)
UCSRB = 0x98; //open usart ,enable transmit and receive
}
void SetUpPort(void){
DDRA = 0x00;//(0->input; 1->output)
PORTA = 0x00;//low voltage
DDRB = 0xFF;//output
PORTB = 0xFF;//high
DDRC = 0xFF;
PORTC = 0xFF;
DDRD = 0xFF;
PORTD = 0xFF;
}
unsigned int GetAD(void) {
unsigned int tmp_AD;
ADMUX = 0xC6; // 1100 0xxx AREF(INNER); align(right); AD port(6)
ADCSRA = 0xC4; // 1100 0100 frequency( 1M / 16 = 62.5K )
while(!(ADCSRA & AD_FLAG)) _NOP(); //Wait for AD ready flag set(when ADIF Bit = 0)
for(tmp_AD=0x20; tmp_AD; tmp_AD--) _NOP(); //Delay time
tmp_AD = ADC;
ADCSRA &= ~AD_FLAG; //clear flag(set ADIF Bit = 1)
ADCSRA &= ~AD_SC; //Close A-D convert
return tmp_AD;
}
void Uart_Transmit(unsigned char i) {
while (!(UCSRA & (1<<UDRE)));//wait till null
UDR = i;//send data
}
void main(void){
unsigned int i;
char str;
SetUpPort();
UartInit();
while(1){
for(i=0; i<0xFFFF; i++){ _NOP(); }
Uart_Transmit( 'A' );
Uart_Transmit( 'D' );
Uart_Transmit( ':' );
itoa( str, GetAD(), 10 );
for(i=0; i<8; i++){
if( str == '\0' ) break;
Uart_Transmit( str );
}
Uart_Transmit( '\n' );
}
} 顶下 记号,有时间试试 建议lz用坛子里串口示波器 如果把led反向接,效果有不同了,透明封装红色管:负极接ADC,正极接地,不强的光照:000,遮光:50以上,用黑色笔套全遮住达到200以上 新手看不懂只能好奇 【19楼】 AAVVRR如果把led反向接
-----正向反向我都试验了 唯没有透明封装的 用3mm的红发红的 透明白光LED,反接。
大概0.5S连续采8次,貌似还是不行。
(在VTG,ADC,GND之间串可调电阻实验,数值稳定。)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_455451.jpg
前半段有光,后半段拿手捂住。
俺还是去找点计算放电时间的例子试试了。 有时间试试 【21楼】 zhwm3064 沉伦蜗牛
一定要透明封装的,有色封装恐怕不行
【22楼】 slowhand
这个东西好像反应较慢,我现在2Mz主频,1024分频t/c0中断时间131毫秒,按照8次中断转换一次也就要1秒多,可是发现遮挡时要几秒钟读数才能稳定下来,还是转换间隔太长?是不是lcd结电容没有放电回路的关系,不过无论如何,变化还是明显的 以下使用透明封装红色高亮lcd试验:
位置:朝北的飘窗,普通绿玻璃,2/3窗帘遮住,阴天上午10点,电脑桌距离窗子1米,led负极接m8的PC3,正极接地:
几次试验如下图:
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_455471.jpg
完全无遮挡 (原文件名:led11.jpg)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_455472.jpg
手指遮住LED顶部 (原文件名:led12.jpg)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_455473.jpg
用黑色塑料笔套把LED罩住 (原文件名:led13.jpg) mark 俺这里测的数据浮动太大且毫无规律(总体上捂住和没捂住还是有点区别的)。
有几个疑问。(俺硬件很菜)
LED是直接连引脚和地吗?(没有串电阻什么的吧,俺看到另一种测时间的方法串电阻了)
每次AD转换之前,AD口不用先作为输出口置高或置低吧?
俺翻了几个老帖子,用IO口检测时间的方法成功了。
用手捂住竟然得好几秒~囧。 没有串任何电阻,就是直接并在adc和地。没有在转换前置高置低ad口,就是到时间就转换。还有我用arduino程序也做过试验,转换结果通过串口直接上电脑,波动是有,不是特别大。老办法是测量led反向充电后,在不带上拉的输入口放电,有光照很快放电,无光照,放电时间变长,可以作为触摸按钮。这个试过的,就是程序麻烦点。led占用2个口。和这个不一样 顶一顶。。。。 測adc是可行的 不過ad採樣阻抗得比較高
用m8等avr應該可以
但是試過用stm32
貌似不行呵呵 mark mark 吓得我赶紧把64G SSD的数据复制到HDD备份一下 little_Monkey 发表于 2015-10-12 16:43
吓得我赶紧把64G SSD的数据复制到HDD备份一下
不是吧,有什么关系? qingyin2009 发表于 2015-10-12 21:16
不是吧,有什么关系?
额,回错主题了{:sweat:} little_Monkey 发表于 2015-10-12 21:29
额,回错主题了
{:lol:} {:lol:} {:loveliness:} {:loveliness:}
页:
[1]