模块熟悉

第 14 课:红外传感器——前面有东西吗

它不是感应人的,是"发一束光出去,看有没有反射回来"

我是吴老师。这节课一上来,我得先把你脑子里可能有的一个印象打碎。

你看到"红外传感器"这四个字,是不是想到了这个场景——

人一走到门口,灯自动亮了。人一走,灯自己灭了。

商场门口那个"欢迎光临"的门铃、楼道里的感应灯、大堂的自动门,都是这个效果

但我要明确告诉你:那个东西,跟你手上这个模块,不是一回事。

一、它不是那个"感应人"的红外

你说的那种、能隔好几米感应到人走过来的,正式名字叫 PIR——人体红外传感器。它干的事是:感受人身上发出来的热量。人是个三十多度的热源,走到它前面,它"热"到了,就触发。

你手上这个,不是。

它是红外反射式的——发射 + 反射

  • 板上一个透明的灯珠,一直在往外发红外光(红外光人眼看不见,所以那个灯珠看着像没亮)
  • 旁边一个黑色的接收头,专门看有没有红外光回来
  • 光打到前面的东西上,弹回来,接收头收到 → 它就输出一个电平

说白了就是:拿个手电筒往黑地里照,有墙就有一片光反回来,没墙就照到空里去了。

红外传感器发射红外光,光打到物体上反射回来被接收头收到,就输出一个电平

看这张图,两件事一起看:

人体红外 PIR(不是我们的) 红外反射模块(是我们的)
靠什么工作 感受人体发出的热量 发一束光,看反不反射回来
能测多远 好几米 只有几厘米
分得清人吗 能(人体温度跟墙不一样) 分不清——纸箱子、书本、你的手,一视同仁
输出什么 有动静就"报一下" 一直告诉你"现在有没有东西挡着"

看到最后一行没有?这就是关键区别。

PIR 是"有人经过"这个事件;我们这个,是"前面有没有东西"这个状态

所以别拿它做"人走到门口自动开门"——它根本做不到。不是因为代码写得不好,是它的物理原理就不支持:几厘米的距离,你人往那一站,它只知道"有东西",不知道那东西是你还是你书包。这是这节课最重要的一个认知。

二、认识你手上这一块

模块长这样:一块蓝色的小板,上面最显眼的是两个圆圆的、像小眼睛一样的东西怎么认?看颜色:

元件 长相 干什么
发射管 透明的、有点像磨砂的小灯珠 一直在发红外光
接收头 黑色的,圆圆的,中间有点凹 看有没有红外光回来

记住一句话:透明的那个负责"喊",黑色的那个负责"听"。 这两个元件焊死在板上,你接反不了——你要接的只有下面那三根针。

板上还有两样东西:

  • 一个蓝色的十字小电位器——它就是调"能看多远"的,后面专门讲
  • 一个小指示灯——检测到东西的时候会变,接线前先看它,那是最直接的反馈

注意:不同批次的板子,灯的数量和亮灭规律可能不一样。别背,看你自己手上那块。

接线:三根线

丝印是 OUT GND VCC,跟按钮一样三根线

红外模块 接到
VCC 3.3V
GND GND
OUT GPIO4(一个数字引脚)

注意 OUT 接的是数字引脚,不是 GPIO0~GPIO5 那种模拟引脚。

我特意选了 GPIO4——跟第 8 课按钮那节课一个脚。 为什么?因为你马上会看到,它俩是同一类东西

三、它只回答"有"或者"没有"

这是这节课的第二个重点。

前面的光敏、热敏、麦克风,给你的都是一个连续的数值——0 到 4095 之间的任何一个数,你能看出"有多亮""有多响"。

红外不是。红外给你的只有两种答案。

数字信号是只有高低两档的方波,模拟信号是连续起伏的曲线

看这张图:左边是数字信号,只有高低两档,直上直下;右边是模拟信号,连续起伏,哪都能去

我们的红外,是左边那种。

光敏(模拟) 红外(数字)
回答的问题 有多亮? 前面有没有东西?
输出 0 ~ 4095,连续 高电平 / 低电平,就俩
代码函数 analogRead digitalRead
比喻 一个"体温计" 一个"门卫",只回答有人/没人

这个比喻你记住:它是门卫,不是测距仪。

你问门卫"外面那个人离门口几米",门卫只会一脸茫然地看着你——那不是他的活。 他只负责告诉你"有没有"。

想测"多远",得等下一节课。 下一节的超声波模块,才是真正的"测距仪"。

这就是三种传感器的性格:光敏说"多少",红外说"有/没有",超声波说"几厘米"。你后面几个实战课题,就是分别用这三种性格各做一个东西。现在先把每种性格摸清楚。

