资讯动态

基于STM32的智能指纹密码门禁锁:ESP8266远程控制与红外测温设计

发布时间:2026/10/20 23:03:01 来源:尧图企业网站定制
1. 这题到底在考什么先把系统拆开看刚拿到基于STM32单片机智能电子密码锁指纹识别门禁锁无线WiFi视频尽快APP设计红外测温液晶显示及密码错误蜂鸣器报警提醒设计26-081这个题目时很多同学的第一反应是东西太多不知从哪下手。这很正常题目就是把一个完整门禁系统的功能全部堆在了一行字里。但如果把它拆开看其实就六个功能块主控、身份认证、远程控制、温度检测、人机交互、报警提醒。首先是主控题目点名了STM32默认就是STM32F103C8T6这一档原因很实在Cortex-M3内核、72MHz主频、64KB Flash、20KB RAM带I2C、USART、SPI这些常用外设芯片本身几块钱学习资料又多做课程设计和毕业设计都够用。再往上用F407当然也能跑但纯属浪费没必要跟自己的时间和预算过不去。然后是身份认证部分题目给了两套方案密码盘和指纹识别。密码盘一般用3x4矩阵键盘指纹模块则绕不开AS608这类光学指纹传感器。这里有个容易被忽略的细节——指纹模块和单片机之间走的是串口波特率常用57600但指纹比对本身是模块内部完成的单片机只负责下发采集指令和接收比对结果这大大减轻了主控的运算压力。很多人担心STM32跑指纹算法会不会卡顿其实完全不会因为算法根本不在STM32上跑。远程控制这块题目写的无线WiFi视频尽快APP像是机翻腔调实际要表达的是通过WiFi连接用手机App实现远程开锁和视频查看。WiFi用ESP8266模块性价比最高十几块钱支持TCP/IP协议栈烧个AT固件就能用。至于视频如果题目要求的是实时视频流那STM32本身是不具备摄像头视频编码能力的现实点的做法是外接一个带有WiFi视频能力的模块比如ESP32-CAM和主控分离工作或者用App通过ESP8266查询开锁记录和门磁状态来代替视频。后面的章节我会专门讲怎么做的取舍先说清这一点STM32做主控的项目里视频功能的实现路径必须重新设计不能硬塞给STM32。温度检测用的红外测温模块很明确——MLX90614系列。它通过I2C和主控通信测的是物体表面发出的红外辐射不需要接触皮肤就能读数这在门禁场景里就是测体温。液晶显示部分有人用LCD1602字符屏有人用OLED后者更清晰也更好看现在年轻人做东西普遍偏爱OLED。最后是报警提醒密码错误蜂鸣器响这是状态机里最简单的一个分支。基于状态机的软件架构、硬件模块之间的电气隔离、通信协议设计、多任务轮询的时序安排这些才是题目真正的考点。这篇文章就按照我实际调试这套系统的顺序来讲从硬件连线的坑讲到最后App对接的经验尽量把能踩的雷都给你标出来。2. 硬件接线和选型这些坑我替你踩过了2.1 指纹模块不是只接四根线就能跑AS608指纹模块在淘宝上买的时候店家通常会给你一个转接板板上有六个引脚VCC、GND、TXD、RXD、TOUCH和LED。核心的其实就四根电源、地、模块发送接单片机的RXD、模块接收接单片机的TXD。注意是交叉连接——模块TXD送数据出来必须进单片机的RXD单片机的TXD送命令下去必须进模块的RXD。很多人第一次接线把TXD和TXD直接对接结果指纹模块完全不响应查了半天发现是交叉线的问题。需要特别提醒两块第一AS608这个模块的供电要求是DC 3.6V到6V不建议直接从STM32的3.3V稳压输出上取电。为什么因为指纹模块内部的指纹比对瞬间电流能到100mA以上而STM32核心板上的AMS1117-3.3稳压器本来就是给主控芯片用的你再拖一个功耗不小的外设上去很容易把336的压差拉崩导致主控复位、屏幕闪、WiFi断连等灵异现象。最稳的接法是从USB的5V取电给指纹模块让模块自己板载的稳压器降到3.3V。这个坑我亲眼见过好几个人栽进去。第二AS608模块的返回数据里有两个字节代表确认码确认码为0x00就说明命令被正常执行。很多人在代码里不检查确认码导致后面所有逻辑看起来都对但指纹就是录不进其实问题出在前面某一步命令根本没被模块接受。2.2 矩阵键盘扫描行线列线都要加上拉3x4矩阵键盘一共12个键行线R1-R3接STM32的PA0-PA2列线C1-C4接PA3-PA6。扫描原理一句话先让所有行线输出高电平然后逐一拉低某一行再去读列线的电平变化从而判断是哪个键被按下。这是很经典的做法但实操中有一个很容易错的地方——键盘的连接端子如果没有内部上拉读到的一直是0。有些STM32开发板上的GPIO内部上拉默认是关闭的你在初始化的时候一定要设置成上拉输入模式GPIO_Mode_IPU。否则焊好的键盘接上去按哪个键都按不动。另外扫描过程中要处理按键抖动。机械按键按下和弹起的一瞬间电平会有大约10-20ms的不稳定区间如果不做消抖按下一次会被识别成两次甚至三次输入密码1234就会变成11234或者更离谱。我通常的做法是检测到按键变化后先延时20到30ms再读一次当前状态两次电平一致才认为按键有效。这个延时放在定时器中断里做不要用delay函数硬等原因后面讲软件框架的时候会展开。2.3 电磁锁和继电器和单片机完全隔离电磁锁是典型的大电流感性负载——工作电流几百毫安通断瞬间的反向电动势可能到几十伏。你要是直接把这玩意接到STM32的引脚上轻则复位重则把芯片烧了。正确做法是中间加一个继电器或MOS管做隔离而且要特别注意两点一是驱动继电器的引脚要加续流二极管。我在很多课程设计做的东西里看到有人不加这个二极管结果继电器断开瞬间把三极管或芯片引脚打坏。建议就是并一个1N4007负极接电源正极接继电器线圈的集电极侧。续流二极管的原理很简单电感电流不能突变断开瞬间线圈会产生反向电动势二极管给它一个安全泄放通道防止高压击穿驱动管。二是单片机的GND和电磁锁的电源GND要不要共地答案是必须共地。很多人在这一点上纠结过既然要隔离为什么还要共地这里的分工逻辑是隔离强电对弱电的干扰和保证信号参考电位一致两码事。你通过光耦隔离信号之后继电器线圈侧的电源和单片机侧信号之间需要共同的参考地否则光耦输出端的电平对单片机来说是个悬空的状态读到的逻辑电平完全不可靠。信号级隔离用光耦电源级参考必须共地这个度要拿捏清楚。2.4 红外测温模块的接线和精度问题MLX90614有I2C接口接法就是标准的SCL和SDA各接一根线上拉4.7k电阻到3.3V。需要注意MLX90614的默认I2C地址是0x5A数据手册上写的。接线看着简单实际上手容易出三个问题第一个问题是模块供电电压。MLX90614有3V版本和5V版本买到哪个版本就按哪个给给错了读数就乱飘。第二个问题是I2C总线上的电平。如果单片机和模块供电不同比如单片机3.3V、模块5VSCL和SDA必须做电平转换最简单的做法是串一个1k电阻再接上拉。不做转换的话模块的高电平输出对单片机的输入引脚来说就是超压长期运行迟早出问题。第三个问题是测量准确度。MLX90614测量的默认发射率被校准为1.0但人的皮肤发射率大约在0.98左右实测下来误差普遍在±0.3℃到±0.5℃之间。如果你在项目里报告里写误差±0.1℃评委一眼就会怀疑你没实际测过。我在实际项目里会在程序里做一步软件补偿把读到的物标温度乘以一个校正系数再加上一个偏移常数。系数的标定方式很简单拿一支水银体温计和自己对比室温环境多测几组算一个校准值写进去。这个细节虽然小但能让你在答辩的时候有数据、有解释。2.5 LCD和蜂鸣器的小讲究显示部分我建议用0.96寸OLEDI2C接口四个引脚ST7735之类的TFT彩屏也可以但没必要。OLED的好处是自发光、视角大、代码成熟U8g2库直接支持。液晶显示的内容规划好就行开机显示当前温度、门状态、时间等待密码输入时显示PASSWORD:指纹验证通过显示OPEN密码错误显示ERROR并伴随蜂鸣。蜂鸣器分有源和无源两种做报警提醒要选有源蜂鸣器。有源蜂鸣器内部带震荡电路给个高电平就响无源蜂鸣器需要MCU输出特定频率的方波才能发声。报警提示用有源蜂鸣器简单可靠只需要一个NPN三极管驱动别直接把蜂鸣器接在GPIO上它需要的电流比GPIO能提供的更大。响的时机也不用做太复杂密码错误响一声长鸣连续错三次进入30秒锁定并触发鸣叫指纹匹配失败时短鸣三声这就能把状态区分得很清晰。3. 软件框架状态机是这套系统的灵魂3.1 为什么必须用状态机第一次写这类项目的人通常会这么做在main函数里写一个while(1)里面从键盘读取、判断指纹、控制门锁、刷新屏幕……所有功能按一行行代码顺序执行代码从几百行膨胀到一千多行然后发现不同模块之间的互相干扰开始出现——比如正在做指纹比对的时候键盘按键没响应比如蜂鸣器响的时候OLED刷新变慢了。这就是把并发硬做成了顺序的必然结果。正确的思路是把系统看成一个状态机。我把这套门禁的状态拆成了五个空闲状态IDLE屏幕显示时间和温度等待键盘输入或指纹按下密码输入状态PWD_INPUT正在接收密码数字管理输入长度和显示掩码指纹验证状态FP_CHECK已经触发指纹模块比对等待模块返回结果开门状态DOOR_OPEN验证通过驱动继电器打开电磁锁倒计时5秒后自动落锁报警锁定状态LOCKED密码连续错误三次锁定30秒蜂鸣器周期性鸣叫状态机的核心价值在于任意时刻系统处在唯一状态每个状态只处理自己关心的事件别的状态的事件可以被忽略或缓存。这样一来你在密码输入状态去触发指纹比对代码上只需要一个状态迁移指令当前状态 FP_CHECK而不是在main函数里满世界加if判断。3.2 主循环和定时器怎么配合主循环采用节拍轮询模式。用一个定时器产生1ms中断在中断服务函数里做三件事更新键扫节拍计数每20ms扫描一次键盘消抖刚好在20ms这个节拍里完成更新超时计数比如密码输入超时30秒、开门保持5秒、锁定30秒都用计数变量累计更新蜂鸣器的发声时序保证报警节奏不受主循环阻塞影响主循环里则是一个大switch语句按当前状态去执行对应代码块同时不断轮询各种事件标志位。有的同学喜欢全部用中断、写回调那套方法在裸机项目里反而容易把代码弄得很难读而且多个中断源的优先级编排本身就容易出bug。轮询加中断混合的模式我用了这么多年在中小型嵌入式项目里就是最稳定、最好维护的。3.3 密码状态的代码骨架密码输入这块我用一个二维数组存用户密码和一个临时数组存当前输入。每次按键后做了四个判断按下数字键如果当前输入长度小于最大长度将数字存入临时数组并追加一个*显示按下确认键我用#键代替对比临时数组和用户密码数组两者一致进入开门状态不一致蜂鸣器警报并递增错误计数按下取消键我用*键代替清空输入数组回到空闲状态输入长度达到上限或者超时自动清空或回到空闲有个细节是在密码验证时要用循环比对而不是直接调字符串比较函数。为什么因为密码长度通常固定直接算好长度循环逐个比对自己写还少了调用开销和不确定性。uint8_t verify_password(uint8_t *input, uint16_t len) { uint8_t stored[6] {1,2,3,4,5,6}; if (len ! 6) return 0; for (uint16_t i 0; i len; i) { if (input[i] ! stored[i]) return 0; } return 1; }3.4 指纹模块的指令交互AS608指纹模块的命令分成好几个组采集指纹图像、生成特征、搜索比对、删除模板等。模块每次收到命令后执行完毕都会回传一个确认码和数据包。我在实操里验证过的基本流程录入指纹分两步第一步按第一次生成特征存缓冲区第二步提示请再次按同一手指再次采集后把两个特征合成模板存到模块Flash里的用户区。搜索比对是核心动作STM32往模块发送搜索指令模块在当前所有已注册的指纹模板里做匹配如果找到了就返回一个指纹ID找不到就返回确认码0x09。你在代码里直接读返回数据包的确认码字段就行0x00即匹配成功。这里有几个容易踩的坑第一模块启动需要一小段时间大概100ms上电后不要立刻发指令先延时第二录入指纹那个动作里手指按下去不要太快松开模块需要大约1秒的连续按压来扫描指纹图像太快会报采集超时第三注册的指纹模板存储在模块板上Flash里断电不丢但如果你换了一块模块存储的指纹数据就没了这一点在做演示和交付的时候提前讲清楚。指纹触发方式我选的是TOUCH引脚查询而不是串口命令轮询。AS608的TOUCH引脚有手指触碰时会输出一个高电平脉冲。把TOUCH引脚接在STM32的外部中断引脚上这样当用户手指碰上去时单片机立刻收到中断事件再在中断里置一个有手指按下的标志位。主循环检测到标志位以后再去给模块发比对指令。这个方式比一直轮询串口省心很多也不会阻塞其他逻辑。void EXTI_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) ! RESET) { touch_flag 1; // 手指触碰标记 EXTI_ClearITPendingBit(EXTI_Line0); } }主循环里看到touch_flag就发指纹比对指令比对期间有一个超时保护如果30秒内没有判定结果就自动清掉状态回到空闲。4. WiFi与App远程开锁ESP8266的三种连接方案4.1 ESP8266做透传还是做协议解析远程功能无非是让手机App能和单片机通信。ESP8266作为WiFi模块接入家庭路由器App通过路由器访问到ESP8266再由ESP8266通过串口和STM32通信。这个链路里ESP8266扮演的是网桥角色。但我做过不少方案对比发现这里的实现路径差异很大直接影响工程的复杂度和稳定性。第一种方案ESP8266烧NodeMCU固件或官方AT固件由STM32主动通过AT命令控制模块连接WiFi、建立TCP连接数据透传模式收发。优点是STM32全盘掌控缺点是AT指令的时序非常脆——网络断开重连、TCP超时这些情况要处理很多分支稍有不慎模块就卡死在AT返回状态里。做过的人都知道ESP8266的AT固件连路由器偶尔抽风要等很久才能重新握手。第二种方案ESP8266烧Native SDK做的自定义固件直接在模块上跑一个小服务器。STM32只通过串口发送开门读状态这样的简单命令模块自己负责连网、维护连接、解析收到的JSON数据。这等于把通信压力从主控挪到了WiFi模块上。稳定性好很多但需要写一点Lua脚本或C代码给8266。第三种方案用ESP8266做MQTT客户端连接公共的MQTT服务器手机App也通过MQTT收发消息。这是目前很多物联网项目的标配做法。单片机这边逻辑简化到极致串口收到OPEN字符串就开门收到ALARM就报警。不管是哪种方案App到设备的链路里有一个关键的规则要遵守不要设计成App直接绑定设备IP的形式。家用路由器的DHCP分配IP可能是动态的今天设备是192.168.1.5明天重启就成了192.168.1.9App还在连老IP必然失败。比较稳的做法是在局域网里用UDP广播做设备发现或者干脆在ESP8266上固定一个静态IP。学校实验室的网络环境里路由器允许设备列表管理固定IP这条路最直接。4.2 单片机与ESP8266的串口协议设计STM32和ESP8266之间的数据格式用JSON虽然包了一段解析代码但好处是后续扩展特别方便。比如设备主动上传一条JSON{mac:A0:20:A6:12:34:56,door:closed,temp:36.5,time:2025-01-12 14:30:22}App要发指令就发{type:cmd,id:1,action:open}STM32那边的串口接收中断按帧收一帧以\n结尾然后丢给一个轻量级的JSON解析器抽取action字段。很多STM32课程设计资料里都喜欢自定义极其简短的协议比如发0x01表示开门、0x02表示查询确实代码更少但只要有新的功能要加比如远程报警、远程录入指纹协议就会变得一团糟。用JSON做个最小子集只解析一层代码量也就多几十行可维护性凭空高了一个层次。要小心的是STM32串口接收中断容易被长帧刷爆。ESP8266上报的数据可能比较大如果你用单字节中断一进来就处理中断服务函数太长会把主循环卡死。建议做法是中断里只把收到字节放到环形缓冲区主循环里再做帧头帧尾的拆分和解析把接收和处理彻底分离。void USART2_IRQHandler(void) { if (USART_GetITStatus(USART2, USART_IT_RXNE) ! RESET) { uint8_t ch (uint8_t)USART_ReceiveData(USART2); rb_write(rx_ringbuffer, ch); // 环形缓冲收得再快也不丢 } }4.3 App开发Blynk够用但要明白它的边界做App这块很多人会直接推荐你用Blynk因为拖拽界面、配几个控件就能远程控制单片机看起来特别快。实际做起来也确实快但有几个现实限制Blynk免费版的数据点数有限你要展示温度、门状态、指纹状态、开关按钮、锁定按钮一共要占掉多个数据点可能会触发收费。Blynk的历史数据存储不是实时查询刷新有点延迟不适合做实时门铃视频这种需求。要控制密码设置、指纹录入这类带交互流程的功能Blynk的控件支持是不够的你需要自己做一套有逻辑的App界面。如果只做一个远程开门、锁定、查看温度的演示级AppBlynk完全够用。但如果你的题目答辩要求App能够显示开锁记录、设置临时密码、实时观察温度曲线这些交互功能那我建议用安卓原生开发或微信小程序来做。我在实际项目里最终是用微信小程序内嵌WebSocket对接ESP8266的TCP服务器效果很直观小程序界面显示实时温度、门锁状态、一个开锁按钮和一个报警记录列表。微信小程序的好处是用户手机不需要安装额外的APK做课程设计的展示环节非常加分。这里有另外一个比较容易忽略的点如果ESP8266是作为TCP服务器在局域网里监听小程序里要用WebSocket的IP地址和端口要填对而且手机和小程序连的必须是同一个WiFi。演示的时候如果两台手机一台连着实验室WiFi、一台用的手机热点就会明明代码没问题就是连不上这是项目展示现场最高的翻车点。5. 红外测温与门禁联动的策略设计5.1 读取MLX90614的温度数据MLX90614通过SMBus协议读取RAM里的两个16位寄存器0x07是红外温度数据也就是物体表面温度0x06是环境温度。原始数据换算公式是0.02℃/bit读取到的16位值乘以0.02再减去273.15就是开尔文换算后的摄氏度。代码上我直接用STM32硬件I2C或者模拟I2C读就行。float mlx90614_read_temp(uint8_t reg) { uint8_t buf[3]; uint8_t addr 0x5A; // 发送读寄存器命令 I2C_Start(); I2C_SendByte((addr 1) | 0); I2C_SendByte(reg); I2C_Stop(); // 读取3字节数据low, high, PEC I2C_Start(); I2C_SendByte((addr 1) | 1); buf[0] I2C_RecvByte(ACK); buf[1] I2C_RecvByte(ACK); buf[2] I2C_RecvByte(NACK); I2C_Stop(); uint16_t raw (uint16_t)((buf[1] 8) | buf[0]); return raw * 0.02 - 273.15; }第三个字节是PEC校验码如果要求严谨应该校验这个字节来判断通信链路是否正常。我在项目里读取完不校验PEC因为I2C线很短、环境干扰小不校验问题也不大。但如果你做的是产品级的项目PEC校验建议加上毕竟这是数据完整性的最后一道防线。5.2 温度数据在门禁里怎么用红外测温放进智能门禁系统通常有两种设计思路你写文档做答辩的时候这两条思路都会用到。思路一是测温联动当有人按指纹或输密码时系统同步测量其额温温度高于阈值比如37.3℃时拒绝开门并发出报警提示门禁自动进入禁行状态。这种做法在常态化防控场景里有现实意义也是题目里放红外测温的核心诉求。思路二是测温记录每次开门都记录一条温度数据和指纹ID、时间戳一起存进EEPROM或者通过WiFi上传到App端方便事后追溯。我实现的时候把两个思路合在一起测温成功且温度正常才执行开锁动作否则即便指纹验证通过也不开锁。所以你会在我的系统流程里看到指纹匹配成功后先读一次MLX90614判定温度范围在34℃到37.3℃之间再给继电器发送开门指令。如果体温偏高LCD显示TEMP HIGH蜂鸣器急促鸣叫同时把这量信息通过WiFi上报到App。这里需要提醒一下MLX90614测的是物体表面红外温度和医学上的核心体温不是一个概念。额头如果贴了刘海或者出汗测出来的值会偏低很多如果站在高温环境里夏天室外晒过太阳额温会虚高。在做文档和演示时一定要说明这是非接触式体表测温参考值而不是医学测量值这样答辩时不会被人揪住测温不准这点不放。5.3 一个实际处理过的误报警问题调试的时候我遇到过一个很有意思的问题夏天中午实验室空调停了室温升到33℃。有同学模拟演示体温过高拒绝开门的场景手放上去之后MLX90614读出来的温度确实超过37.3℃于是报警响起。但其实那人是靠红外辐射加热了传感器旁边的壳体导致环境温度数据被拉高物标温度读数跟着受到了串扰。解决办法是在软件里加一个温度突变检测如果两次读数的差值超过1.5℃就再多读三次取中间值并且将连续五次读数做滑动平均。这个滤波逻辑在处理红外测温这种易受干扰的传感器时很有用。你最终给评委演示的时候用这个逻辑能解释为什么读数稳定比干巴巴地说我做了软件滤波更有说服力。6. 联调排错从点不亮到误开锁的真实问题复盘6.1 供电不稳导致的间歇性抽风系统功能全部做完、进入联调阶段后的第一个大坑就是电源。我最初用的是USB线直接给STM32核心板供电指纹模块、ESP8266、OLED、蜂鸣器全都从核心板的3.3V和5V引脚取电。结果发现一个规律只要ESP8266开始连路由器屏幕就闪一下继电器吸合瞬间蜂鸣器乱响一声指纹比对的时候复位重启。典型的欠压欠流症状。后来我换了一个5V/2A的适配器通过面包板的电源轨统一供电5V走一路给ESP8266和指纹模块3.3V走一路给STM32和OLED地线全部汇总到一点星形接地。问题直接消失。所以做这种多外设系统第一优先解决的是电源架构不是代码。我不是第一次见到有人排错两天最后发现是USB口供电不足。具体怎么设计电源分配我建议用DC-DC降压模块把适配器的5V转到稳定的5V轨再用AMS1117-3.3生成3.3V轨。大功率外设继电器线圈、蜂鸣器、指纹模块直接接5V轨STM32和OLED接3.3V轨。电容也不能省每个供电节点并一个100uF电解电容加一个104陶瓷电容吸收瞬态电流冲击。6.2 指纹模块UART连不上的排查链路遇到指纹模块连不上不要急着换模块按照这个顺序排查用万用表量指纹模块VCC和GND之间的电压确认在3.6V-6V范围内。确认STM32和模块之间是否交叉接线TXD-RXD、RXD-TXD。检查串口初始化波特率要跟模块匹配。AS608默认波特率是57600但有些商家出厂改过。你可以先用USB转TTL接模块打开串口助手发一个0xEF 0x01 0xFF 0xFF 0xFF 0xFF 0x01 0x00 0x08 0x03 0x01 0x00 0x05获取模块参数看看模块有没有返回。返回了说明模块活着、波特率正确。如果串口助手能通、板子不通那就是引脚复用或者重映射没有配置对。很多STM32核心板的串口1引脚和板载LED有复用冲突检查芯片原理图别抢了引脚。6.3 误开锁没有做输入合法性检查有一次我调试过程中发现在密码输入状态随便敲满六位数字系统竟然把门打开了。查了一下代码原来是密码验证函数里我拿临时输入和存储密码逐位比较但没有检查用户是否按了确认键。也就是说只要输入长度够了就触发验证。这在正常逻辑里不会误判但如果你在考试现场展示时评委随手在键盘上乱按一串数字刚好撞上一个匹配的密码门就开了。正确逻辑是只有按下确认键(#才触发密码比对比对之前先检查输入长度是否等于密码长度不等于就直接报错比对失败还要分情况处理——是长度不对还是数字不对。这个细节看似微小但检测的就是你有没有把状态和事件分清楚。6.4 现场演示最容易翻车的三个环境变量最后给各位分享几个在做项目展示时最容易翻车的地方我本来想直接讲完收工但这几个实在太重要一定得列出来一是在演示WiFi遥控时千万别依赖现场WiFi。展馆或教室的无线网络可能开了AP隔离设备之间不能互相访问。稳妥做法是自备一个小路由器让ESP8266和你的手机都连着它组成一个独立局域网。二是红外测温的演示环境温度。MLX90614如果正对着一扇窗户窗户的玻璃温度变化会导致读数跳来跳去。演示前选一个稳定的室内角落避免传感器视野里有空调出风口、太阳直射等干扰源。三是电磁锁的供电。锁体需要的电压和电流不同有些电磁锁标称12V供电你需要额外的12V电源适配器。在测试的时候我建议先用5V继电器控制一个LED灯模拟开锁动作等全部逻辑验证无误后再接真实电磁锁。这样可以避免调试时频繁吸合电磁锁把电源搞崩也防止锁体长时间通电发热。这台系统做到最后软件部分其实只占了工作量的一半另一半都花在排查硬件连接和通信问题上。但恰恰是这些问题才真正锻炼了人——毕竟门禁系统这种东西难点从来不是某一项单独的技术而是那么多模块在同一个系统里稳定协作。每解决一个问题你对这套系统的理解就深一层。做完之后回头看这个题目不仅不难反而是把嵌入式开发里最典型、最有价值的场景都串起来练了一遍。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