Система учёта рабочего времени на RFID, Arduino и Google Таблицах
Компоненты и материалы
- Arduino UNO — 1 шт.
- Ethernet Shield 2 (W5500) — 1 шт.
- RFID-считыватель RC522 (MF-RC522) с метками/ключами — 1 комплект
- Перемычки (набор) — 1 комплект
Используемые сервисы и ПО
- Arduino IDE
- Google Sheets (Google Таблицы) — для хранения логов посещаемости.
- Google Apps Script — скрипт-обработчик входящих данных.
- Pushingbox — промежуточный сервис для передачи данных от Arduino в Google Sheets (прямое подключение Arduino к Google API невозможно из-за SSL/авторизации).
О проекте
Проект реализует систему контроля доступа/учёта рабочего времени: сотрудник прикладывает RFID-метку к считывателе — Arduino отправляет UID карты через Ethernet в сервис Pushingbox, который по HTTP-запросу вызывает Google Apps Script, а тот записывает метку времени и ID карты в Google Таблицу в реальном времени.
Почему Pushingbox?
Arduino (особенно AVR-based вроде UNO) не поддерживает полноценные HTTPS/SSL/TLS и OAuth2, необходимые для прямой работы с Google API. Pushingbox принимает простой HTTP GET/POST от Arduino и делает безопасный запрос к Google от вашего имени.
Подключение RFID RC522 к Arduino UNO (SPI)
| Пин RC522 | Arduino UNO | Arduino Mega |
|---|---|---|
| RST | 9 | 9 |
| SDA (SS) | 10* (или 4) | 53* (или 4) |
| MOSI | 11 | 51 |
| MISO | 12 | 50 |
| SCK | 13 | 52 |
| 3.3V | 3.3V | 3.3V |
| GND | GND | GND |
| IRQ | не подключать | не подключать |
* Важно: Ethernet Shield использует пин 10 (UNO) / 53 (Mega) как SS для W5500. Поэтому для RFID нужно использовать другой свободный SS-пин (например, 4 на UNO) и указать его в коде: #define SS_PIN 4. Иначе будет конфликт двух SPI-устройств.
Необходимые библиотеки
- MFRC522 (by GithubCommunity / miguelbalboa) — для работы с RFID. Установите через менеджер библиотек Arduino IDE.
- Ethernet2 или Ethernet (в новых версиях IDE встроена поддержка W5500).
- SPI (встроена).
Настройка Google Sheets + Apps Script + Pushingbox
- Создайте Google Таблицу с колонками:
Timestamp,UID,Name(опционально). - Откройте Extensions → Apps Script. Вставьте скрипт, который принимает параметры
uidи записывает строку. Разверните как «Web App» с доступом «Anyone, even anonymous». Скопируйте URL деплоя. - Зарегистрируйтесь на Pushingbox через Google. Создайте «Scenario»: Method = GET, URL = ваш Apps Script URL +
?uid=$UID$(где$UID$— переменная, которую пришлет Arduino). Получите DeviceID (видаvXXXXXXXXXXXXXX).
Код Arduino (основная логика)
#include <SPI.h>
#include <Ethernet.h>
#include <MFRC522.h>
#define SS_PIN 4 // SS для RFID (не 10!)
#define RST_PIN 9
#define DEVICE_ID "vXXXXXXXXXXXXXX" // Ваш DeviceID из Pushingbox
MFRC522 mfrc522(SS_PIN, RST_PIN);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177); // Статический IP, если нет DHCP
EthernetClient client;
char server[] = "api.pushingbox.com";
void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
Ethernet.begin(mac, ip); // или Ethernet.begin(mac) для DHCP
delay(1000);
Serial.println("Готово. Приложите карту...");
}
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();
Serial.print("UID: "); Serial.println(uid);
sendToPushingbox(uid);
mfrc522.PICC_HaltA();
delay(1000); // антидребезг
}
void sendToPushingbox(String uid) {
if (client.connect(server, 80)) {
String url = "/pushingbox?devid=" + String(DEVICE_ID) + "&UID=" + uid;
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + String(server) + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("Отправлено: " + url);
} else {
Serial.println("Ошибка подключения к Pushingbox");
}
// Читаем ответ (опционально)
while (client.connected() || client.available()) {
if (client.available()) Serial.write(client.read());
}
client.stop();
}
Тестирование и отладка
- Откройте Serial Monitor (115200 бод) — должны видеть UID карт и «Отправлено: ...».
- Проверьте Google Таблицу — строки должны появляться через 1–3 сек.
- Если не работает: проверьте IP/шлюз/DNS (Ethernet), DeviceID, URL Apps Script, права доступа к скрипту.
Схема подключения
Ресурсы
- Исходный код на GitHub (ссылка в описании проекта).
- Видео-демонстрация на канале автора (Embedotronics Technologies).
Производственный процесс
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Arduino Mega: съёмка фото и автоматическая загрузка в Google Drive
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
- Умная вентиляция подвала на Arduino: контроль влажности
- Управление Arduino Uno из Python 3: команды через последовательный порт и демонстрация с LED
- Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
- Высокоскоростной тахометр на Arduino: новый алгоритм измерения RPM до 2 знаков после запятой
- eDOT: точные Arduino-часы и метеостанция с встроенным ИК-пультом
- Сборка компактного FM-радио на Arduino Nano и RDA5807M