四、为什么只有几厘米

你实际跑一遍就会发现:它只能感觉到几厘米以内。 手放到十厘米开外,它就"瞎"了。这不是坏了,这是它的设计。

两个原因,都挺朴素:

第一,发射管功率很小。 它就是个几毫米的小灯珠,不是探照灯。第二,光是一路散开的——发出去的时候是一小束,走到一米开外已经摊成很大一片了。摊开之后,能弹回接收头的就剩那么一丁点

打个比方:你在黑屋子里拿手电照墙,近处一片亮;照十米外的墙,就是一个小光斑,还得看那墙反不反光。

那个蓝色电位器是干嘛的

就是调这个距离的。

它控制的不是"发射功率",而是接收头的灵敏度——相当于给它配副眼镜,调它"多微弱的光也算看见了"。

  • 往一个方向拧 → 更灵敏,几厘米外的东西也能触发(但可能太灵敏,环境光把它晃到,一直报"有东西")
  • 往另一个方向拧 → 更迟钝,得凑得很近才认

这个电位器直接决定你的作品能不能用。 比如做寻迹小车,你得把它调到一个"刚好只认地上那条黑线"的位置——调太灵,白底也触发;调太钝,黑线来了也不理你。

怎么找到那个位置?没有公式,就是拧。 一边拧一边试,试到它该响的时候响、该停的时候停。

这就是第 11 课那个"标定"的另一个版本。 上次是"先测再定阈值",这次是"先拧再定位置"——同一件事:参数得在你的实际环境下调出来,抄不来。

五、它真正的两个用途

它不是用来"感应人"的,那它能干什么?

两个经典用途,都是几厘米内的活:

用途一:寻迹(跟着线走)

这是它最值钱的用法。

原理特别巧妙:黑线不反光,白底反光。

  • 模块对着白纸 → 光打上去,白纸把光反射回来 → 接收头收到 → "有东西!"
  • 模块对着黑线 → 光打上去,被黑色吸掉了,几乎不反射 → 接收头啥也没收到 → "没东西!"

所以它其实一直在问:"我脚下是白的还是黑的?"

寻迹小车就是这么干的:车头底下装两个红外模块,一左一右。左边那个照到黑线了,说明车偏右了,就往左拐一点。来回修,车就跟着线走了。

这里有个坑你迟早会踩:如果黑线印得不够黑、或者地面本身是深色,它可能就分不出来了。寻迹好不好用,一半靠代码,一半靠你的线和底够不够"黑白分明"。

用途二:避障(前面有东西就报警)

撞墙之前停一下、倒车的时候滴滴响——这就是避障。

但它只有几厘米,所以:

  • ✅ 适合:慢速的、贴着走的(小车慢慢往前挪,碰到东西前停下)
  • ❌ 不适合:的、要提前预判的(几厘米对一辆跑起来的车来说,来不及了)

第 27 课的红外感应灯,就是从这个用途来的。

六、它跟第 8 课的按钮,是一家人

前面我说了 OUTGPIO4,跟按钮一个脚。现在把这件事讲透。

你回想一下按钮:要么按下,要么没按;读到 HIGHLOW;用 digitalRead 读。

红外是一模一样的结构。 区别只在——"按下"这个动作,是谁做的

按钮 红外
什么让它变 你的手指按下去 有东西挡在它前面
你做的事 一根手指 一张纸片、一个纸箱子、你的手
读到的 HIGH / LOW HIGH / LOW
用什么读 digitalRead digitalRead
属于 数字输入 数字输入

看出来没有——代码几乎一模一样。

C++
void setup() {
  Serial.begin(115200);
  pinMode(4, INPUT);          // 数字输入
}

void loop() {
  Serial.println(digitalRead(4));   // 不停地读、不停地打印
  delay(100);
}

这就是"数字输入"这一类的样子。 你这辈子做的东西里,凡是"是/否"类的输入——按钮、红外、霍尔开关、倾斜开关——全都是这三行代码

换的是零件,骨架没变。 这句话我从第 9 课说到现在,你该有感觉了。

关于 INPUT 还是 INPUT_PULLUP:红外模块板上有自己的输出电路,一般写 INPUT 就行,不会悬空。但你别信我,信你的读数——如果数字一直是乱的、不跟着手变,改成 INPUT_PULLUP 再试一次。 这就是第 5 课那句"先测,再猜"。

七、动手:先把它摸熟

第一步:接好线,跑上面的代码,打开串口监视器。

第二步:看板上的小指示灯。 现在没有东西在前面,它是什么状态?

