人脸识别项目常见问题补充

Tutorial: 卓越工程师 Category: 嵌入式 Published: 2026-10-23 11:05:29 Views: 1 Likes: 0 Comments: 0

274.1.0人脸识别项目常见问题补充

本节是项目器件、排障和接线的补充说明,没有新增或现场讲解业务源码,因此不在标题下补写代码。下文的接口方向与引脚分配已用课程归档中的 K210 face.py、STM32 15PRJ 工程和语音模块固件交叉核对。

一、人脸识别项目常见问题补充

1.1 人脸识别红外测温门禁项目器件清单

课程配套硬件清单的查看方法是:打开课程提供的清单链接,在文档末尾找到 RT-Thread 人脸识别项目,再查看模块名称、数量、参考图片和购买链接。例如,项目中 K210 开发板的数量为 1。

本项目实际涉及的主要器件如下:

功能器件选型时必须核对的项目
主控制器STM32F103ZE 开发板芯片型号、板载接口位置、供电方式以及 BSP 是否与课程工程一致
人脸检测与识别K210 开发板、摄像头及配套固件/模型开发板具体版本、摄像头接口、Flash 容量、引脚丝印和固件版本
语音播报SU-03T 离线语音模块、扬声器模块版本、5 V 供电、3.3 V 串口电平、扬声器阻抗/功率以及课程固件
非接触测温GY-906 模块(核心器件为 MLX90614)模块供电电压、SCL/SDA 丝印、上拉电阻和传感器视场
信息显示I²C OLED 屏分辨率、驱动芯片、I²C 地址以及插座引脚顺序
门锁动作舵机额定电压、堵转电流、机械行程和 PWM 控制范围
连接与供电杜邦线、稳定电源等线序、接触可靠性、电源余量和所有模块是否共地

视频演示时,语音模块按清单中较便宜的对应型号购买,红外温度传感器按当时链接中的第一个选项购买。这只能作为课程录制时的参考,不能把“最便宜”或“第一个选项”当成长期有效的型号规则。商品链接、版本和图片都可能变化,购买前应以课程图片、芯片丝印、接口定义和电气参数逐项核对;链接失效或实物不一致时,应向课程维护者或答疑群确认更新后的链接。

特别要区分“模块供电电压”和“信号电平”。例如 SU-03T 可用 5 V 供电,但其串口电平为 3.3 V;不能因为电源接 5 V,就把 5 V TTL 信号直接送入 STM32 或 K210 的 I/O。舵机的瞬时电流也可能远高于控制板能提供的电流,宜使用有足够余量的独立 5 V 电源,并与主控共地。

1.2 人脸识别红外测温门禁项目问题查找方法

这个项目同时包含 K210、STM32、语音模块、红外测温、OLED、舵机和多路供电。有效的排障方法不是反复改代码或一次更换所有器件,而是先建立已知良好的基线,再按“供电 → 单模块 → 通信链路 → 业务逻辑”的顺序缩小范围。

1.2.1 先用网盘代码测试

课程建议先烧录网盘中的已知可用代码,这一步本质上是建立对照组。测试时应保证以下条件一致:

  1. STM32 使用课程对应的完整工程、芯片型号和 RT-Thread 配置,而不是只复制某个 .c 文件。
  2. K210 同时使用配套的 MaixPy 固件、模型地址、模型文件和 face.py;仅替换 Python 文件并不能排除固件或模型不匹配。
  3. SU-03T 使用课程归档中的配套语音固件,串口参数与 STM32 端一致。
  4. 接线、供电、电平和外设版本与课程基线一致;每次只改变一个变量并记录现象。
  5. 烧录完成后先确认各板能够独立启动,再连接板间串口和执行器。

若网盘版本可以正常运行,说明当前硬件、固件、模型、供电和接线组合在这一测试条件下基本可用,问题大概率位于自写代码或工程配置与基线的差异中。它并不能证明每条线路在所有工况下都没有接触不良,也不能排除舵机动作时才出现的电源跌落等间歇故障。

