极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 35061|回复: 32

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

[复制链接]
发表于 2012-7-12 14:25:41 | 显示全部楼层 |阅读模式
本课继续光敏实验,上面我们制作了达文西之灯,这次稍微改造下,将他做成光照度指示器,光敏三极管感受到的光越强,就点亮越多的led,达到指示的目的.

实验材料

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













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

电路图.png

然后看我的实物照片

IMGP9623_调整大小.JPG

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

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

  8. void setup ()
  9. {
  10.   for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
  11.   {
  12.   pinMode(i,OUTPUT);
  13.   }
  14. }
  15. void loop ()
  16. {

  17.   int n =analogRead(A0);  //读取光敏三极管的读数
  18.   
  19.   if (n>=10)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
  20.   {
  21.     digitalWrite(2,HIGH);
  22.     digitalWrite(2,LOW);
  23.   }
  24.   if(n>20)
  25.    {
  26.     digitalWrite(3,HIGH);
  27.     digitalWrite(3,LOW);
  28.   }
  29.     if(n>40)
  30.    {
  31.      digitalWrite(4,HIGH);
  32.      digitalWrite(4,LOW);
  33.   }
  34.     if(n>80)
  35.    {
  36.      digitalWrite(5,HIGH);
  37.      digitalWrite(5,LOW);
  38.   }
  39. }
复制代码
从源代码上可以看出来,我们一个时间范围内,只会点亮1枚LED,因为刷新速度非常快,所以大家看起来4枚LED都亮了。

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



回复

使用道具 举报

发表于 2012-7-12 20:12:46 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2012-7-13 08:58:52 | 显示全部楼层
我最喜欢的是视频最后的LOGO~~
回复 支持 反对

使用道具 举报

发表于 2012-7-14 13:55:59 | 显示全部楼层
刷新速度太快,可以加入延时效果会好一点!
回复 支持 反对

使用道具 举报

发表于 2012-7-24 16:10:09 | 显示全部楼层
支持!

共用电阻这样的细节讲得很认真!
回复 支持 反对

使用道具 举报

发表于 2012-8-4 10:17:13 | 显示全部楼层
小强哥,我自己编了个程序,但是LED灯光没有你的亮,是为什么呢?
下面是我的程序
11.JPG
12.JPG
回复 支持 反对

使用道具 举报

发表于 2012-8-4 13:47:20 | 显示全部楼层
还有个不理解的问题,搭好元器件,下了小强的程序,都一切正常。
我把手放在光敏上(做上下移动,感光强度不一),LED怎么会随着感光强弱而发生明暗变化呢?小强程序里面只有HIGH或者LOW,按照程序LED只会亮或者不亮。
为什么会有明暗变化呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 14:38:09 | 显示全部楼层
,PWM效果。、、、、没有做延时。。。。程序执行的非常快,就有了pwm效果了。。。
回复 支持 反对

使用道具 举报

发表于 2012-8-6 20:52:56 | 显示全部楼层
迷你强 发表于 2012-8-4 14:38
,PWM效果。、、、、没有做延时。。。。程序执行的非常快,就有了pwm效果了。。。

那为什么灯没有你的亮呢?
回复 支持 反对

使用道具 举报

发表于 2012-8-6 22:09:14 | 显示全部楼层
乐_乐(顺) 发表于 2012-8-6 20:52
那为什么灯没有你的亮呢?

哈哈,实际也不亮的。。是摄像机拍出来,感觉比较亮。
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-5-30 17:45:48 | 显示全部楼层
万马奔腾 发表于 2013-3-31 17:51
/*
作者:极客工坊-迷你强
时间:2012年7月4日

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

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

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

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

不过这个时候,这个程序可以再加以改进,可以用嵌套的if,或者case语句(已经忘了c里面的case应该怎么用了。。。)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-1-21 00:04 , Processed in 0.053286 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表