“第十二课--Microduino 光照指示器/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
原理图
设备
 
(未显示1个用户的6个中间版本)
第4行: 第4行:
 
|
 
|
 
==目的==
 
==目的==
以前LED用来做指示,利用了其发光效应,今天我们实验其另外一个功能——光电效应,原理是LED发光二极管在受到强光照射时会产生微弱的电流,我们可用三极管将其放大。当检测有变化就用蜂鸣器提醒。
+
上节课讲到了光敏电阻实验,只把光线分为两个等级,强或弱,今天深入一下,做个光照指示器,用4个LED等指示,把光强分为5个等级,光敏电阻感受到的光越强,就点亮越多的LED来达到指示的目的。
LED来达到指示的目的。
 
 
==设备==
 
==设备==
*'''[[Microduino-Core]]'''
+
*'''[[Microduino-Core/zh]]'''
*'''[[Microduino-FT232R]]'''
+
*'''[[Microduino-USBTTL/zh]]'''
 
*其他硬件设备
 
*其他硬件设备
**面包板跳线 一盒   
+
**面包板跳线   一盒   
**面包板 一块   
+
**面包板   一块   
**LED发光二极管  一个   
+
**光敏电阻          一个   
**10k、1K电阻 各一个 
+
**220欧            四个
**蜂鸣器         一个
+
**10K              一个
**USB数据连接线  一根
+
**led发光二级管    四个
**9014三极管 一个
+
**USB数据连接线    一根
==三极管==
 
三极管是一种电流控制电流的半导体器件,其作用是把微弱信号放大成辐值较大的电信号,也作开关或者电压跟随等。三极管有三个极,分别叫做集电极C(collector),基极B(base),发射极E(emitter)。分成NPN和PNP两种。
 
  
常用三极管的区别大家参考:http://wenku.baidu.com/view/0fc3bc5077232f60ddcca1ae.html
 
  
三极管的引脚识别大家参考:http://wenku.baidu.com/view/3e636bb469dc5022aaea0098.html
+
[[File:lesson11All.jpg|600px|center|thumb]]
 
 
本实验用的是9014三极管(NPN型),写有型号数字一面的朝自己,从左往右数分别是E,B,C。如图:
 
[[File:第十二课-三极管.jpg|600px|center|thumb]]
 
  
 
==原理图==
 
==原理图==
[[File:lesson12-schematic.jpg|600px|center|thumb]]
+
[[File:第十二课原理图.jpg|600px|center|thumb]]
本实验采用电压跟随的接法,即触发信号接基极B,集电极C接VCC,发射极接GND,输出信号通过下拉电阻接到GND。若中间的基极B有微弱电流触发,三极管就如同开关被打开,电流由C-B-E,发射机电压几乎等于基极电压。起始状态光照强度不够时,光电效应产生的电流还不足以触发,所以三极管断开,直接通过下拉电阻将电压拉低。当光照强度增强,光电效应产生的电流使三极管触发导通,但电压很低,所以很难考虑光线的强弱,只要检测到有电压变化就说明有光照有作用,就让蜂鸣器发出声响。
+
这次光敏电阻接法与上次相反,目的是想大家更加明白光敏电阻的用法。光敏电阻一端直接接电源,另一端通过电阻接地。初始状态下为低,随着光照强度的增加电压越来越高。
  
 
==程序==
 
==程序==
 
<source lang="cpp">
 
<source lang="cpp">
void setup()
+
void setup ()
{  
+
{
Serial.begin(115200);
+
    Serial.begin(115200);
 +
  for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
 +
  {
 +
  pinMode(i,OUTPUT);
 +
  }
 
}
 
}
void loop()
+
void loop ()
 
