智能无钥匙门锁:Arduino + Android 蓝牙密码控制舵机开锁
项目简介
本项目实现一款**安装在门内侧**的智能门锁,通过 HC-05 蓝牙模块与手机 App 通信,输入密码经 Arduino 校验后驱动 MG996R 舵机转动机械结构开/关锁。锁体完全隐藏门内,外部无破坏入口,安全性大幅提升。配套 Android App 基于 MIT App Inventor 2 无代码开发,提供基础版与进阶版两套源码。
硬件清单
- Arduino UNO ×1
- HC-05 蓝牙模块 ×1
- MG996R 金属齿轮舵机 ×1 — 扭矩大,驱动 3D 打印齿条结构
- 3D 打印锁体组件 — 源自 Thingiverse ridercz 设计,含 LT 轻量版
- 5V/1A 电源适配器 ×1 — 供电稳定
- 跳线、面包板/焊板 若干
软件工具
- Arduino IDE
- MIT App Inventor 2 — 可视化 App 开发,无需编程基础
机械结构组装
- 从 Thingiverse 下载 STL,建议打印 LT 版(耗材少、强度够用)
- 按图纸顺序组装齿条、齿轮、舵机固定座、锁舌等部件
- 四颗螺丝锁紧,确保齿条滑动顺滑无卡顿
- 舵机安装在锁体底部,输出轴连接齿轮带动齿条直线运动
电路连接
- HC-05:TX→Arduino RX (D0),RX→Arduino TX (D1) **经分压电阻 2k/3.3k 降至 3.3V**,VCC→5V,GND→GND
- 舵机:信号线→D9,VCC→5V(外接电源适配器),GND 共地
- **注意**:上传代码前需拔掉蓝牙模块 TX/RX,否则占用串口导致上传失败
通信协议设计
App 发送格式:COMMAND=PASSWORD\n
OPEN=xxxxxx— 开锁指令CLOSE=xxxxxx— 关锁指令=作为命令与密码分隔符,密码可含数字/字母/符号,**但不能含 '='**
Arduino 端按 '=' 分割,先校验密码(默认 arduPi,可修改),再判断命令执行开/关锁,并回传 OPEN/CLOSE/WRONG 供 App 显示状态。
Arduino 固件要点
- 使用
SerialEvent()非阻塞接收串口数据,遇 '\n' 或 '\r' 置标志位 String.reserve(50)预分配内存,防止碎片- 舵机角度:
openDoor() → 0°,closeDoor() → 65°(需根据实测微调) - 密码比较用
password.compareTo(value) == 0
App Inventor 开发步骤(进阶版亮点)
- **UI 组件**:ListPicker(蓝牙配对)、PasswordTextBox、两个 Button(开/关)、Label(状态显示)、BluetoothClient(不可见)
- **Blocks 逻辑**:
- 启动时检测蓝牙开启状态,未开则弹窗引导
- ListPicker.BeforePicking 设置设备列表,AfterPicking 连接选中设备
- 按钮点击时拼接
OPEN=或CLOSE=+ 密码框内容 + 换行符,发送 - 接收 Arduino 回传文本,更新状态标签:开锁成功/关锁成功/密码错误/连接断开
- **生成 APK**:Build → App (save .apk to my computer)
- **进阶版 (BTcontrol.aia)**:含连接状态显示(MAC/名称)、密码错误提示、自动重连、Google Play 上架版本
安装部署
- Arduino 烧录固件,按原理图接线,上电测试舵机转动、蓝牙通信
- 将锁体用 4 颗螺丝固定在门内侧合适位置,锁舌对准门框锁孔
- 蓝牙模块热熔胶固定于锁体预留槽位,Arduino 置于锁体底部
- 接入 5V 电源适配器,整理走线
- 手机安装 APK,配对 HC-05(默认密码 1234/0000),连接测试
安全与改进建议
- **密码存储**:当前明文硬编码,建议改用 EEPROM 存储哈希值,App 端支持修改密码
- **防重放攻击**:引入时间戳/随机数机制
- **低压报警**:监测电源电压,App 推送更换电池提醒
- **机械应急**:保留机械钥匙应急开锁结构
- **升级 ESP32**:内置 BLE/WiFi,支持远程开锁、指纹/人脸识别模块扩展
项目资源
- Arduino 完整代码(含注释)
- App Inventor 源文件:
door-lock_android_source.aia - 可直接安装 APK:
door-lock_android_app.apk或 Google Play 下载 - 3D 打印文件:Thingiverse #2350856
- Fritzing 原理图
制造工艺
- 银行金库内幕:历史、设计与安全未来
- 运河与船闸:美国水路运输的工程、历史与未来
- 打造安全的 Arduino RFID 门锁——分步指南
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
- 基于 Arduino、键盘与线性执行器的密码门锁
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
- Arduino 高速转速计 - 单次检测算法实测 6.5MHz 级响应,红外 + 红激光方案
- eDOT:基于 Arduino 的精密时钟与气象站,内置红外遥控
- 基于 Arduino 与 ESP8266 的 WiFi 智能门锁:手机扫码解锁