零基础入门Arduino:光敏传感器
·
通过上面的学习我们已经有了一定的基础,今天让我们控制新的硬件-光敏传感器。老规矩在此之前先介绍下光敏传感器。
光敏传感器的工作原理
光敏传感器是一种将光信号转换为电信号的装置,核心部件为光敏元件(如光敏电阻、光电二极管等)。当光照强度变化时,光敏元件的电阻值或电流发生改变,通过电路处理输出模拟或数字信号。
主要应用场景
- 自动照明控制:根据环境光线调节路灯或室内灯光亮度。
- 智能家居:触发窗帘、空调等设备的自动启停。
- 工业检测:用于流水线物体有无识别或颜色分拣。
现在让我们开始今天的学习内容!
硬件准备
- Arduino开发板(如Arduino Uno)
- 光敏传感器(如下图)
- 杜邦线若干
- 面包板(可选)
连接方式
光敏传感器通常有四个引脚:VCC、GND、AO(模拟输出)和DO(数字输出)。VCC连接5V电源,GND连接Arduino的地线。AO引脚连接Arduino的模拟输入引脚(如A0),DO引脚连接数字输入引脚(如D2)。DO引脚可能需要接一个上拉或下拉电阻,具体取决于传感器设计。
读取模拟输出(AO)
AO引脚输出的是与光照强度成正比的模拟电压值。通过Arduino的analogRead()函数可以读取该值。光照越强,AO输出的电压越高,读取到的数值越大(范围0-1023)。
int aoPin = A0; // 模拟输入引脚A0
int aoValue = 0; // 存储模拟值
void setup() {
Serial.begin(9600); // 初始化串口通信
}
void loop() {
aoValue = analogRead(aoPin); // 读取模拟值
Serial.print("AO Value: ");
Serial.println(aoValue); // 打印模拟值
delay(1000); // 延时1秒
}
读取数字输出(DO)
DO引脚输出的是数字信号,当光照强度超过或低于某个阈值时,DO引脚会输出高电平或低电平。可以通过digitalRead()函数读取该值。
int doPin = 2; // 数字输入引脚D2
int doValue = 0; // 存储数字值
void setup() {
Serial.begin(9600);
pinMode(doPin, INPUT); // 设置引脚为输入模式
}
void loop() {
doValue = digitalRead(doPin); // 读取数字值
Serial.print("DO Value: ");
Serial.println(doValue); // 打印数字值
delay(1000); // 延时1秒
}
调整DO阈值
许多光敏传感器上有一个电位器(蓝色部分,可用螺丝刀调节),用于调整DO引脚的触发阈值。旋转电位器可以改变光照强度的触发点。通过调整电位器,可以设置在不同光照条件下DO引脚输出的高低电平。
结合AO和DO的使用
AO和DO可以结合使用,实现更复杂的功能。例如,当AO值低于某个阈值时,触发DO引脚的动作,或者用AO值来校准DO的触发点。
int aoPin = A0;
int doPin = 2;
int aoValue = 0;
int doValue = 0;
int threshold = 500; // 设置一个阈值
void setup() {
Serial.begin(9600);
pinMode(doPin, INPUT);
}
void loop() {
aoValue = analogRead(aoPin);
doValue = digitalRead(doPin);
Serial.print("AO Value: ");
Serial.print(aoValue);
Serial.print(" | DO Value: ");
Serial.println(doValue);
if (aoValue < threshold) {
Serial.println("Light level is low!");
}
delay(1000);
}
实际应用示例
光敏传感器常用于自动照明系统。当环境光较暗时,通过DO引脚触发LED灯或其他照明设备。以下是一个简单的自动灯控制示例:
int aoPin = A0;
int doPin = 2;
int ledPin = 13; // 使用板载LED
int aoValue = 0;
int doValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(doPin, INPUT);
}
void loop() {
doValue = digitalRead(doPin);
if (doValue == LOW) { // 假设低电平表示光线不足
digitalWrite(ledPin, HIGH); // 打开LED
} else {
digitalWrite(ledPin, LOW); // 关闭LED
}
delay(100);
}
更多推荐




所有评论(0)