迷你强 发表于 2012-7-4 15:18:25

Arduino入门教程--第十一课--Arduino达文西之灯(光敏实验)

大家应该都看过周星驰的《国产007》,里面有一只坑爹的太阳能手电筒,有光才能亮,没光绝对不亮!我们今天只做的达文西之灯的创意就是源自于此,只做一个有光才能亮的LED灯(好吧,我承认这玩意坑爹)。

实验材料


ocrobot mango(Arduino兼容版)一块
面包板一块
面包板专用跳线一盒
光敏三极管   一枚
10K欧姆电阻一枚
任意颜色LED一枚
220欧姆电阻一枚
数据线一根
            
                              
                     










然后我们来搭建实验电路



此次实验的电路略显复杂,我们简单讲解一下,LED部分大家都比较清楚,从13号引脚到地线,中间串接220欧姆的保护电阻,然后就是光敏三极管的部分,光明三极管有凸起的一边为发射极,此端接A0检测口,同时并联一个10K欧姆的分压电阻到地线以扩展光敏三极管的灵敏度(此处电阻越小灵敏度越高)。另一极使用5V输入。

我们来搭建实际电路



搭建好电路我们就开始下载程序了

/*
作者:极客工坊-迷你强
时间:2012年7月4日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:Arduino的光敏实验,有光就会点亮led

*/

int a =300;   //此处需是环境基础亮度变量,请查看自己的亮度数值,
                //填写到此处数值要略大于所测得的数据但小于灯光下的数据
void setup ()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop()
{
int n = analogRead(A0);            //读取模拟口A0数值
Serial.println(n);
if (n>= a )                   //对光线强度进行判断,如果比我们的预设值大 就点亮LED否则就关闭
{
    digitalWrite(13,HIGH);
}
else
{
    digitalWrite(13,LOW);
}
}
本次实验的源代码有个变量需要进行校准,大家应该还记得上次实验的串口管理器的数据输出,本次实验依旧要用到,大家下载好程序后,需要打开串口管理器看一下目前的环境光的数值,然后打开电灯再记录一下数值(数据刷新很快,不需要精确值,只要比他大一些就可以,但是别大于开灯后的数值)。 然后根据您的环境光的数值,来修改我们的基准值。修改后再次下载好程序,就可以体验到传说中有光才能亮的达文西之灯。。

(再次提醒本次实验的参数需要根据您当时的环境光线进行调整的,切记切记~~~!!)
以下是我们的演示视频

http://player.youku.com/player.php/sid/XNDIzNjU3NDU2/v.swf


当然,本次实验这玩意着实没有太大用处,除了好玩,大家可以试着改造程序,搭配些其他的应用,光敏感应还是很有用的。

arduino_ykk 发表于 2013-5-1 00:27:56

我的也是,用强LED光照射也只有25最多。

改了一下电路,加了温度检测模块。 如果环境光线< 10, 那么测温开启,当温度大于25度时小灯亮;如果光线> 10则小灯不亮。 这是用来模拟现在的光感电灯:白天的时候(光线强),灯关闭;夜晚的时候(光线弱),红外线感应到人体灯就亮。因为手头无红外线感应器(摩尔),所以用温度探头替代。手摸在上面,当环境暗的时候灯就会发光:$

analog 2- 光敏三极光
analog 3 - 温度传感器
代码

void setup()
{
Serial.begin( 9600 );//设置串口通讯率
pinMode( 13, OUTPUT ); //设置数字13口为led输出
}

void loop()
{
int a = analogRead( A2 ); // 模拟A2口接感光三极管,读取光线数据。
int b = analogRead( A3 ); // 读取温度电压
float temp = 5.0 * ( b / 1023.0) * 100; //将温度电压转化为温度

/* 输出至计算机*/
Serial.print( a );
Serial.print( " ; temperature=");
Serial.print( temp );
Serial.println ( " C" );

//当光线低于10, 并且温度高于25度时led灯亮
if ( a < 10 && temp >= 25.0 )
    digitalWrite( 13, HIGH);
else
    digitalWrite( 13, LOW );

delay ( 2000 );
}

Muller_r 发表于 2012-7-4 22:13:04

把程序稍微改一下,变成有光就变暗,没光就点亮,好像就是一个简单的光控路灯了~~

迷你强 发表于 2012-7-5 07:58:00

Muller_r 发表于 2012-7-4 22:13 static/image/common/back.gif
把程序稍微改一下,变成有光就变暗,没光就点亮,好像就是一个简单的光控路灯了~~

终于有人改程序了,感动ing...

Randy 发表于 2012-7-5 15:37:47

Muller_r 发表于 2012-7-4 22:13 static/image/common/back.gif
把程序稍微改一下,变成有光就变暗,没光就点亮,好像就是一个简单的光控路灯了~~

哈哈,这个也太......可以算是相对简单的光控电路了,记得我大一的时候玩声光感应开关时候,还是瞒好玩的!

沧海笑1122 发表于 2012-7-5 17:46:25

这些都是基础,意义在于熟悉光敏元件的使用,倒不在于实用性,支持!

Randy 发表于 2012-7-6 17:50:50

沧海笑1122 发表于 2012-7-5 17:46 static/image/common/back.gif
这些都是基础,意义在于熟悉光敏元件的使用,倒不在于实用性,支持!

是的,对于初学者来说是件很好的事情,支持强子出品的教程!

ladywent 发表于 2012-7-24 16:05:51

顶一个,

不过我是不是看错了,光敏电阻是串联一个电阻还是并联一个电阻?

迷你强 发表于 2012-7-24 17:50:41

ladywent 发表于 2012-7-24 16:05 static/image/common/back.gif
顶一个,

不过我是不是看错了,光敏电阻是串联一个电阻还是并联一个电阻?

这个不是光敏电阻,是光敏三极管,并联电阻是为了分压

幻生幻灭 发表于 2012-7-25 16:45:00

:D 水果系列教程,呵呵

Uduse 发表于 2012-7-26 20:21:11

小问题一个:这货明明只有两条腿为什么还叫三极管...:L

PS:可以用三极管弄个非门,顺便向初学者介绍下这类概念

迷你强 发表于 2012-7-27 08:16:08

Uduse 发表于 2012-7-26 20:21 static/image/common/back.gif
小问题一个:这货明明只有两条腿为什么还叫三极管...

PS:可以用三极管弄个非门,顺便向初学者介绍下这 ...

第三级没有引出来。那一级是光控级

模电小白捂脸跑过..............

乐_乐(顺) 发表于 2012-8-4 11:14:23

呵呵,这个是我做的,谨以此片,支持一下论坛!
http://v.youku.com/v_show/id_XNDM1MzA3NzQ0.html

弘毅 发表于 2012-8-4 21:20:00

乐_乐(顺) 发表于 2012-8-4 11:14 static/image/common/back.gif
呵呵,这个是我做的,谨以此片,支持一下论坛!

:lol不错不错

Peace 发表于 2012-8-5 13:09:44

用一个npn的三极管不久搞定了/。////其实不用arduino的

迷你强 发表于 2012-8-5 21:54:55

Peace 发表于 2012-8-5 13:09 static/image/common/back.gif
用一个npn的三极管不久搞定了/。////其实不用arduino的

数字电路是模拟电路的一个子集、、、、模电当然能搞定。。。。问题咱开的坑是arduino入门。。。。。
页: [1] 2 3 4
查看完整版本: Arduino入门教程--第十一课--Arduino达文西之灯(光敏实验)