基于 Arduino 与 Google Sheets 的实时 RFID 考勤系统
组件与物料
| 组件 | 数量 |
|---|---|
| Arduino UNO R3 | 1 |
| Arduino Ethernet Shield 2(W5500) | 1 |
| RFID-RC522 模块(含 S50 白卡/钥匙扣) | 1 |
| 杜邦线若干 | 1 |
软件与云服务
- Arduino IDE
- Google Sheets(在线表格)
- Google Apps Script(云端脚本)
- Pushingbox(中转服务,用 Google 账号登录)
项目背景
室内空气污染往往比室外严重 2~5 倍,灰尘、过敏原引发打喷嚏、眼睛痒甚至哮喘。本项目利用 RFID 刷卡考勤,配合 Ethernet Shield 通过 Pushingbox 将 UID 实时推送至 Google Sheets,实现零成本云端考勤记录,适合中小团队、教室、实验室等场景。
软件准备
1. Arduino IDE
从 官网 下载最新版。
2. Google Drive 侧配置
- 新建 Google 表格,表头建议:
Timestamp, UID, Name, Status。 - 打开“扩展程序 → Apps Script”,粘贴接收 HTTP GET 请求并追加行的脚本,部署为“Web 应用”,权限选“任何人”,复制生成的 URL。
3. Pushingbox 配置
- 登录 Pushingbox,创建 Scenario,Action 选择“HTTP Request”,URL 填入 Apps Script 部署链接,Method 选 GET,参数如
uid=$UID$。 - 记下生成的 DeviceID(形如 vXXXXXXXXXXXXXX)。
硬件接线
Ethernet Shield
直接插在 UNO 顶部,RJ45 接路由器 LAN 口。
RFID-RC522 (SPI)
| RC522 引脚 | UNO 引脚 | Mega 引脚 |
|---|---|---|
| RST | 9 | 9 |
| SDA (SS) | 10* | 53* |
| MOSI | 11 | 51 |
| MISO | 12 | 50 |
| SCK | 13 | 52 |
| 3.3V | 3.3V | 3.3V |
| GND | GND | GND |
注意:Ethernet Shield 已占用引脚 10 (UNO) / 53 (Mega) 作为 SS,因此 RC522 的 SDA 必须改接别的引脚(如 UNO 的 4),并在代码中修改 SS_PIN 定义,避免 SPI 总线冲突。
库安装
- 库管理器搜索安装
MFRC522(作者 GithubCommunity) - Ethernet Shield 2 使用 Arduino 自带
Ethernet2或Ethernet(新版 IDE 已整合)
核心代码逻辑
#include <SPI.h>
#include <MFRC522.h>
#include <Ethernet.h>
#define SS_PIN 4 // 避开 Ethernet Shield 的 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
char server[] = "api.pushingbox.com";
EthernetClient client;
void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
Ethernet.begin(mac);
delay(1000);
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) return;
String uid = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
uid += String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
uid += String(mfrc522.uid.uidByte[i], HEX);
}
uid.toUpperCase();
sendToPushingbox(uid);
delay(1000); // 防重复触发
}
void sendToPushingbox(String uid) {
if (client.connect(server, 80)) {
String url = "/pushingbox?devid=YOUR_DEVICEID&uid=" + uid;
client.print("GET " + url + " HTTP/1.1\r\nHost: " + String(server) + "\r\nConnection: close\r\n\r\n");
}
client.stop();
}
将 YOUR_DEVICEID 替换为 Pushingbox 分配的 ID。上传后打开串口监视器观察调试信息,刷卡即可在 Google 表格看到新行。
进阶扩展
- 在 Apps Script 中加入姓名查找表(UID→姓名),自动填充 Name 列。
- 添加 LCD/OLED 现场显示刷卡结果。
- 改用 ESP8266/ESP32 走 WiFi,省去 Ethernet Shield,降低成本。
- 配合 Google 表单/数据验证实现“签入/签出”状态切换。
常见问题
- 串口显示连接失败
- 检查网线、路由器 DHCP、MAC 地址冲突;尝试固定 IP。
- Pushingbox 无数据
- 确认 DeviceID 正确、Apps Script 部署权限为“任何人”、URL 可在浏览器直接访问并写入表格。
- RFID 读卡距离短
- 天线贴金属会屏蔽,垫 5 mm 塑料/木板;供电确保 3.3V 稳定。
制造工艺
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- Arduino Mega 拍照自动上传 Google Drive:PHPoC WiFi Shield 方案
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- 智能地下室通风系统:Arduino 驱动的湿度自动控制
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
- Arduino 高速转速计 - 单次检测算法实测 6.5MHz 级响应,红外 + 红激光方案
- eDOT:基于 Arduino 的精密时钟与气象站,内置红外遥控
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 基于Arduino、Windows IoT与Azure云的高级跌倒检测系统
- Arduino 指纹考勤系统:本地存储 + ThingSpeak 云端同步