通过整合先进的传感器利用ESP32制作一个智能锁
扫描二维码
随时随地手机看文章
电子密码锁是一种安全装置,它通过数字序列(即个人识别码)来授予访问权限,而非使用传统的实体钥匙。这类系统在办公室、公寓大楼以及越来越多的现代“智能”住宅中都很常见。
在我之前的一些视频中,我介绍了几种制作简易电子密码锁的方法。这次我将向您展示我如何开发并构建了一个真正的密码锁的原型,该原型在特性方面比许多此类商业产品要先进得多。
该测试原型配备了一个具有标准尺寸的实心机械锁。在开发过程中,我逐步解决了一个个问题。我决定采用市场上容易获取且价格相对低廉的标准组件。
这就是机械电子部分的外观,它是用塑料板制成的,这样更便于观察,而且在开发过程中如果需要的话也能方便地进行修改。
我先来谈谈电子元件:
最后,是驱动钥匙在锁中移动的电机。在这个原型中,我使用了一种经过改装的小型、廉价的伺服电机,这种电机能够以连续的方式在任何方向上移动。我们在此不再详述改装方法,因为相关细节已在许多视频中有所说明,而且操作过程相对简单。我选择这种特定的移动方式是因为其通用性。如果在最终产品中我们使用带有金属齿轮的更大尺寸的伺服电机,那么无需对代码进行任何更改,只需进行最小的改动,就可以使用带有双向驱动器的无刷电机,或者使用带有 H 桥驱动器的常规电机。
我还为锁专门制作了一个特殊的轴承,这样电机就能带动钥匙左右移动,从而在测试过程中能获得较为接近真实情况的条件。
否则,所有这些采用表面贴装元件的电子设备都可以安装在一块比微控制器开发板稍大的印刷电路板上。
现在我们来谈谈软件部分。该代码的编写方式使得在一开始就几乎可以对锁的运行的每一个环节进行更改,而无需通读整个代码。
这是此类开发项目中的一项关键要求,因为通常在测试和更换组件时,需要对代码进行快速修改。我将详细介绍所有可以直接更改的变量,以及它们在电路中的作用:
首先,对该项目中所使用的 5 个 ESP32 引脚进行了定义。
接下来是发送电池状态数据的时间间隔。
偏移值是指在未发送任何移动指令时伺服器停止工作的位置。该值取决于改装后的伺服器中内置的两个电阻器的精度。
通过 S-U 和 S-L 参数,可以设定伺服器在解锁和锁定过程中的移动速度。
“IGNORE_TIME”是指在向电机发送指令时,霍尔传感器处于关闭状态的时间段。具体而言,如果该变量值为 0,则电机将永远无法启动。
“软启动时间”是指电机开始运转的起始时间。通过设定这个时间,可以避免在电机启动过程中出现电流峰值,从而避免因电机卡住而产生误报。
以微秒为单位定义的“制动脉冲”用于精细调节,以确保磁铁能够准确地停在“HOME”磁传感器下方。这个“制动”值是通过实验确定的,并且取决于所使用的电机类型。
“CURRENT_LIMIT”是指以毫安为单位的电流值,当电流超过此值时,电机就会被判定为已停止运转,并会发送关闭电机的指令。
为避免因电机停转而产生误报,只有在连续多次测量值均高于先前设定的电流限值的情况下,才会停止电机运行。连续测量的次数由“STALL_SAMPLES”参数来确定。
最后,浮点数 vZero 被用于校准,以显示正确的电池电压值。
对于访问控制和密码输入,我使用了一部装有安卓应用程序的智能手机,顺便说一下,这也是我使用的第一款安卓应用程序。或许可以做得更加专业些,但这并非我此次的主要目的,而只是为了能完全掌控锁屏状态。激活该应用程序时,会出现一个用于输入密码的字段,这是最简单的保护方式。
我之前提到过,这是我的第一个安卓应用程序,我原本没打算在它的开发上花费太多时间。否则,在这个项目中,安全方面是非常重要的,所以在最终产品中应该设置多个优先级和多层保护措施。输入正确的密码后,我们就能进入主菜单:
首先,该应用程序通过蓝牙连接与锁进行通信。在此过程中,会显示锁的状态(已锁定或已解锁),其下方是电池的状态,这是锁的重要组成部分。电池的状态会伴有相应的不同颜色。屏幕的中间有一个大的圆形按钮,通过它我们可以打开或关闭门。这是基本的用户菜单,在使用密码锁的 99% 的情况下应该足够使用。然而,有时可能会出现锁卡住的情况,或者我们想要更改锁闭/解锁的次数。为此,还有一个“设置”按钮,可进入下一个菜单。
在这里,我们可以首先更改钥匙的转动次数——默认为一(一次)或二(根据需要选择)。这种设置在退出设置界面后会生效。然后还有两个分别标记为“L”和“R”的按钮,用于手动移动电机。这个选项在钥匙卡住的情况下非常有用,因为手动移动在代码中是这样定义的:舵机以最大的力量转动,而电流传感器则被旁路。接下来是最有趣的部分,即这个设备在接近实际条件下的表现方式。我说“接近实际”是因为这里缺少的是安装在门内的锁定/解锁机制。然而,如今的锁件制作得非常精确,只需稍微多一点的力就能移动那个机制。此外,别忘了最终产品将使用比这个 1 美元的伺服电机强大得多、质量更高的伺服电机。
接下来是最为有趣的部分,那就是这个装置在接近真实环境中的表现情况。我之所以说“接近真实环境”是因为这里缺少了安装在门内的锁定/解锁装置。不过,如今的锁具制作工艺非常精细,只需多施加一点力就能转动那个装置。此外,我们也不要忘记,最终产品会使用比这个 1 美元的伺服电机强大得多、质量也更高的伺服电机。
示威活动
现在我将连接一个电流表,以查看设备处于闲置状态时的总耗电量。实际上,除了具备功能之外,这实际上是我们的首要目标——在设备不使用时尽可能降低耗电量。电池单次充电的续航时间取决于这一点。
可以看出,空闲功耗约为 30 毫安,看似不多,但实际上对于这类设备来说这是一个相当大的数值。该代码还包括了“轻睡眠”模式——这是“深度睡眠”模式和正常运行的微控制器之间的折衷方案。轻睡眠模式与深度睡眠模式之间的差异仅为几毫安,但在轻睡眠模式下,连接到 BLE 几乎是瞬间完成的,而深度睡眠模式下则可能需要数十秒甚至更长时间,这根本无法实际应用。目前,能耗最大的部件是位于微控制器板上的这个线性稳压器,它将输入电压从 8 伏降至 ESP32 正常运行所需的 3.3 伏。如果我用开关模式稳压器来替换这个线性稳压器(不幸的是,此刻我没有现成的),总功耗将降低到 3 至 5 毫安,这是该设备在这种硬件条件下正常运行的绝对最小值。
可以看出,空闲功耗约为 30 毫安,看似不多,但实际上对于这类设备来说这是一个相当大的数值。该代码还包含了“轻睡眠模式”——这是深睡眠模式和正常运行的微控制器之间的一种折衷方案。轻睡眠模式与深睡眠模式的区别仅在几毫安的范围内,但在轻睡眠模式下,连接到 BLE 几乎是瞬间完成的,而深睡眠模式下则可能需要数十秒甚至更长时间,这根本无法实际应用。目前,能耗最大的部件是位于微控制器板上的这个线性稳压器,它将输入电压从 8 伏降至 ESP32 正常运行所需的 3.3 伏。如果我用开关模式稳压器来替换这个线性稳压器(不幸的是,此刻我没有现成的),总功耗将降低到 3 至 5 毫安,这是该设备在这种硬件条件下正常运行的绝对最小值。
因此,为了节省电力,对硬件和软件进行了诸多调整,这种锁在正常使用情况下,平均电池续航时间最多约为一周。但众所周知,知名品牌的此类锁在单次电池充电的情况下,可以使用三到六个月。其秘诀在于使用了专门为这类电池供电设备设计的高度专业化的芯片。一种用于工业用途的此类芯片的制造商是诺帝克半导体公司,其专用芯片的功耗比例如在深度睡眠模式下的 ESP32 要低数千倍。这些芯片在待机模式下几乎不消耗任何电力。然而,这些工业芯片使用的是制造商开发的特殊框架,并且它们的编程方式对于每个系列都是独特的和不同的。
最后,简单总结一下。通过这个项目,您大致可以了解到一款设备从研发到投入商业生产的过程是多么复杂且耗时。特别是这个密码锁,尽管采取了各种措施,尤其是为了节能,但它仍未达到此类电池供电设备的标准,不过这无疑为后续使用专用芯片的进一步开发奠定了良好的基础,前提是编程逻辑保持不变。
本文编译自hackster.io





