传感器是什么:让 STM32 知道车外发生了什么

经典三问

Q: 传感器是什么?

A: 传感器是把现实里的光、温度、距离、声音、运动等变化,转换成电信号的器件。

Q: 为什么需要传感器?

A: STM32 只能处理引脚上的高低电平和电压,不能直接看见黑线、听见声音,也不知道轮子前面有没有障碍物。传感器把这些现实信息送到芯片面前。

Q: 传感器常见使用场景?

A: 循迹小车识别地面黑线,温度计测量环境温度,自动门感知有人靠近,手机判断自己是否被拿起,都是传感器在工作。


前面小车已经能让电机转起来,也能通过编码器知道轮子实际留下了多少脉冲。但它依然像闭着眼睛开车:不知道前面有没有东西,不知道地上的黑线在哪里,也不知道自己正处在亮处还是暗处。

小车需要开始认识车外的世界。

人靠眼睛看光线和颜色,靠耳朵听声音,靠皮肤感受温度和触碰。STM32 没有眼睛、耳朵和皮肤,它只有一些引脚和一颗处理数字的内核。传感器就是它认识现实的入口:把真实世界发生的变化,翻译成芯片能接收的电信号。

传感器到底在"感受"什么

传感器总是在观察某一种真实的量:

现实中的变化 传感器可能给出的信息 常见用途
光强、颜色、反射 电平或电压变化 循迹、自动亮灯
温度 电压或数字数据 温度计、恒温控制
距离、是否靠近 电平、时间或数字数据 避障、自动门
声音 电压变化 拍手开灯、声音检测
加速度、角速度 数字数据 手机旋转、姿态判断
轮子的转动 脉冲 测速、记录路程

最后一行已经见过了。编码器就是一种传感器:轮子转动是现实里的动作,A、B 两相脉冲是它交给 STM32 的消息。STM32 不能直接看见轮子转了多少圈,却能数脉冲。

不同传感器的外形、接线和输出方式各不相同,但中间都在做同一件事:

text 复制代码
现实变化 -> 传感器 -> 电信号 -> STM32

温度不是电,距离不是电,黑线也不是电。它们先被传感器变成电平、电压、脉冲或一串数字,芯片才有机会去判断和处理。

STM32 能听懂的,只有电信号

对 STM32 来说,引脚上最直观的两种状态是高电平和低电平。前面按键松开、按下时,PB11 读到的就是这两种状态;编码器 A、B 相跳动时,给出的也是高低变化。

有些传感器只需要交出一个明确判断:

text 复制代码
有人 / 没人
太亮 / 不太亮
压到黑线 / 没压到黑线

这种结果用高低电平就足够了。高电平代表一种状态,低电平代表另一种状态。程序读到以后,可以像读按键一样做出选择。

但现实世界不是所有变化都只有两种答案。房间里的光可以一点点变暗,水温可以从 20 摄氏度慢慢升到 21、22、23,黑线边缘也不是一条只有"黑"和"白"的绝对分界线。

传感器面对这些连续变化时,往往会给出连续变化的电压:光越强,电压可能越高;距离越近,电压可能越低。具体是变高还是变低,要看每一种传感器的设计;重要的是,中间存在很多状态,而不只 0 和 1。

text 复制代码
 低电平                                 高电平
  0V ---- 0.8V ---- 1.6V ---- 2.4V ---- 3.3V
          很暗       一般      很亮

高低电平像一道判断题,答案只有两项;连续电压更像一把刻度尺,能保留变化有多大。两种输出没有高低之分,取决于程序到底需要一个明确结论,还是需要知道中间细节。

灰度传感器怎样看见黑线

循迹小车常用的灰度传感器,看的不是"颜色"这个词本身,而是地面对光的反射。

传感器上通常有一只发光元件和一只接收元件。发光元件往地面照出光,接收元件等待地面反射回来的光:

text 复制代码
发光 -> 地面 -> 反射光 -> 接收

白色表面通常反射更多光,黑色表面通常吸收更多光,反射回来的光就更少。接收元件感受到的光强不同,输出的电信号也会不同。

text 复制代码
白底:反射光较多 -> 接收信号较强
黑线:反射光较少 -> 接收信号较弱

这里说"通常",是因为现实不会像示意图那样干净。地面材质、环境光、传感器离地高度、黑线颜色和污渍,都会改变反射效果。同一块白纸在强光和暗处反射出的结果也不同;同一条黑线,传感器抬高一点,读数也会变化。

所以灰度传感器不是在辨认"这一定是黑色",它是在比较"现在收到的反射光多不多"。小车沿黑线走,本质上是在利用黑线和背景之间足够明显的反射差异。

八只眼睛排成一排以后

一只灰度传感器只能知道自己脚下的一小块地方偏黑还是偏白。把八只传感器横着排在小车前方,它们就能同时看到左边、中间和右边的地面。

text 复制代码
左侧                        右侧
[1] [2] [3] [4] [5] [6] [7] [8]

黑线落在中间,中央几只看到的反射会和两侧不同;黑线偏左,左边几只的变化会更明显;黑线完全跑到边上,最外侧的传感器也会给出线索。

传感器本身只负责报告各自看到的反射情况。至于"黑线偏左时,左右轮应该怎样变化",是 STM32 根据这些信息做出的下一步动作。眼睛负责看,程序负责决定往哪里走。

现实变化怎样变成程序里的数字

灰度传感器接收到的光强是连续变化的,而 STM32 处理的是数字。中间还需要一个翻译过程:把某个时刻的电压变成一个可以比较、显示和计算的数。

一根传感器线上的电压,并不天然就是 C 语言里的整数;芯片需要按自己的规则量一次这个电压,再给程序一个数字。

同一块灰度模块有时会先帮忙做出"黑线 / 白底"的二选一判断,有时也会把连续变化的原始信号保留下来。前一种更容易让小车先沿线跑,后一种能看见黑白之间到底差了多少。

最后橘猫说

传感器不是 STM32 的装饰品,而是它通向现实世界的入口。编码器把轮子的转动变成脉冲,灰度传感器把地面的反射差异变成电信号;从这一刻起,小车不再只是照着命令转动,也开始有机会根据自己"看见"的东西改变动作。

相关推荐
Brilliantwxx9 小时前
【STM32】基础定时器 TIM 详解:从极简原理到寄存器全解析
stm32·单片机·嵌入式硬件·mcu
DS小龙哥10 小时前
从呼吸心率到离床报警:60G雷达睡眠仪全栈开发实录(硬件+MQTT+小程序)DIY一台全功能睡眠监护仪
stm32·单片机·嵌入式硬件·物联网·小程序·智能家居
lhbweilai10 小时前
深挖FreeRTOS内核实现(二)
c语言·汇编·stm32·单片机
ebiobiz11 小时前
Zig 工具链编译 STM32 开发指南
驱动开发·stm32·嵌入式硬件
Zw-awa1 天前
反馈:让系统知道自己做得对不对
stm32
..Dauntless..1 天前
【stm32】串口——在MCU内部的工作过程
stm32·单片机·嵌入式硬件
Code_Solitude2 天前
开发板点灯实验源码
stm32·单片机·嵌入式硬件
Zw-awa2 天前
编码器读到的到底是什么:从脉冲到速度
stm32
笨笨饿2 天前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网