反过来,网盘版本不能运行也不能直接断定“硬件一定损坏”。错误的烧录目标、K210 固件与模型不匹配、串口参数不一致、驱动或端口选错、供电不足以及接线错误,都可能让已知代码表现为失败。此时应继续按层检查,而不是立即购买新器件。

建议为基线测试记录以下证据:

  • STM32 和 K210 的启动日志;
  • 各电源轨的静态电压,以及舵机动作时的最低电压;
  • 串口的波特率、数据位、校验位、停止位和 TX/RX 方向;
  • I²C/SMBus 设备是否应答;
  • 每个固件、脚本和模型文件的版本或校验值;
  • 最小系统能否稳定重复通过同一测试。
1.2.2 然后再查找软件代码问题

已知基线可运行后,再把自己的工程与基线逐项比较。推荐按以下顺序排查:

  1. 比较板级配置:确认 board.h 中 UART2、UART3、PWM3 通道 4 等配置与课程工程一致。
  2. 比较设备初始化:确认 OLED、GY-906、UART2、UART3 和 PWM 的初始化均成功,设备查找没有返回空指针。
  3. 先看原始数据:暂时绕过人脸识别后的综合逻辑,分别打印 K210 帧、测温值和串口接收字节。
  4. 核对协议:课程 K210 数据帧以 0xAF 开头、以 0xFA 结尾;语音模块命令是另一套 0xAA 0x55 ... 0x55 0xAA 帧,不能混用。
  5. 一次替换一个子系统:先只接 K210,确认 USART2;再接语音模块,确认 USART3;随后加入测温、OLED 和舵机。
  6. 做受控替换:用同一根线、同一端口和同一固件替换单个模块。若同时换代码、线和模块,就无法知道是哪一项产生了变化。

若连基线都不能运行,可按下表定位:

现象优先检查
开机无日志或反复复位电源容量、极性、短路、启动脚、烧录是否成功
K210 有识别画面,STM32 无数据K210 IO9 到 PA3、共同地、115200 波特率、UART2 映射和电平
STM32 已收到人脸帧,语音不播报PB10 到 SU-03T B6、语音固件、5 V 供电、扬声器和 UART3 参数
温度始终异常或没有读数PB6/PB7 是否接反、传感器供电、上拉、总线占用和模块地址
舵机一动系统就复位舵机电源电流不足、地线压降、去耦不足或舵机机械堵转
OLED 与测温只能工作一个二者是否真正共用开漏总线、地址是否冲突、上拉是否过强以及软件是否把总线脚改成推挽输出

“Python 代码配置”属于 K210 侧的软件/运行环境问题,不应笼统归入硬件故障。只有在供电、烧录、固件、配置和接线都受控后,替换某个硬件能稳定复现故障,才有充分依据把问题定位到该器件。

1.2.3 功能实现

本项目的通信关系可概括为:

K210 人脸识别 → USART2 → STM32 状态判断 → USART3 触发语音 / PWM 控制舵机

同时,STM32 通过 PB6/PB7 读取 GY-906,并在同一组线上驱动 I²C OLED。课程归档中的项目说明列出了人脸录入、识别、删除、测温、语音提示、屏幕显示和舵机开关门等功能;实际调试时应先验证每条数据链,再组合成整机流程。

语音模块的接法是:

  • SU-03T 的 B6 配置为 UART1_RX,连接 STM32 的 PB10/USART3_TX;
  • 模块使用 5 V 供电,GND 与 STM32 的 GND 相连;
  • 扬声器接模块规定的功放输出端,阻抗和额定功率应符合模块规格;
  • 当前课程程序只由 STM32 向语音模块发送播报命令,因此只使用 PB10 → B6 这一条数据线;若以后需要模块回传数据,还要把模块 TX 接到 STM32 的 PB11/USART3_RX,并检查电平和协议。

