迷你强 发表于 2012-7-12 14:25:41

Arduino入门教程--第十二课--Arduino光照指示器

本课继续光敏实验,上面我们制作了达文西之灯,这次稍微改造下,将他做成光照度指示器,光敏三极管感受到的光越强,就点亮越多的led,达到指示的目的.

实验材料


ocrobot mango(Arduino兼容板)1块
面包板 1块
面包板专用跳线盒1盒
10K欧姆电阻1枚
220欧姆电阻1枚
四色LED 共4枚
光敏三极管1枚
数据线1根













先来看我们设计的电路图,原来是一样的,有一点特别的地方,就是我们四枚LED共用了一个220欧姆电阻, 共用电阻的原则是这样的,总功率不能超过电阻最大设计功率。我们的实验有些特别的地方,就是我们在单位时间内只会点亮1枚LED,所以不存在功率超了的问题。



然后看我的实物照片



仔细研究搭建电路,希望大家比我搭的好看。。。。。

然后就是程序代码了/*
作者:极客工坊-迷你强
时间:2012年7月4日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:Arduino作为光照度显示器,光线越强,led会亮的越多
*/

void setup ()
{
for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
{
pinMode(i,OUTPUT);
}
}
void loop ()
{

int n =analogRead(A0);//读取光敏三极管的读数

if (n>=10)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
{
    digitalWrite(2,HIGH);
    digitalWrite(2,LOW);
}
if(n>20)
   {
    digitalWrite(3,HIGH);
    digitalWrite(3,LOW);
}
    if(n>40)
   {
   digitalWrite(4,HIGH);
   digitalWrite(4,LOW);
}
    if(n>80)
   {
   digitalWrite(5,HIGH);
   digitalWrite(5,LOW);
}
}从源代码上可以看出来,我们一个时间范围内,只会点亮1枚LED,因为刷新速度非常快,所以大家看起来4枚LED都亮了。

最后附上我们的演示视频。因为光线比较强,所以LED的亮度不是很明显

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

意见反馈 发表于 2012-7-12 20:12:46

学习了,谢谢

Muller_r 发表于 2012-7-13 08:58:52

我最喜欢的是视频最后的LOGO~~

Randy 发表于 2012-7-14 13:55:59

刷新速度太快,可以加入延时效果会好一点!

ladywent 发表于 2012-7-24 16:10:09

支持!

共用电阻这样的细节讲得很认真!

乐_乐(顺) 发表于 2012-8-4 10:17:13

小强哥,我自己编了个程序,但是LED灯光没有你的亮,是为什么呢?
下面是我的程序

乐_乐(顺) 发表于 2012-8-4 13:47:20

还有个不理解的问题,搭好元器件,下了小强的程序,都一切正常。
我把手放在光敏上(做上下移动,感光强度不一),LED怎么会随着感光强弱而发生明暗变化呢?小强程序里面只有HIGH或者LOW,按照程序LED只会亮或者不亮。
为什么会有明暗变化呢?

迷你强 发表于 2012-8-4 14:38:09

:lol,PWM效果。、、、、没有做延时。。。。程序执行的非常快,就有了pwm效果了。。。

乐_乐(顺) 发表于 2012-8-6 20:52:56

迷你强 发表于 2012-8-4 14:38 static/image/common/back.gif
,PWM效果。、、、、没有做延时。。。。程序执行的非常快,就有了pwm效果了。。。

那为什么灯没有你的亮呢?

弘毅 发表于 2012-8-6 22:09:14

乐_乐(顺) 发表于 2012-8-6 20:52 static/image/common/back.gif
那为什么灯没有你的亮呢?

哈哈,实际也不亮的。。是摄像机拍出来,感觉比较亮。

939670129 发表于 2012-9-19 20:40:52

好东西,顶~

花开无痕 发表于 2012-10-20 09:21:57

算法很巧妙。受用啦

万马奔腾 发表于 2013-3-31 17:51:42

/*
作者:极客工坊-迷你强
时间:2012年7月4日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:Arduino作为光照度显示器,光线越强,led会亮的越多
*/

void setup ()
{
for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
{
pinMode(i,OUTPUT);
}
}
void loop ()
{

int n =analogRead(A0);//读取光敏三极管的读数

if (n>=200)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
{
    digitalWrite(2,HIGH);
      }
if(n>300)
   {
    digitalWrite(3,HIGH);
      }
    if(n>400)
   {
   digitalWrite(4,HIGH);
       }
    if(n>600)
   {
   digitalWrite(5,HIGH);
       }
if (n<200)
{digitalWrite(2,LOW);}
if (n<=300)
{digitalWrite(3,LOW);}
   if (n<=400)
{digitalWrite(4,LOW);}
   if (n<=600)
{digitalWrite(5,LOW);}
}
如果修改成这种,LED的亮度比较高。。。

玄冰之神 发表于 2013-4-15 14:27:18

:lol:lol:lol:lol:lol

pumpitup 发表于 2013-5-30 17:45:48

万马奔腾 发表于 2013-3-31 17:51 static/image/common/back.gif
/*
作者:极客工坊-迷你强
时间:2012年7月4日


高是高了,就是要考虑220电阻的承受的功率了。

因为当n一直大于600,那你这个程序的结果就是四个灯一直在同时亮。

lz的程序我先是不解,然后才有点明白。

如果做成成品的话,用多个电阻或用功率足够的电阻,就可以用你的程序了。

不过这个时候,这个程序可以再加以改进,可以用嵌套的if,或者case语句(已经忘了c里面的case应该怎么用了。。。)
页: [1] 2 3
查看完整版本: Arduino入门教程--第十二课--Arduino光照指示器