光线传感器检测环境光强弱,常用光敏电阻(LDR):光越强电阻越小,光越弱电阻越大。
3V3,另一端接 ADC 脚并串联一只 10kΩ 到 GNDGP26 / GP27 / GP28[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
3V3GP26(ADC0),并与 10kΩ 电阻一端相连(这是分压中点)10kΩ 电阻另一端 → Pico GNDGP26 / GP27 / GP28# ============ 接线 ============
# 光敏电阻 LDR 一端 → Pico 3V3
# 光敏电阻 LDR 另一端 → Pico GP26(ADC0),并接 10kΩ 电阻一端
# 10kΩ 电阻另一端 → Pico GND
# (LDR 与 10kΩ 的连接点就是分压中点,接 GP26)
# =============================
from machine import ADC, Pin
import time
adc = ADC(Pin(26)) # GP26 即 ADC0
print('开始读取光线强度...')
while True:
value = adc.read_u16()
# 光越强 → LDR 电阻越小 → 中点电压越高 → ADC 值越大
light_level = value / 65535 * 100
print(f'ADC 值: {value:5d}, 光线强度: {light_level:.1f}%')
time.sleep(1)
# ============ 接线 ============
# 光线部分:LDR 一端 → 3V3,另一端 → GP26 并接 10kΩ → GND
# 继电器模块(已带驱动,GPIO 只给信号):
# 继电器模块 IN → Pico GP15
# 继电器模块 VCC → Pico 3V3
# 继电器模块 GND → Pico GND
# 继电器模块的 COM / NO 接灯和电源(强电部分由模块隔离,别碰强电)
# =============================
from machine import ADC, Pin
import time
adc = ADC(Pin(26))
relay = Pin(15, Pin.OUT) # 继电器模块信号脚
light_threshold = 30 # 低于 30% 视为天黑,开灯
print('光控开关示例')
print(f'光线强度低于 {light_threshold}% 时开灯')
while True:
value = adc.read_u16()
light_level = value / 65535 * 100
if light_level < light_threshold:
relay.on() # 模块 IN 给高 → 吸合,开灯
print(f'光线弱 ({light_level:.1f}%),开灯')
else:
relay.off()
print(f'光线强 ({light_level:.1f}%),关灯')
time.sleep(2)
# ============ 接线 ============
# 光线部分:LDR 一端 → 3V3,另一端 → GP26 并接 10kΩ → GND
# 板载 LED 在 GP25,用 PWM 调亮度(不用外接)
# =============================
from machine import ADC, Pin, PWM
import time
adc = ADC(Pin(26))
pwm = PWM(Pin(25)) # GP25 = 板载 LED
pwm.freq(1000)
print('自动亮度调节(光越暗灯越亮)')
while True:
value = adc.read_u16()
# 光线越强,LED 越暗;光线越弱,LED 越亮
brightness = 65535 - value
pwm.duty_u16(brightness)
light_level = value / 65535 * 100
led_brightness = brightness / 65535 * 100
print(f'光线强度: {light_level:.1f}%, LED 亮度: {led_brightness:.1f}%')
time.sleep(0.5)
10kΩ 串联分压,中点才接 ADCGP26 / GP27 / GP2865535 - valueQ: 读数一直是 65535(满值)上不去? A: 多半 10kΩ 那个接地没接好,或 LDR 两脚接反(变成下拉)。确认 LDR→3V3、10kΩ→GND、中点→GP26。
Q: 数值和环境光对不上 / 反了? A: LDR 两端对调即可翻转方向;阈值在串口读数基础上重新设定。
Q: 读数抖动大? A: 加多次平均(参考电位器平滑滤波示例),或在中点并一个小电容(0.1µF)到地。