Erweitertes RFID-Anwesenheitssystem v2.0 – Ohne Ethernet
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Arduino UNO | 1 |
| Jumper-Kabel (diverse) | 1 Set |
| RFID RC522 Modul | 1 |
Apps und Online-Dienste
- addrfidwin64.zip (nur Windows)
- markattendancewin64.zip (nur Windows)
Projektbeschreibung
Die erste Version unseres „Online RFID-Anwesenheitssystems (ohne Ethernet)“ war für Hobbyisten ohne Programmierkenntnisse etwas komplex. Mit Version 2.0 entfällt der Programmieraufwand vollständig. Nach einfachen Verbindungen und Konfigurationsschritten steht ein vollständiges Online-Anwesenheitssystem mit LCD-Display zur Verfügung.
Funktionsweise
Schaltung
Die Verdrahtung des LCD-Displays und des RFID-Moduls ist im Schaltplan dargestellt. Wichtige Pin-Belegungen:
- LCD: RS → A0, Enable → A1, D4 → 5, D5 → 4, D6 → 3, D7 → 2, R/W → GND, VSS → GND, VCC → 5V, Kontrast (Pin 3) über 220 Ω an GND
- RFID RC522 (SPI): SDA/SS → 10, SCK → 13, MOSI → 11, MISO → 12, RST → 9, 3.3V → 3.3V, GND → GND
- Zusätzlich: Grüne LED an A2, Rote LED an A3, Orange LED an Pin 6, Summer an A4
Einrichtungsschritte
- Benutzergruppe erstellen & Validierungsschlüssel generieren: Unter https://www.parikshacrack.com/gadgetProgrammers/user_group.html registrieren und kostenlosen Validierungsschlüssel erhalten. Diesen Schlüssel sicher aufbewahren!
- Desktop-Anwendungen herunterladen:
addRFIDTagsProg.zipundmarkattendancewin64.zipvon der Projektseite herunterladen, entpacken und passende Version (32/64 Bit) wählen. - Hardware verbinden: Arduino mit RFID-Reader an denselben PC anschließen.
- Arduino-Code hochladen: Den untenstehenden Sketch in die Arduino IDE kopieren, kompilieren und aufspielen.
- RFID-Tags registrieren: Programm
addRFIDTagsProgstarten, COM-Port wählen, Validierungsschlüssel eingeben und „Validate Key“ drücken. Danach Karten vor das Modul halten, UID wird angezeigt, Benutzername eingeben und bestätigen. Erfolgreiche Registrierung wird im Web-Panel unter index.php sichtbar. - Web-Panel nutzen: Einloggen, Reiter „User’s → Pending User List“ öffnen, RFID-Tags Mitarbeitern/Studenten zuordnen.
- Anwesenheit erfassen: Programm
markOnlineAttendancestarten (zeigt „Status: connected“). RFID-Tag vor Reader halten – Anwesenheit wird verbucht. - Berichte anzeigen: Im Web-Panel unter „Attendance Controls → View Attendance“ Monat/Jahr wählen und „Show“ klicken.
Arduino-Code
/* ------------------------------------------------------------
RFID-Anwesenheitssystem v2.0
Liest NUID von MIFARE Classic Karten, zeigt Status auf LCD,
kommuniziert per Serial mit Desktop-App.
------------------------------------------------------------ */
#include
#include
#include
// LCD-Pins
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;
boolean chkConn = false;
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
byte nuidPICC[4];
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.setCursor(0, 0);
lcd.print("GadgetProgrammer");
delay(100);
lcd.setCursor(0, 1);
lcd.print(" Not Connected! ");
establishConnection();
}
void loop() {
lcd.setCursor(0, 1);
char retOutput = 0;
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 != 0) {
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 glowOrangeLed() {
analogWrite(orangeLedPin, 100);
delay(100);
}
void establishConnection() {
while (Serial.available() <= 0 && !chkConn) {
Serial.println("A");
glowOrangeLed();
delay(200);
}
}
Schaltpläne
Detaillierte Pin-Belegungen für LCD und RFID-Modul liegen als TIFF-Dateien vor:
- pin_connections_of_arduino_and_lcd_yD9G43NUd9.tiff
- pin_connections_of_arduion_and_rfid_7DFKgigFOA.tiff
Herstellungsprozess
- Das Nudelholz: Von etruskischen Ursprüngen bis zur modernen Handwerkskunst
- Die Entwicklung und Handwerkskunst moderner Bowling-Pins
- Solarheizsysteme: Von passiven zu aktiven Lösungen für nachhaltiges Heizen
- Sicherheitsnadel: Von antiken Fibeln zur modernen Fertigung
- Primal Display: Raspberry Pi LCD-Temperaturmonitor mit DHT11 bauen
- Elkem Silicones enthüllt LSR Select: Niedrigtemperatur-Aushärtung & Custom Formulierung für 50% schnellere Zyklen
- Revolutionäres thermoelektrisches Kühlsystem steigert Leistung von Computern & Batterien
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- Förderbänder & Förderanlagen: Funktion, Typen und Vorteile im Überblick
- Fahrwerksfederung meistern: Schutz fürs Auto & mehr Fahrkomfort