想让设备“看见”光线——比如天黑自动开灯、天亮自动关,最便宜的就是LDR光敏电阻。它本身是个会随光照变化阻值的元件:亮时电阻小、暗时电阻大,配合一个普通电阻做成分压,就能让Arduino读出光照的强弱。这篇把原理、接线、代码一次讲清。
为什么要用分压电路接LDR
Arduino的模拟脚读的是电压而不是电阻,所以LDR不能直接接到A0上。标准做法是把LDR和一个固定电阻(常用10k)组成电压分压器:LDR一端接5V,另一根脚接到A0,再从A0挂一个10k电阻到地。这样光照一变,LDR阻值变、A0的电压就跟着变,Arduino用analogRead就能读出0到1023的一个数。

这张电路图画得特别直观:5V进LDR、LDR另一脚和10k电阻的公共点接A0、电阻另一头到地。光照越强LDR阻值越小,A0电压越高,读数越大——正好和“天黑读数小、天亮读数大”对应,写判断逻辑时思路就清楚了。
光控自动开灯的代码思路
代码也很简单:loop里用analogRead(LDR_PIN)读一次,得到一个0到1023的值,跟一个阈值threshold比:小于阈值(说明暗了)就把LED或继电器打开,大于就关掉。想更稳,可以做一个滞回——比如暗到200才开灯、亮到400才关灯,避免在临界光线下来回闪。实际阈值要按环境先打印几次实际读数来标定。

真实场景就是这副样子——黄昏光线暗下去,接在系统里的小路灯自己就亮起来了。把这个逻辑里的LED换成继电器,就能控制真正的大功率路灯或家用灯,一个低成本的光控环境到处都是用武之地。
两个使用小提醒
一是LDR对单点光比较敏感,个别角度遮一下读数会跳,做门感应判断可以多读几次取平均,或把LDR头部套个磨砂透光罩让采样更均匀。二是如果想让“暗→读数变大”而不是变小,把LDR和固定电阻的位置对调一下就行,两种接法都存在,写代码前先想清楚自己的接线对应哪个逻辑方向。







拿它当自动小夜灯超简单,改继电器还能控大功率
读数可以先打印几组标定阈值,别瞎猜一个数
分压电路懂了就不怕,光照强读数高,天黑读数低
加个滞回就不闪了,不然傍晚光线临界时灯一直跳