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

您需要的主要组件包括一个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远离直接光源。
接线说明

要设置电路,首先将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故障排除提示
/*
* 该代码与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);
}
资源与参考
尚无可用资源。
文件📁
没有可用的文件。