光线传感器能感应光线的变化,并且把光线变化通过电压变化体现出来。那我们就可以利用这种变化来制作一个环境感应灯。如果光线越暗,LED就越亮。光线充足,LED就不会发光。

# 部署

1.LCD的接口RS-D7分别连接到OSEPP UNO的2~7号引脚。
2.光线传感器Light Sensor的端子接到OSEPP UNO的A0引脚。
3.LED4的端子连接到OSEPP UNO的9号引脚。

# 程序搭建

  • oseppBlock程序

  • Arduino程序
#include <LiquidCrystal.h>

LiquidCrystal lcd1(2, 3, 4, 5, 6, 7); //定义LCD引脚

void setup()
{
  lcd1.begin(16, 2); //LCD初始化
  //led1
  pinMode(9, OUTPUT); //定义LED引脚
  //light1
  pinMode(A0, INPUT); //定义光线传感器引脚
}

void loop()
{
  analogWrite(9, map(constrain(analogRead(A0), 100, 450), 100, 450, 255, 0));
  //把光线传感器的值限制在一个范围,且把这个范围映射到255-0来驱动LED
  lcd1.clear();               //清屏
  lcd1.setCursor(0, 0);       //显示光标定位
  lcd1.print(analogRead(A0)); //显示光线传感器的值
  delay(1000);                //延时1000毫秒
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 运行结果

传感器的光线被遮挡的时候,LED就会变亮,移开遮挡物时LED就变暗了。这里映射的输出值填的是255-0,由大到小。所以当光线越弱的时候LED显示就越亮,光线越强的时候,LED显示就越暗。

# 解析

程序里面我们限制了光线传感器的值最小值是100最大值是450,这是为了防止光线变化超出映射值范围时程序失效。当然你可以更改这个值,当光线最暗时,LCD显示的是最小值,光线最亮时,LCD显示的就是最大值,把这两个值填入积木里面。

限制一个值的范围积木,当这个值超出这个范围时,只返回最小值或最大值。

代码:
constrain(x,0,255);

# 操作视频