视频还展示了语音模块的接线、烧录、串口测试以及接入 STM32 的步骤。这几个阶段应分开验证:先确认固件能正确烧录,再用串口工具验证模块能识别完整命令帧,最后接入 STM32。烧录接口与业务 UART 的引脚和工具可能不同,不应仅凭“串口”二字混接。

1.2.4 硬件连线

课程配套源码确认的整机接线如下。这里的 K210 “9/10”是课程脚本交给 FPIOA 的 IO 编号;不同 K210 开发板的排针位置和丝印可能不同,必须以所购板卡原理图和课程实物图确认,不能只按排针顺序数第 9、10 脚。

模块端方向STM32 端作用与依据
K210 IO9(UART2_TX)K210 → STM32PA3(USART2_RX)face.py 把 IO9 映射为 UART2_TX;STM32 工程把 PA3 配为 UART2_RX
K210 IO10(UART2_RX)STM32 → K210PA2(USART2_TX)face.py 把 IO10 映射为 UART2_RX;STM32 工程把 PA2 配为 UART2_TX
K210 GND—STM32 GND提供共同电位参考;没有共地时 UART 电平没有可靠基准
SU-03T B6(UART1_RX)STM32 → 语音模块PB10(USART3_TX)STM32 通过 UART3 发送语音命令
SU-03T 5V、GND—5 V、GND模块电源为 5 V,业务 UART 为 3.3 V 电平
舵机信号线STM32 → 舵机PB1(TIM3_CH4)课程工程使用 pwm3 通道 4;STM32F103 默认映射为 PB1
GY-906 SCLSTM32 ↔ 传感器PB6SMBus/I²C 时钟线
GY-906 SDASTM32 ↔ 传感器PB7SMBus/I²C 数据线
OLED SCL、SDASTM32 ↔ OLEDPB6、PB7课程工程使用软件 I²C,与 GY-906 共享两根总线线

UART 必须按 TX 接对端 RX、RX 接对端 TX 的规则交叉连接,并保证波特率、帧格式和逻辑电平一致。课程 K210 脚本把 UART2 初始化为 115200、8 数据位、无校验、1 停止位;若修改一端参数,另一端也必须同步修改。当前 STM32 代码主要接收 K210 的识别结果,所以排查时应优先观察 IO9 → PA3 这条路径。

舵机应把信号线接 PB1,但电源线不应由 STM32 的 3.3 V I/O 或小电流稳压输出直接供电。使用独立 5 V 电源时仍须把舵机地与 STM32 地相连,并在上电前检查 PWM 初值和机械限位,防止堵转产生大电流。

GY-906 的 SCL 与 SDA 分别接 PB6、PB7,不可互换。I²C/SMBus 的 SDA、SCL 通常采用开漏方式,需要上拉电阻;若 GY-906 和 OLED 模块都自带上拉,多个上拉并联会减小等效阻值,应结合总线电容和低电平灌电流检查。两者共享 PB6/PB7 并不意味着“同时直接驱动”:任一驱动都必须在输出高电平时释放总线,且两个器件的地址不能冲突。

视频所说的“屏幕直接插在板子上”只适用于课程同款开发板、同款插座和正确方向。换用其他 OLED 时,必须先核对 VCC、GND、SCL、SDA 的排列和电压;插座外形相同不代表针脚定义相同。插拔模块前应断电,避免反接或带电错位。

整机首次上电建议采用以下顺序:

  1. 断电状态下用万用表检查 VCC 与 GND 是否短路,并逐根核对线序。
  2. 只给 STM32 上电,确认系统日志和基础程序正常。
  3. 接入 K210,先验证 UART2 收发;再接入 SU-03T,验证 UART3 播报。
  4. 接入 GY-906 和 OLED,分别确认测温与显示,再验证共用总线。
  5. 最后接舵机及其独立电源,观察动作瞬间电压是否跌落。
  6. 所有单模块测试通过后,再运行完整的人脸识别、测温和开门流程。

参考资料