Arduino 指纹考勤系统:本地存储 + ThingSpeak 云端同步
零部件与物料
| 零部件 | 数量 | 备注 |
|---|---|---|
| Arduino Mega 2560 R3 | 1 | 主控,多串口、大内存 |
| R301T 指纹模块 (ElectroPeak) | 1 | UART,指纹录入/比对 |
| Micro SD/TF 卡模块 | 1 | 本地 CSV 日志存储 |
| DS3231 RTC 时钟模块 | 1 | I2C,掉电走时 |
| 3.5" TFT 彩屏 (MCUFRIEND) | 1 | 触控交互、显示记录 |
| NodeMCU ESP8266 (ESP-12E) | 1 | WiFi 上传 ThingSpeak |
| 公母杜邦线 | 1 套 | 模块互联 |
所需工具
- 激光切割机(外壳亚克力/木板)
- 电烙铁
软件与在线服务
- Arduino IDE
- ThingSpeak IoT 平台
项目简介
一套完整的指纹考勤终端:员工刷指纹 → 核验身份 → 记录进/出时间 → 计算工时 → 存入 SD 卡 (CSV) → 有网时经 NodeMCU 上传 ThingSpeak 云端 → 管理员远程导出 CSV 分析。断网数据本地缓存,来网自动补传;掉电不丢失配置与缓存(EEPROM + RTC)。
ThingSpeak 快速接入
- 注册 ThingSpeak 账号
- 创建 Channel,添加 5 字段:Date、Name、Enter、Exit、WorkHours
- 记下 Channel ID 与 Write API Key
- Arduino IDE 安装
ThingSpeak库(库管理器搜索) - 测试
WriteMultipleFields例程,确认能写入数据
系统架构
[指纹模块] → [Mega 2560] ← [RTC] → [SD 卡] ←→ [TFT 触控界面]
↓ 串口 (软串口/Serial2)
[NodeMCU ESP8266] → WiFi → [ThingSpeak Cloud]
核心功能模块
1. 指纹管理
- 首次上电进入「录入模式」:串口提示输入 ID、姓名,采集 2 次指纹生成模板
- 支持 11 位默认用户,可扩展至模块容量上限(通常 200+)
- 考勤模式:识别成功 → 读取 RTC → 判断是「签到」还是「签退」 → 写入 SD 卡
2. 本地存储 (SD 卡)
CSV 格式:Date,Name,EnterTime,ExitTime,WorkHours
掉电不丢失,支持随时导出。
3. 云端同步 (NodeMCU)
Mega 通过串口将待上传记录发送给 NodeMCU(格式:Date*Name*Enter*Exit*WorkHours),NodeMCU 解析后调用 ThingSpeak 库写入 5 个字段。上传成功返回 1,失败返回 0,Mega 据此标记记录为「已同步」或「待重传」。
// NodeMCU 关键片段
#include "ThingSpeak.h"
#include
char ssid[] = "YOUR_SSID";
char pass[] = "YOUR_PASS";
WiFiClient client;
unsigned long channelID = YOUR_CH_ID;
const char* writeAPIKey = "YOUR_WRITE_API_KEY";
String buffer = "";
void parseAndSend(String input) {
// 以 * 分割 5 字段
int i1=input.indexOf('*'), i2=input.indexOf('*',i1+1), i3=input.indexOf('*',i2+1), i4=input.lastIndexOf('*');
String date=input.substring(0,i1);
String name=input.substring(i1+1,i2);
String enter=input.substring(i2+1,i3);
String exit=input.substring(i3+1,i4);
String wh=input.substring(i4+1);
ThingSpeak.setField(1, date);
ThingSpeak.setField(2, name);
ThingSpeak.setField(3, enter);
ThingSpeak.setField(4, exit);
ThingSpeak.setField(5, wh);
int httpCode = ThingSpeak.writeFields(channelID, writeAPIKey);
Serial.print(httpCode == 200 ? "1" : "0"); // 反馈给 Mega
delay(17000); // ThingSpeak 限流 15 秒
}
4. TFT 交互界面
- 主页:实时时钟、今日考勤统计、指纹验证提示
- 管理菜单:添加/删除用户、查看记录、网络配置、系统设置
- 使用
MCUFRIEND_kbv+Adafruit_GFX驱动
电路连接要点
- TFT 屏蔽板直接插在 Mega 上,占用大量引脚;需用飞线从板底引出 SD 卡 SPI、RTC I2C、指纹 UART、NodeMCU 通信串口
- NodeMCU 与 Mega 共地,TX↔RX 交叉连接(电平兼容 3.3V/5V,NodeMCU 输入 5V 容忍,Mega 读 3.3V 高电平正常)
- 外接 12V 适配器供电,Mega 稳压输出 5V 给其余模块
外壳制作
提供 .dwg 激光切割图纸,3mm 亚克力/木板切割折弯组装,预留指纹仪窗口、屏幕框、电源口、USB 口。
拓展建议
- 增加 RFID 刷卡作为备选验证方式
- 上传目标改为 Google Sheets / 自建 MQTT / InfluxDB + Grafana
- 加入门禁联动:考勤通过同时驱动继电器开锁
- 多语言 UI、人脸识别二次确认
代码
- Mega 主程序:指纹、RTC、SD、TFT、NodeMCU 通信、状态机完整逻辑(附件
electropeak_attendance_code.zip) - NodeMCU 上传程序:解析串口数据 → ThingSpeak 写入 → 反馈结果(上文片段)
- ThingSpeak 测试例程:库自带
WriteMultipleFields
自定义零件与外壳
electropeak_attendance_code.zip:完整 Arduino 代码包attendanceboxlasercut.dwg:激光切割外壳图纸
原理图
见 Fritzing 文件(附件),含 Mega 接线、模块连接、电源分配。
制造工艺
- 借力云端释放IoT潜能:实现无缝连接与数据洞察
- DVD播放机:历史、技术与未来创新
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- 基于 Infineon 3D 磁传感器的 Arduino 无线磁通讯实验
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
- Arduino Cloud 传感器塔:温度、动作与气体监测
- 智能地下室通风系统:Arduino 驱动的湿度自动控制
- 基于 Arduino 与 Google Sheets 的实时 RFID 考勤系统
- Arduino智能防碰撞预警系统:超声波测距+声光分级报警
- 现代企业云存储十大核心价值:从灾备到协作的全维度赋能