模块熟悉
第 11 课·视频:光敏传感器
用手一遮,数字就变——最直观的模拟输入
光敏是最适合入门模拟输入的模块。原因很简单:你用手一遮,数字立刻变,因果关系一眼就能看见。
看的时候注意三件事
第一,又是四根线,还是只用一根。
跟麦克风一样,它有 AO 和 DO:
| 针脚 | 含义 | 我们用它吗 |
|---|---|---|
AO |
模拟量,光越强数值越大 | ✅ 用这个 |
DO |
数字量,比某个亮度暗/亮才翻转 | ❌ |
| GND | 地 | ✅ |
| VCC | 电源 | ✅ |
光敏、热敏、麦克风这三个模块,丝印一模一样(都是 AO DO GND VCC),长得也像,特别容易拿混。区分方法:光敏顶上是个有花纹的小圆片(光敏电阻),热敏顶上是个玻璃珠,麦克风顶上是个圆形金属咪头。
第二,注意数字的范围。
模拟输入读出来是 0 到 4095 之间的一个数。这是 12 位 ADC 的范围——为什么是这个范围,后面自测题会问。
第三,注意遮住和放开,数字变化的幅度。
视频里那个变化幅度很大,所以你很容易找到一个阈值:比它亮就算白天,比它暗就算晚上。
什么叫"阈值"
阈值就是一条你自己画的线。
程序不会自己知道"多亮算亮"。你得告诉它:读数大于 2000,就算亮;小于 2000,就算暗。 那个 2000 就是阈值。
阈值定在哪儿,是你决定的,而且要看环境。
- 白天在窗边测,可能读数都在 3000 以上,阈值定 2000 就太低了
- 晚上在台灯下测,可能读数只有 800,阈值定 2000 就永远触发不了
所以正确的做法是:先跑一遍,看看你这里的实际范围,再定阈值。 这就是为什么视频里我要先"遮一下、放一下"给你看范围。
自测
答案与解析
ESP32-C3 的 ADC 是 12 位的,2 的 12 次方 = 4096,所以范围是 0~4095。(8 位是 0~255,常见于老式 Arduino 的某些场景;10 位是 0~1023,这是经典 Arduino Uno 的范围。看到教程里写 1023,那是 Uno,不是我们的板子。)
答案与解析
4095 是"顶到最大值",说明引脚上的电压一直很高、没有变化。最常见的原因是信号线接错了——接到 DO(那就变成 0/1 两种值了)、接到了 VCC、或者接到了一个非模拟引脚。先查线,再查代码。
答题要点
答题要点应该包含:读数是环境相关的——房间亮度、灯的色温、模块本身的灵敏度差异,都会让同一亮度下的读数不一样。所以教程里写"大于 2000 算亮",在你的环境里可能完全不适用。正确做法是:先在自己的使用环境里跑一遍,遮住、放开,看实际读数的上下限,然后在中间取一个值当阈值。
拓展ADC 的 4095 是怎么来的?为什么不是 1000 或者 10000?
这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。
提示:搜"ADC 分辨率 位数"、"12 位 ADC 什么意思"。算一算 2 的 12 次方是多少,再想想如果换成 8 位会损失什么。
拓展为什么 ESP32 的 ADC 读数会"飘"?有没有办法让它更稳?
这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。
提示:搜"ESP32 ADC 非线性 校准"、"ADC 多次采样 平均"。想一想:在代码里连续读 10 次取平均,能不能让数字看起来稳定一些?
本节你要动手做的事
- [ ] 接好线:
VCC→3.3V,GND→GND,AO→ 一个模拟引脚(GPIO0~GPIO5) - [ ] 跑程序,用手遮住放开,看数字范围
- [ ] 记下你的环境里"最亮"和"最暗"分别是多少
- [ ] 取一个中间值当阈值,让它"天黑了就亮灯"
- [ ] 做完自测题