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

Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet

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

Arduino UNO 1 шт.
Провода перемычки (generic) 1 комплект
Модуль RFID RC522 1 шт.

Приложения и онлайн-сервисы

Доступно только для Windows. Версии для других ОС в разработке.

Описание проекта

Вторая версия онлайн-системы учёта посещаемости на базе RFID исключает необходимость программирования. Достаточно собрать схему и выполнить настройку через веб-интерфейс и десктопные приложения. Система включает LCD-дисплей для отображения статуса.

Принцип работы

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

Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Общий вид подключения

Подключение LCD (16×2):

Подключение RFID RC522 (SPI):

Настройка и запуск

  1. Создайте группу пользователей и получите ключ валидации на портале. Сохраните ключ.
  2. Скачайте архивы с десктопными приложениями (ссылки выше). Распакуйте, выберите версию под вашу архитектуру (32/64 бит).
  3. Подключите Arduino с RFID-модулем к ПК.
  4. Загрузите скетч в Arduino (код ниже).
  5. Запустите addRFIDTagsProg. Выберите COM-порт. Введите ключ валидации и нажмите «Validate Key».
  6. Добавьте пользователей: приложите карту к считывателю, введите имя, нажмите «Enter». Успешная регистрация отобразится на веб-панели: панель управления.
  7. В веб-панели (вкладка Users → Pending User List) назначьте RFID-метки сотрудникам/студентам.
  8. Запустите markOnlineAttendance. Статус «Connected» означает готовность. Приложите метку — посещаемость зафиксируется.
  9. Просмотр отчётов: Attendance Controls → View Attendance → выберите месяц/год → Show.
Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Выбор порта в addRFIDTagsProg
Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Ввод ключа валидации
Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Добавление пользователя по RFID-метке
Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Веб-интерфейс системы
Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Работа markOnlineAttendance
Продвинутая RFID-система учёта рабочего времени v2.0: решение без Ethernet
Пример отчёта за месяц

Код (Arduino)

/* Пример чтения NUID с MFRC522 и вывод на LCD/Serial */
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

const int rs = A0, en = A1, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

#define SS_PIN 10
#define RST_PIN 9

int greenLedPin = A2;
int redLedPin = A3;
int orangeLedPin = 6;
int buzzerPin = A4;

MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
byte nuidPICC[4];
boolean chkConn = false;
boolean isValidating = false;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  pinMode(greenLedPin, OUTPUT);
  pinMode(redLedPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
  lcd.begin(16, 2);
  lcd.print("GadgetProgrammer");
  delay(100);
  lcd.setCursor(0, 1);
  lcd.print(" Not Connected! ");
  establishConnection();
}

void loop() {
  lcd.setCursor(0, 1);
  char retOutput;
  if (Serial.available() > 0) {
    retOutput = Serial.read();
    lcd.blink();
    if (retOutput == 'A') {
      chkConn = true;
      analogWrite(orangeLedPin, 0);
      lcd.print("Swipe Your Card!");
    }
    if (retOutput == 'V') {
      analogWrite(orangeLedPin, 1000);
      lcd.print("Validating Group");
      isValidating = true;
      delay(1000);
    }
    if (retOutput == 'S') {
      lcd.print("Validation Done!");
      glowGreenLed(1000);
      isValidating = false;
      delay(1000);
    }
  }
  if (chkConn && retOutput) {
    if (retOutput == '1') { lcd.print("Attendance Done!"); glowGreenLed(1000); delay(4000); }
    else if (retOutput == '0') { lcd.print("Network Error !"); glowRedLed(1000); delay(4000); }
    else if (retOutput == '2') { lcd.print("User Not Found!"); glowRedLed(1000); delay(4000); }
    else if (retOutput == '5') { lcd.print("Network Error!"); glowRedLed(1000); delay(4000); }
    if (!isValidating) {
      lcd.setCursor(0, 1);
      analogWrite(orangeLedPin, 0);
      lcd.print("Swipe Your Card!");
    }
  }
  if (!rfid.PICC_IsNewCardPresent()) return;
  if (!rfid.PICC_ReadCardSerial()) return;
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) return;
  for (byte i = 0; i < 4; i++) nuidPICC[i] = rfid.uid.uidByte[i];
  printHex(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();
  lcd.setCursor(0, 1);
  lcd.print("Reading Card...!");
  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
  delay(1000);
}

void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? "0" : "");
    Serial.print(buffer[i], HEX);
  }
}

void glowGreenLed(int dt) {
  digitalWrite(orangeLedPin, LOW);
  digitalWrite(greenLedPin, HIGH);
  digitalWrite(redLedPin, LOW);
  tone(buzzerPin, 5000, 300);
  if (dt > 0) { delay(dt); digitalWrite(greenLedPin, LOW); noTone(buzzerPin); }
}

void glowRedLed(int dt) {
  digitalWrite(orangeLedPin, LOW);
  digitalWrite(greenLedPin, LOW);
  digitalWrite(redLedPin, HIGH);
  digitalWrite(buzzerPin, HIGH);
  delay(1000);
  tone(buzzerPin, 5000);
  if (dt > 0) { delay(dt); digitalWrite(redLedPin, LOW); noTone(buzzerPin); }
}

void establishConnection() {
  while (Serial.available() <= 0 && !chkConn) {
    Serial.println("A");
    analogWrite(orangeLedPin, 100);
    delay(200);
  }
}

Схемы

Файлы схем: pin_connections_of_arduino_and_lcd_yD9G43NUd9.tiff, pin_connections_of_arduion_and_rfid_7DFKgigFOA.tiff

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

  1. Валёк для теста: от этрусских истоков к современному мастерству
  2. Эволюция и мастерство современных кеглей для боулинга
  3. Солнечные отопительные системы: от пассивных к активным решениям для устойчивого отопления домов
  4. От древних фибул к современному производству: история булавки-английки
  5. Primal Display: создайте монитор температуры на Raspberry Pi с LCD
  6. Elkem Silicones представляет LSR Select: низкотемпературное отверждение и кастомная формуляция для на 50% более быстрых ц…
  7. Двухматериальный термоэлектрический кулер: активный режим в 25 раз эффективнее пассивного
  8. Надежная система учета рабочего времени на Arduino с RFID и Python
  9. Конвейерные системы: принцип работы, виды и ключевые преимущества
  10. Подвеска автомобиля: функции, компоненты, типы, принцип работы и требования