二、系统总体方案设计

好,咱们进入正题。系统总体方案设计,说白了就是回答三个问题:这东西要干什么?用什么干?怎么连起来?我做了这么多年硬件,发现很多项目翻车,都是因为这一步没想清楚就急着画板子去了。

2.1 功能需求定义

先别急着选芯片,咱们得把需求掰扯清楚。门控儿童锁,核心就一句话:防止儿童误开门,同时保证紧急情况下能快速逃生

我个人习惯把功能需求分成三类:

  • 基础功能:电子锁控制、门状态检测、开锁/闭锁切换
  • 安全功能:防误触机制、紧急解锁、低电量报警
  • 交互功能:状态指示、声音提示、手动/自动模式切换

这里有个坑,我必须要说。我在项目中遇到过客户只提了「能锁门」三个字,结果做出来发现人家要的是指纹+密码+远程控制。你想想看,需求不明确,后面全是返工。

核心功能清单(我建议至少包含这些):

  • 门锁状态实时检测(开/关/半开)
  • 儿童锁启用/禁用切换(物理按键+电子控制)
  • 紧急情况下内部一键开锁(机械+电子双重保障)
  • 低电量预警(蜂鸣器+LED闪烁)
  • 防误触延时(比如按住2秒才生效)

2.2 技术选型

技术选型这块,我踩过的坑比走过的路还多。咱们一个一个说。

2.2.1 MCU选型

MCU是整个系统的大脑。选型时我主要看三点:功耗、IO口数量、成本

对于门控儿童锁这种电池供电的设备,我强烈推荐STM8L系列或者EFM8系列。为什么?

  • 待机功耗能做到微安级别,一节CR2032电池能用半年以上
  • IO口够用,一般8-16个就足够了
  • 价格便宜,批量采购不到2块钱

如果你非要上32位机,比如STM32F0,也不是不行。但说实话,有点大材小用。我记得有一次项目,客户非要上STM32F4,结果大部分外设都闲置着,白白增加了成本和功耗。

我的选型建议:

别追求高性能。够用就好。门控儿童锁不需要跑算法,不需要处理视频流,一个8位MCU绰绰有余。省下来的钱,用在传感器和机械结构上,用户体验会好很多。

2.2.2 传感器选型

传感器这块,主要就两个:门状态检测人体接近检测

传感器类型 推荐型号 作用 注意事项
门磁开关 干簧管MC-14 检测门开/关状态 安装位置要对准,偏差超过2mm就失灵
霍尔传感器 AH3503 检测锁舌位置 注意磁铁极性,装反了没信号
红外接近传感器 HC-SR501 检测儿童靠近 灵敏度别调太高,否则猫走过去都触发

嗯,这里要特别说一下干簧管。我在项目中遇到过一个问题:干簧管装上去没几天就坏了。后来一查,是安装时用力过猛,把玻璃管压裂了。所以安装时一定要轻拿轻放,最好用热缩管包一下。

2.2.3 执行器选型

执行器就是负责「动手」的部件。门控儿童锁的执行器主要是电磁锁微型电机

  • 电磁锁:响应快,断电即开(符合消防要求)。但功耗大,不适合长时间通电。
  • 微型电机+齿轮箱:功耗低,可以保持锁定状态。但响应慢,大概需要0.5-1秒。

我个人更倾向于电磁锁+机械弹簧复位的方案。为什么?因为安全。一旦断电,锁自动弹开,儿童可以推门出去。你想想看,如果用的是电机锁,断电后锁死在里面,那可就出大事了。

重要提醒:

执行器的驱动电路一定要加续流二极管!我曾经因为省了这个二极管,烧掉了三个MCU的IO口。别问我怎么知道的...嗯,都是泪。

2.3 系统架构框图

好了,需求明确了,器件选好了,接下来就是画架构图。我习惯用分层架构,这样后期调试和维护都方便。

系统架构大致分为四层:

  1. 感知层:门磁传感器、霍尔传感器、红外传感器
  2. 控制层:MCU(STM8L)+ 电源管理
  3. 执行层:电磁锁驱动、蜂鸣器、LED指示灯
  4. 交互层:物理按键、状态指示灯

这里我贴一段伪代码,展示一下控制逻辑:

// 主循环伪代码
while(1) {
    // 1. 读取传感器状态
    door_status = read_door_sensor();      // 门是否关闭
    child_lock_btn = read_button();        // 儿童锁按键
    
    // 2. 判断逻辑
    if (child_lock_btn == PRESSED && hold_time > 2s) {
        // 防误触:必须按住2秒以上才生效
        child_lock_enable = !child_lock_enable;
        beep(1);  // 蜂鸣器提示
    }
    
    // 3. 执行控制
    if (child_lock_enable == TRUE && door_status == CLOSED) {
        lock_engage();  // 上锁
    } else {
        lock_release(); // 开锁
    }
    
    // 4. 状态指示
    update_led(child_lock_enable);
    
    delay(100);  // 100ms循环一次,省电
}

这段代码看着简单,但实际项目中要考虑的东西可多了。比如按键消抖、低功耗休眠、异常状态处理等等。我建议你在原型阶段先跑通这个逻辑,再慢慢加细节。

架构设计要点总结:

  • 感知层和控制层之间加光耦隔离,防止干扰
  • 执行层单独供电,别和MCU共用电源
  • 交互层用独立IO口,方便调试
  • 预留一个串口,用于产测和固件升级

好了,系统总体方案就聊到这儿。下一章咱们会深入硬件电路设计,包括电源管理、驱动电路、保护电路这些实战内容。到时候我会分享一些我踩过的坑,保证让你少走弯路。