1. 项目概述
这个自动迎宾门项目是我去年为一家小型零售店设计的解决方案。店主希望能在门口安装一个能自动识别顾客并做出欢迎反应的智能门系统,但预算有限,无法采购商业化的自动门产品。经过评估,我决定采用单片机作为核心控制器,搭配常见的传感器和执行机构,实现一个经济实用的自动迎宾系统。
整套系统的工作逻辑很简单:当传感器检测到有人接近时,门会自动打开,同时播放欢迎语音;当人离开后,门会自动关闭。听起来简单,但在实际开发过程中需要考虑很多细节问题,比如传感器的选型与安装位置、门的开关控制方式、防夹机制的设计等。下面我就详细分享这个项目的完整实现过程。
2. 硬件设计与选型
2.1 核心控制器选择
在控制器选型上,我对比了几种常见的单片机:
- Arduino Uno:开发简单,社区资源丰富,但成本相对较高(约80元)
- STM32F103C8T6:性能强大,价格适中(约25元),但开发门槛略高
- ESP8266:自带WiFi功能,价格便宜(约15元),但IO口较少
考虑到这个项目不需要联网功能,且对实时性要求不高,最终选择了性价比较高的STM32F103C8T6(俗称"蓝色药丸")。它拥有72MHz主频、64KB Flash和20KB RAM,完全能满足这个应用的需求。
提示:如果预算非常紧张,也可以考虑使用STC89C52这类51单片机,价格只要几块钱,但开发效率会低很多。
2.2 传感器选型与配置
人体检测是这个系统的关键功能,我测试了三种常见方案:
-
红外热释电传感器(HC-SR501):
- 优点:价格便宜(约8元),检测距离可调(3-7米)
- 缺点:受温度影响较大,偶尔会有误触发
-
超声波传感器(HC-SR04):
- 优点:检测精度高,不受环境温度影响
- 缺点:价格略高(约15元),需要复杂的信号处理
-
微波雷达传感器(RCWL-0516):
- 优点:穿透性强,可检测静止人体
- 缺点:价格较高(约25元),容易受金属物体干扰
综合成本和可靠性考虑,最终选择了HC-SR501红外传感器。安装时要注意:
- 传感器高度建议1.2-1.5米(成人腰部位置)
- 避免阳光直射传感器表面
- 检测方向略微向下倾斜,减少误检路过行人的概率
2.3 执行机构设计
门的自动开关是这个项目的另一个核心功能。根据门的类型和重量,可以选择不同的驱动方案:
| 门类型 | 推荐驱动方案 | 大致成本 | 适用场景 |
|---|---|---|---|
| 玻璃推拉门 | 直线电机 | 200-300元 | 轻型门(<20kg) |
| 木制平开门 | 减速电机+连杆 | 150-250元 | 中小型门 |
| 重型门 | 电动推杆 | 400-600元 | 大型门(>50kg) |
这个项目中使用的是普通的玻璃推拉门,重量约15kg,所以选择了行程60cm、推力30kg的直线电机(约220元)。同时为了安全考虑,增加了以下保护措施:
- 限位开关(防止门移动超程)
- 电流检测(遇阻自动停止)
- 红外对射传感器(防夹检测)
3. 电路设计与搭建
3.1 电源系统设计
整个系统需要为不同部件提供多种电压:
- STM32单片机:3.3V
- 传感器:5V
- 直线电机:12V
电源方案采用分级设计:
- 主电源:12V/5A开关电源(为电机供电)
- 第一级降压:LM2596模块(12V→5V)
- 第二级降压:AMS1117(5V→3.3V)
注意:电机启动时会产生较大的电流冲击,建议在电机电源端并联一个4700μF的电解电容,同时给单片机电源增加LC滤波电路。
3.2 控制电路设计
主要电路连接如下:
- 红外传感器OUT引脚 → STM32 PA0(外部中断)
- 限位开关(2个)→ STM32 PA1, PA2
- 红外对射传感器 → STM32 PA3
- 直线电机控制 → L298N驱动模块 → STM32 PB6,PB7
- 语音模块 → STM32 USART1
特别要注意的是电机驱动部分。L298N模块的接线方式:
- IN1,IN2接单片机PWM输出
- OUT1,OUT2接电机两端
- 使能端ENABLE接高电平
- 电源端接12V主电源
3.3 PCB布局建议
虽然可以使用面包板搭建原型,但为了可靠性建议设计PCB。几个关键点:
- 电机驱动部分远离信号线
- 数字地和模拟地分开,单点连接
- 传感器信号线尽量短
- 电源走线足够宽(建议1mm以上)
4. 软件设计与实现
4.1 主程序流程
系统软件采用状态机设计,主要状态包括:
- 待机状态:等待人体检测
- 开门状态:控制电机正转,播放欢迎语音
- 保持状态:门全开后保持一段时间
- 关门状态:控制电机反转
- 故障状态:检测到异常时进入
c复制typedef enum {
STATE_IDLE,
STATE_OPENING,
STATE_HOLDING,
STATE_CLOSING,
STATE_FAULT
} SystemState;
SystemState currentState = STATE_IDLE;
4.2 关键功能实现
人体检测中断服务:
c复制void EXTI0_IRQHandler(void) {
if(EXTI_GetITStatus(EXTI_Line0) != RESET) {
if(currentState == STATE_IDLE) {
currentState = STATE_OPENING;
StartOpening();
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
电机控制函数:
c复制void MotorControl(int speed) {
if(speed > 0) { // 正转开门
TIM_SetCompare1(TIM4, speed);
TIM_SetCompare2(TIM4, 0);
}
else if(speed < 0) { // 反转关门
TIM_SetCompare1(TIM4, 0);
TIM_SetCompare2(TIM4, -speed);
}
else { // 停止
TIM_SetCompare1(TIM4, 0);
TIM_SetCompare2(TIM4, 0);
}
}
防夹检测逻辑:
c复制if(ReadObstacleSensor()) {
MotorControl(0); // 立即停止电机
PlaySound(ALARM_SOUND);
currentState = STATE_FAULT;
}
4.3 参数调试技巧
几个关键参数需要现场调试:
- 开门速度:建议PWM占空比30%-50%,太快容易产生冲击
- 保持时间:通常3-5秒,可根据人流量调整
- 红外传感器灵敏度:通过电位器调节
- 防夹检测延迟:建议50-100ms,避免误触发
调试时可以先用串口打印状态信息:
c复制printf("State: %d, Motor Current: %d mA, Sensor: %d\r\n",
currentState, ReadCurrent(), ReadPIRSensor());
5. 系统集成与安装
5.1 机械安装要点
-
直线电机安装:
- 电机本体固定在门框上
- 滑块与门体连接处加装橡胶垫减震
- 确保运动轴线与门轨道平行
-
传感器安装:
- 红外传感器朝向门口45度角
- 对射传感器高度距地面约1米
- 所有走线使用线槽保护
5.2 系统调试步骤
- 先不接电机,测试传感器信号是否正常
- 单独测试电机正反转功能
- 测试限位开关触发是否准确
- 逐步增加负载调试
- 最后测试整套系统联动
5.3 功耗优化建议
为了降低待机功耗,可以采取以下措施:
- 使用带使能端的LDO,不用时关闭传感器电源
- 单片机进入低功耗模式,通过外部中断唤醒
- 选择高效率的开关电源(如DC-DC模块)
- 电机驱动模块不用时断电
实测优化后待机电流从120mA降至15mA左右。
6. 常见问题与解决方案
6.1 传感器误触发
现象:无人经过时门自动开关
可能原因:
- 红外传感器灵敏度太高
- 安装位置受热源影响
- 电源噪声导致信号干扰
解决方案:
- 调整传感器上的灵敏度电位器
- 改变安装位置,避开空调出风口等热源
- 在传感器输出端加10kΩ上拉电阻
- 软件端增加触发延时判断
6.2 电机运行不稳定
现象:门运动时卡顿或速度不均
可能原因:
- 电源功率不足
- 机械结构阻力过大
- PWM频率设置不当
解决方案:
- 检查电源是否至少留有30%余量
- 给轨道添加润滑剂,检查各部件安装是否到位
- 调整PWM频率到5-10kHz范围
- 在电机两端并联续流二极管
6.3 系统死机或复位
现象:运行一段时间后系统停止响应
可能原因:
- 电机干扰导致单片机复位
- 程序跑飞
- 电源电压跌落
解决方案:
- 加强电源滤波(增加电容容量)
- 在复位引脚加0.1μF电容
- 增加看门狗定时器
- 检查所有接地是否可靠
7. 项目优化与扩展
基础功能实现后,可以考虑以下增强功能:
-
人数统计功能:
- 增加第二个红外传感器
- 通过两个传感器的触发顺序判断进出方向
- 在OLED屏上显示当日客流量
-
语音定制:
- 更换为WT588D等可编程语音芯片
- 支持多时段不同欢迎词(如早/中/晚)
- 可通过USB接口更新语音内容
-
远程监控:
- 增加ESP8266 WiFi模块
- 将门状态上传到云平台
- 手机APP接收异常报警
-
节能模式:
- 根据时间段自动调整灵敏度
- 夜间完全关闭非必要功能
- 增加人体存在检测(代替移动检测)
这个项目从设计到最终安装调试总共用了约3周时间,物料成本控制在500元以内,相比市售的自动门产品(通常2000元以上)具有明显的价格优势。经过3个月的运行测试,系统稳定性良好,日均触发约300次,未出现严重故障。