如何利用光敏电阻控制灯光的亮灭

描述

  当太阳落山时,您的房子会开始变暗,您可能需要打开几盏灯才能看清。那么,如果这些灯光可以自动打开不是更方便吗?使用光敏电阻传感器和Arduino,您就可以实现根据周围的环境光线变化对照明灯、百叶窗或者其他任何物件进行控制了。

  光敏电阻的工作原理

  在本项目中,我们的重点在于介绍光敏电阻以及如何将它们整合到您的项目中。光敏电阻是一种电阻器,它会根据照射的光亮来改变其电阻值。典型的电阻器以恒定的电阻值来阻止电子在电路中的流通,而光敏电阻会在受到更多的光线照射时允许更高的电压通过电路。反而言之,当受到较少的光线照射时,其电阻值会增加。

  可以通过Arduino的模拟引脚读取其电阻值,读数范围在0到1023之间。有了这些信息,您可以使您的项目对明亮的日光、黄昏或没有光亮的夜晚作出不同的响应,比如在外面很亮的时候打开百叶窗,或者在天黑的时候打开照明灯。

  光敏电阻体积小,价格便宜,而且通常在入门套件和其他传感器套件里都包含该组件。如果您买过电子套件,可能会发现其中就有一两个光敏电阻。为了演示它们是如何工作的,我们将控制两个LED,当有光线时其中一个亮起,没有光线时另外一个亮起。

  所需组件

  在本项目中,不需要很多标准电子套件中以外的东西。但是,如果您想要使用光敏电阻控制大型项目则需要注意准备一些特殊组件。例如,如果您想控制百叶窗,就需要准备一些伺服,如果您想要控制一盏灯,那么需要使用一个继电器。现在,我们将仅介绍如何使用该传感器。

  需要一个Arduino Uno 、Arduino IDE 、两个LED功能完好,具有不同颜色、光敏电阻以及一个220欧姆电阻。

  进一步降低通过光敏电阻的阻值,将其降低到更有效的水平

  两个100 欧姆 电阻

  防止烧坏LED

  如果您没有一根躺在某个角落里的USB数据线,还需要购买USB数据线。

  在本项目的原型构建中使用面包板也会很有帮助。同样,所有这些材料通常都可以在任何入门电子套件中找到,因此请事先查看您是否已经具备这些组件。

  代码

  在本项目中,我们将使用Arduino上的一个引脚读取光敏电阻阻值,并使用两个引脚来控制两个独立的LED。当光敏电阻检测到高于某个阈值的光线强度时,其中一个LED将会亮起。当光线强度低于该阈值时,另一个LED将会亮起。实现以上功能的全部代码如下所示:

  int redLED = 7;

int blueLED = 8;

int photoresistorPIN = A0;

int lightValue = 0;

void setup() {

pinMode(redLED, OUTPUT);

pinMode(blueLED,OUTPUT);

Serial.begin(9600);

}

void loop(){

lightValue = analogRead(photoresistorPIN);

Serial.println(“Light value: “);

Serial.println(lightValue);

if(lightValue < 50){

digitalWrite(redLED, HIGH);

}

else{

digitalWrite(blueLED, HIGH);

}

delay(200);

digitalWrite(redLED, LOW);

digitalWrite(blueLED, LOW);

}

这段代码中有几个部分需要解释,我们从要设置的变量开始。

int redLED = 7;

int blueLED = 8;

int photoresistorPIN = A0;

int lightValue = 0;

在这里,我们将红色LED分配给引脚7,蓝色LED分配给引脚8。这些可以分配给Arduino上的任何数字引脚。接下来,我们将光敏电阻分配给A0。该引脚必须分配给六个模拟引脚之一,因为它需要读取来自光敏电阻的模拟值。

最后,我们将创建一个名为lightValue的变量来存储光敏电阻返回的值。

void setup() {

pinMode(redLED, OUTPUT);

pinMode(blueLED,OUTPUT);

Serial.begin(9600);

}

在setup()部分中,前两行用于将红色和蓝色LED 引脚分配为输出引脚。

我们还将初始化串行监视器,这样就可以查看光敏电阻的返回值。这在设定用于切换两个LED开关的阈值时会很有用。

根据设置项目时所在房间的环境光强度,您可以基于自己的需要对阈值进行调整。

void loop(){

lightValue = analogRead(photoresistorPIN);

Serial.println(“Light value: “);

Serial.println(lightValue);

if(lightValue < 50){

digitalWrite(redLED, HIGH);

}

else{

digitalWrite(blueLED, HIGH);

}

delay(200);

digitalWrite(redLED, LOW);

digitalWrite(blueLED, LOW);

}

  在loop()部分中,第一行用于读取光敏电阻的模拟值,并将其分配给lightValue变量。然后该值将会被立即打印到串行监视器上。

  接下来,如果光传感器读取的值低于50,循环代码中的一部分代码将会被启用,红色LED灯将会亮起,如果值高于50,则蓝色LED将会亮起。如果50对您的环境光线来说太低,红灯一直亮起,那么请使用串行监视器为您的项目设定一个合适的值。

  接线

  现在您已经理解了代码,接下来请将其上传到您的Arduino。然后,我们将开始设置接线—幸运的是,这非常简单,并且很容易将其添加到您的其他项目中。要完成接线设置,请按照下列步骤操作:

  ● 将蓝色LED的长端连接到Arduino的引脚8。将LED的短端连接到一个100欧姆的电阻上,然后将该电阻的另一端连接到GND。

  ● 对红色LED重复上一步骤,LED连接到Arduino上的引脚7。

  ● 将光敏电阻的一端连接到5V引脚,另一端连接到引脚A0。此外,在光敏电阻的第二个端口连接一个220欧姆的电阻,并将该电阻连接到GND。

  ● 如果需要,将之前的电路与面包板上的正负轨连接。

  完成所有接线后,您可以将Arduino插入电源以启动项目。在光敏电阻上挥动您的手,将会从蓝色LED亮起切换到红色LED亮起。如果只有其中一个LED保持亮起的状态,请尝试调整草图中if()语句中的值,直到传感器按照预期方式进行工作。当您对结果感到满意的时候,项目就完成了!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分