第三步:把手掌慢慢从远处凑近模块。 凑到某个距离的时候,你会看到两件事同时发生——板上的指示灯变了,串口里的数字也跳了。

记下这个距离:大概几厘米?再记下方向:是"有东西"的时候数字大,还是"没东西"的时候大。

这个方向别背,实测。 我这块板子可能是"有东西 = 低电平",你那块可能一样也可能不一样。唯一可靠的办法是:拿手挡一下,看数字怎么变。 这跟第 8 课按钮那次是一回事。

第四步:用万用表量一下。 拨直流电压档,黑表笔搭 GND,红表笔搭 OUT——没东西的时候多少伏?有东西的时候多少伏?

应该是一个接近 3.3V,一个接近 0V。 跟串口里打出来的数字对得上吗?

第五步,这一步最重要:拧那个蓝色电位器。

拿张纸片固定在离模块大概 5 厘米的地方,然后慢慢拧。

你会看到:往一个方向拧,它就"看见"了;往另一个方向拧,它就"瞎"了。

这就是"探测距离"在你手底下被拉长、被缩短。 你拧的不是一个抽象的参数,你拧的是这个东西的"视力"。

拧完记得把它拧回一个正常位置。 拧到极端(要么太灵要么太钝),后面的实验会莫名其妙地不工作——而且你已经忘了是你自己拧的。这种"自己给自己埋的坑",是硬件调试里最常见的。

第六步:黑白对比。 拿一张白纸和一块涂黑的纸(马克笔涂或者黑色电工胶布),放在离模块同样近的地方——白纸会让它"看见",黑的就不一定了。

这个差别,就是寻迹小车的全部秘密。

自测

单选题关于这个红外模块,下面哪个说法是对的?
单选题红外模块的输出,跟光敏模块比,本质区别在哪?
单选题寻迹小车能跟着黑线走,靠的是什么?
问答题板子上那个蓝色电位器是干什么用的?为什么它没有"标准位置"?
拓展红外光人眼看不见,那你怎么知道那个"透明灯珠"真的在发光?

这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。

提示:搜"手机摄像头 红外 LED 可见"、"红外光 波长 780nm"。想一想:拿你手机的前置摄像头对着它拍一张,屏幕上会出现什么?为什么相机能看见、眼睛看不见?(试完记得把电位器拧回去

拓展电视遥控器用的也是红外,它跟这个模块有什么不一样?为什么遥控器隔着五米都能用,这个模块只有几厘米?

这个问题课上不讲,留给你自己找答案——**问 AI 是最好的办法**。

提示:搜"红外遥控 38kHz 载波 NEC 编码"、"红外接收头 原理"。想一想:遥控器只是"照一下",还是在发送一串有规律的信号?它凭什么能抗住阳光的干扰?

本节你要动手做的事

  • [ ] 认清两个"眼睛":哪个是透明的发射管、哪个是黑色的接收头,用手指点一下确认
  • [ ] 接好线VCC3.3VGNDGNDOUTGPIO4接之前先断电
  • [ ] 跑通读数:手从远处慢慢凑近,看串口数字什么时候跳、板上小灯什么时候变,记下方向和大概距离
  • [ ] 万用表量一次:没东西和有东西时,OUTGND 各是多少伏?
  • [ ] 拧电位器:固定一张纸片在 5 厘米处,左右拧,亲眼看探测距离被拉长、缩短
  • [ ] 黑白对比:白纸 vs 涂黑的纸,放在同样的距离,看它认不认
  • [ ] 做完自测题

这节课的知识点少得可怜:pinMode(4, INPUT) 加一句 digitalRead(4)。但你带走了两样更值钱的东西。

第一样:一种新的输入"性格"。 到现在为止你手上有三种——光敏给"多少",红外给"有/没有",你还没见过给"几厘米"的。下一节课就补上。

第二样:一个特别重要的习惯——先搞清楚一个传感器"不能做什么"。

红外为什么做不了自动门?不是因为代码难,是因为它压根不具备那个物理能力。这个判断,你必须在动手之前就做出来。

新手最容易犯的错,不是写错代码,是选错了零件,然后花一整天去调试一个物理上就不可能实现的东西。 那种挫败感最伤人——你会以为是自己不行。其实不是你不行,是那个方案本来就不成立。

以后每拿到一个模块,先问一句:"它到底在测什么?它的物理极限在哪?" 想清楚了再动手,能省你一整天。

下一节我们学超声波模块——套件里唯一能测距离的那个。 它会告诉你"前面那个东西离你 37 厘米",而不是只喊一声"有东西"。

而且它是四根线的,比别的模块多一根。多出来的那根是干嘛的?下节课说。