非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
项目简介
利用 APDS-9960 手势识别传感器,结合 Arduino UNO、LCD 16×2、RGB LED 与舵机,打造一个完全非接触的手势密码门锁。仅需在传感器前挥手输入预设手势序列(如上、下、上、上、右、左),即可驱动舵机开锁。经测试,APDS-9960 仅兼容 Arduino UNO 或 Micro 3.3V 版本,Nano 与 Mega 2560 不稳定。
核心元件
- SparkFun APDS-9960 手势/接近/光感/色彩传感器 ×1
- Arduino UNO ×1
- 16×2 白字蓝底 LCD ×1
- RGB 共阴 LED ×1
- 4.75 kΩ 电阻 ×2(I2C 上拉)
- 1 kΩ 电阻 ×1
- 跳线若干
- 舵机(任意型号)×1
硬件组装要点
- LCD 接线:标准 4 位模式,对比度引脚若无 10 kΩ 电位器,可用 1 kΩ 电阻接地替代。
- APDS-9960 电平转换:模块仅支持 3.3V。SDA/SCL 各串联 4.75 kΩ 电阻上拉至 3.3V,再接 Arduino A4/A5。
- 中断引脚:APDS-9960 INT 脚接 Arduino D2(中断 0)。
- RGB LED:红脚接 A1,绿脚接 A2,共阴接地,配合 PWM 指示状态。
- 供电:可用 9V 电池 + DC 插座供电。
外壳制作
演示用纸箱开孔固定模块,亦可焊接至万用板做成永久装置。最终效果为手持盒子大小的独立门锁单元。
核心代码逻辑
密码设定
#define PINSIZE 6
String secret[PINSIZE] = {"UP","DOWN","UP","UP","RIGHT","LEFT"}; // 大写,仅支持四向
主要流程
- 页面 0(锁定态):读取接近度,检测到手靠近(≥40)切换到页面 1。
- 页面 1(输入密码):循环等待手势中断,调用
handleGesture()识别方向,逐位比对密码。正确显示 “Next” 并亮绿灯;错误亮红灯提示 “Wrong” 并回主页;未识别重试。 - 页面 2(开锁):舵机转 90° 保持 16 秒倒计时,随后归零回页面 0。
关键函数
interruptRoutine():中断标志置位。handleGesture():读取传感器手势枚举(UP/DOWN/LEFT/RIGHT/NEAR/FAR/NONE),更新 LCD 与全局变量。LCDClear()、blinkRed()、allOff()等辅助函数。
扩展建议
- 替换舵机为电磁锁或电子门锁,适配真实门禁。
- 增加 EEPROM 存储密码,支持掉电保持与远程修改。
- 接入 WiFi/蓝牙模块,实现手机 APP 配置与开锁日志上传。
- 优化手势识别阈值,适应不同光照与距离。
制造工艺
- 现代弹子锁的演变与制造
- 组合锁:设计原理、制造工艺与历史演变
- 智能缺水报警器 – DIY植物土壤湿度监测装置
- 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
- 仅用 3 根模拟口驱动 4×3 矩阵键盘:电阻分压识别键值
- 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
- 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
- Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
- Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南
- 为Arduino构建隔离模拟输入电路
- RGB 32 频段音频频谱可视化器:Arduino Nano 驱动 WS2812B 8×32 LED 矩阵
- Arduino UNO 精准视觉反应时间测试仪