第十课--光照指示器/zh

来自Microduino Wikipedia
跳转至: 导航搜索
Language English

目的

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

设备

Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。

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


原理图

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

程序

const int analogInPin = 14;
const int ledPin = 4;

float sensorValue = 0;        // value read from the pot

int xl=4000; //此处需是环境基础亮度变量,请查看自己的亮度数值,填写到此处数值要略大于所测得的数据但小于灯光下的数据

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

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  
if (sensorValue>=1000)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
  {
    digitalWrite(3,HIGH);
    digitalWrite(3,LOW);//当不再这个等级下,灯会熄灭
  }
  if(sensorValue>1500)
   {
    digitalWrite(4,HIGH);
    digitalWrite(4,LOW);
  }
    if(sensorValue>2000)
   {
     digitalWrite(5,HIGH);
     digitalWrite(5,LOW);
  }
    if(sensorValue>2500)
   {
     digitalWrite(6,HIGH);
     digitalWrite(6,LOW);
  }
  
  SerialUSB.print("sensorValue = ");
  SerialUSB.println(sensorValue);
  delay(500);
}

结果

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