{
 
{
   int n=analogRead(A0);   //读取模拟口数据       
+
   if(n>0)                 //有电压反应就运行以下程序,产生特定脉冲,让蜂鸣器响
+
   int n =analogRead(A0); //读取光敏电阻的读数
   {     
+
  //Serial.println(n);
     tone(9, 1000);      
+
 
     delay(100);
+
   if (n>=100)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
     noTone(9);
+
   {
 +
    digitalWrite(2,HIGH);
 +
    digitalWrite(2,LOW);//当不再这个等级下,灯会熄灭
 +
  }
 +
  if(n>250)
 +
   {
 +
    digitalWrite(3,HIGH);
 +
     digitalWrite(3,LOW);
 +
  }
 +
     if(n>400)
 +
  {
 +
    digitalWrite(4,HIGH);
 +
    digitalWrite(4,LOW);
 +
  }
 +
     if(n>550)
 +
  {
 +
    digitalWrite(5,HIGH);
 +
    digitalWrite(5,LOW);
 
   }
 
   }
Serial.println(n);
+
  // delay(100);
  delay(10);//串口监视最好加延时,不然速率太快,容易死机。
 
 
}
 
}
 
</source>
 
</source>
===Tone()函数===
+
 
*功能:在某个引脚上产生一个指定的频率占空比为50%的的方波。持续时间可指定,直到调用noTone()才结束。函数会干扰对引脚3和11的PWM输出。
 
*语法:
 
**tone(pin, frequency)
 
**tone(pin, frequency, duration)
 
*参数:
 
**pin:音频输出引脚
 
**frequency:以赫兹为单位的音调的频率 - int型
 
**duration:以毫秒为单位的色调的持续时间 - long型(可选)
 
 
==结果==
 
==结果==
当有强光靠近时,蜂鸣器发出“滴滴滴。。。”的响声,DIY一个光敏三极管。
+
当光照很弱,低于设置的最小值时,所有灯都灭。随着光的增加,每到一个设定的级别就点亮一个LED,达到指示的效果。实际上LED灯一直在闪烁,因为为了使光强不在某一等级,要熄灭此等级的灯,就直接在点亮之后立即熄灭,在执行过程中没加延时,只要还在该等级,就循环处理,所以看起来就好像一直亮着。
==视频==
 
 
|}
 
|}
 +
 +
[[File:lesson11Result.jpg|600px|center|thumb]]

2014年10月29日 (三) 03:29的最新版本

Language English

目的

上节课讲到了光敏电阻实验,只把光线分为两个等级,强或弱,今天深入一下,做个光照指示器,用4个LED等指示,把光强分为5个等级,光敏电阻感受到的光越强,就点亮越多的LED来达到指示的目的。

设备

  • Microduino-Core/zh
  • Microduino-USBTTL/zh
  • 其他硬件设备
    • 面包板跳线 一盒
    • 面包板 一块
    • 光敏电阻 一个
    • 220欧 四个
    • 10K 一个
    • led发光二级管 四个
    • USB数据连接线 一根


Lesson11All.jpg

原理图

第十二课原理图.jpg

这次光敏电阻接法与上次相反,目的是想大家更加明白光敏电阻的用法。光敏电阻一端直接接电源,另一端通过电阻接地。初始状态下为低,随着光照强度的增加电压越来越高。

程序

void setup ()
{
    Serial.begin(115200);
  for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
  {
  pinMode(i,OUTPUT);
  }
}
void loop ()
{
 
  int n =analogRead(A0);  //读取光敏电阻的读数
   //Serial.println(n);
   
  if (n>=100)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
  {
    digitalWrite(2,HIGH);
    digitalWrite(2,LOW);//当不再这个等级下,灯会熄灭
  }
  if(n>250)
   {
    digitalWrite(3,HIGH);
    digitalWrite(3,LOW);
  }
    if(n>400)
   {
     digitalWrite(4,HIGH);
     digitalWrite(4,LOW);
  }
    if(n>550)
   {
     digitalWrite(5,HIGH);
     digitalWrite(5,LOW);
  }
  //  delay(100);
}

结果

当光照很弱,低于设置的最小值时,所有灯都灭。随着光的增加,每到一个设定的级别就点亮一个LED,达到指示的效果。实际上LED灯一直在闪烁,因为为了使光强不在某一等级,要熄灭此等级的灯,就直接在点亮之后立即熄灭,在执行过程中没加延时,只要还在该等级,就循环处理,所以看起来就好像一直亮着。

Lesson11Result.jpg