搜索代码

使用光敏电阻(LDR)与Arduino和一个控制开关来点亮Arduino

使用光敏电阻(LDR)与Arduino和一个控制开关来点亮Arduino

在本教程中,我们将探讨如何使用光敏电阻(LDR)与Arduino一起控制基于环境光水平的灯光。LDR的电阻会根据光强度变化,因此可以用来检测环境是明亮还是昏暗。当光线低于某个阈值时,我们将打开一个输出引脚来激活灯光。

LDR Illustration and symbol

您需要的主要组件包括一个Arduino板,一个10k欧姆的电阻器,一个光敏电阻(LDR),以及一些跳线。LDR将与电阻器以电压分压器的配置连接,以读取模拟电压,该电压会根据光强的变化而变化。我们将使用这个电压来控制LED或其他输出设备。

要查看设置和代码的视觉演示,请务必查看相关视频(视频中的 0:10)。

硬件解析

光敏电阻(LDR)是一种电阻,其电阻值随入射光强度的增加而减小。它通常用于需要监测光照水平的应用中。在我们的设置中,LDR将用于检测环境光水平,并将发送相应的模拟电压给Arduino。

Arduino 将通过其一个模拟引脚读取此电压,并根据定义的阈值决定是否打开或关闭连接的灯。10k 欧姆电阻器与光敏电阻 (LDR) 一起使用于分压器配置,以生成一个 Arduino 可以读取的稳定电压输出。

数据表详细信息

制造商 通用
零件编号 LDR
阻力(轻) 100 - 500 欧姆
抵抗(黑暗) 10 千欧 - 1 兆欧
工作电压 3.3 V - 5 V
响应时间 20 毫秒(典型值)
包裹 通孔

  • 确保电压水平适当;不要超过5V。
  • 使用下拉电阻来稳定读数。
  • 选择合适的电阻值(10kΩ)作为分压器。
  • 如果需要,可以考虑使用电容器进行噪声过滤。
  • 在测试时保持LDR远离直接光源。

接线说明

Wiring LDR with Arduino
Wiring LDR with Arduino

要设置电路,首先将LDR的一个端子连接到Arduino的3.3V电源。LDR的另一个端子应连接到10k欧姆电阻的一端。电阻的另一端应连接到接地。

接下来,将LDR和电阻的连接点连接到模拟输入引脚,例如A0此连接将允许Arduino读取电压。确保将Arduino的地线连接到电路的公共地线,以确保正常功能。

代码示例与演示

以下代码片段初始化串行通信,并从LDR读取模拟值。然后将该值转换为电压并打印到串行监视器。

int LDRvalue = analogRead(A0); // Read the analog value from LDR
float voltage = LDRvalue * (5.0 / 1023.0); // Convert to voltage
Serial.print("Voltage ="); // Print label
Serial.print(voltage); // Print actual voltage

在这段代码中,变量LDRvalue存储来自LDR的原始模拟读数。电压是根据最大模拟值(1023)和电压参考(5V)计算得出的。

接下来,我们检查这个电压是否低于阈值(在本例中为3V),以控制输出引脚。

if(voltage < 3 ){ 
  digitalWrite(10, HIGH); // Turn on the light
}else{
  digitalWrite(10, LOW); // Turn off the light
}

这里,如果测得的电压低于 3 伏,我们将输出引脚(10)设为高电平,打开灯;否则,设为低电平,关闭灯。持续检查灯光状态允许根据环境光水平进行实时控制。

演示 / 期待什么

完成接线并上传代码后,您应该在串口监视器上看到电压读数随着 LDR 上光强的变化而变化。如果遮盖 LDR,电压应该增加,而当暴露在光线下时,电压应该减少。这种行为将直接影响控制灯光的输出引脚。

要小心常见的陷阱,例如漂移输入或不正确的电压水平,这可能会导致错误的读数(视频中 12:30)。

视频时间戳

  • 00:00LDR简介
  • 01:30硬件设置
  • 03:45代码说明
  • 06:00运行代码
  • 09:15故障排除提示

图像

Wiring LDR with Arduino
Wiring LDR with Arduino
An LDR
An LDR
LDR Illustration and symbol
LDR Illustration and symbol
14-Using an LDR with an Arduino and a control switch for a light
语言: C++
/*
 * 该代码与RoboJax.com的视频教程一起使用。2017年8月31日发布于加拿大安大略省Ajax。撰写/编辑者:A.B.S
 */
/void setup()

{

  Serial.begin(9600); // 设置串口
  pinMode(10, OUTPUT);
}



void loop(){

  int LDRvalue = analogRead(A0);
 // 将模拟读数(范围从 0 到 1023)转换为电压(0 到 5V):
  float voltage = LDRvalue * (5.0 / 1023.0);
 // 打印出你读取的值:
  Serial.print("Voltage ="); // 打印文本“电压 =”
  Serial.print(voltage); // 打印实际电压

 // 检查电压是否低于3,然后将引脚10设置为高电平或开启。
  if(voltage < 3 ){
    digitalWrite(10, HIGH);
  }else{
    digitalWrite(10, LOW); // 或者在电压大于3时保持关闭状态。
  }
  Serial.println();
  delay(300);

}

资源与参考

尚无可用资源。

文件📁

没有可用的文件。