Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система учёта рабочего времени на RFID, Arduino и Google Таблицах

Компоненты и материалы

Используемые сервисы и ПО

О проекте

Проект реализует систему контроля доступа/учёта рабочего времени: сотрудник прикладывает 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)

Пин RC522Arduino UNOArduino Mega
RST99
SDA (SS)10* (или 4)53* (или 4)
MOSI1151
MISO1250
SCK1352
3.3V3.3V3.3V
GNDGNDGND
IRQне подключатьне подключать

* Важно: Ethernet Shield использует пин 10 (UNO) / 53 (Mega) как SS для W5500. Поэтому для RFID нужно использовать другой свободный SS-пин (например, 4 на UNO) и указать его в коде: #define SS_PIN 4. Иначе будет конфликт двух SPI-устройств.

Необходимые библиотеки

Настройка Google Sheets + Apps Script + Pushingbox

  1. Создайте Google Таблицу с колонками: Timestamp, UID, Name (опционально).
  2. Откройте Extensions → Apps Script. Вставьте скрипт, который принимает параметры uid и записывает строку. Разверните как «Web App» с доступом «Anyone, even anonymous». Скопируйте URL деплоя.
  3. Зарегистрируйтесь на 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();
}

Тестирование и отладка

Схема подключения

Система учёта рабочего времени на RFID, Arduino и Google Таблицах

Ресурсы

Производственный процесс

  1. Надежная система учета рабочего времени на Arduino с RFID и Python
  2. Arduino Mega: съёмка фото и автоматическая загрузка в Google Drive
  3. Создание анимации и игр на LCD 16×2 с Arduino UNO
  4. SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
  5. Умная вентиляция подвала на Arduino: контроль влажности
  6. Управление Arduino Uno из Python 3: команды через последовательный порт и демонстрация с LED
  7. Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
  8. Высокоскоростной тахометр на Arduino: новый алгоритм измерения RPM до 2 знаков после запятой
  9. eDOT: точные Arduino-часы и метеостанция с встроенным ИК-пультом
  10. Сборка компактного FM-радио на Arduino Nano и RDA5807M