Geavanceerd RFID-aanwezigheidssysteem v2.0 – Zonder Ethernet
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 1 |
| Jumper wires (generiek) | 1 set |
| RFID RC522 Module | 1 |
Apps en online services
- addrfidwin64.zip (alleen Windows)
- markattendancewin64.zip (alleen Windows)
Over dit project
De eerste versie van ons "Online RFID-aanwezigheidssysteem (zonder Ethernet)" was voor hobbyisten zonder programmeervaardigheden wat ingewikkeld. Met versie 2 hebben we de programmeerstap geëlimineerd. Met alleen enkele verbindingen maak je je eigen online aanwezigheidssysteem.
Deze versie voldoet aan alle eisen van een echt aanwezigheidssysteem, inclusief een LCD-display.
Hoe het werkt
Schakeling
Bij twijfel over de verbindingen, zie de schema's sectie voor pin-aansluitingen.
LCD-scherm aansluitingen:
- Pin 3 naar GND met 220 Ω weerstand
- LCD RS pin → digitale pin A0
- LCD Enable pin → digitale pin A1
- LCD D4 pin → digitale pin 5
- LCD D5 pin → digitale pin 4
- LCD D6 pin → digitale pin 3
- LCD D7 pin → digitale pin 2
- LCD R/W pin → GND
- LCD VSS pin → GND
- LCD VCC pin → 5V
Programmering en installatie
Stap 1: Maak een Gebruikersgroep voor aanwezigheid en genereer een Validatiesleutel.
Ga naar: https://www.parikshacrack.com/gadgetProgrammers/user_group.html
Bewaar deze validatiesleutel veilig.
Stap 2: Download de benodigde bestanden voor synchronisatie tussen Arduino en de webapplicatie:
addRFIDTagsProg.zip
markattendancewin64.zip
Let op: Alleen voor Windows OS. Andere besturingssystemen zijn in ontwikkeling.
Pak beide zip-bestanden uit en bewaar de bestanden op je PC. Kies de versie die bij je Windows-architectuur past (32 of 64-bit).
Stap 3: Sluit de Arduino en RFID-reader aan op dezelfde PC.
Stap 4: Kopieer de Arduino-code (zie code-sectie) naar de Arduino IDE. Compileer en upload naar het bord.
Stap 5: Start de desktop-applicatie "addRFIDTagsProg" (uit de map addRFIDTagsProg.zip).
Bij correcte verbinding verschijnt een venster met een tekstvak. Kies de juiste COM-poort voor communicatie.
Na poortselectie verschijnt het volgende scherm:
Voer de validatiesleutel in (uit Stap 1) en druk op "Validate Key". Na validatie kun je gebruikers toevoegen. Het programma vraagt de sleutel slechts één keer.
Om een gebruiker toe te voegen: start het programma na validatie, kies opnieuw de poort. Houd een RFID-kaart voor de RC522-reader. De TAG UID verschijnt. Voer de gebruikersnaam in en druk op Enter (knop verschijnt na detectie kaart).
Bij succesvol toevoegen verschijnt een bevestiging. Je kunt de gebruiker bekijken in het webpanel:
https://www.parikshacrack.com/gadgetProgrammers/index.php
Stap 6: Log in op de webapplicatie via bovenstaande URL. Ga naar Tab "Gebruikers" → "Wachtende gebruikerslijst" om RFID-tags toe te wijzen aan medewerkers/studenten.
Stap 7: Start de desktop-applicatie "markOnlineAttendance" (uit map markattendancewin64.zip).
Een scherm opent met Status: connected. Houd een RFID-tag enkele seconden voor de reader om aanwezigheid te registreren voor de bijbehorende persoon.
Stap 8: Bekijk aanwezigheid van alle medewerkers/studenten per maand of jaar:
- Ga naar Tab "Aanwezigheidscontroles" → "Bekijk aanwezigheid".
- Selecteer maand en jaar.
- Klik op "Show".
Klaar! Vragen? Laat een reactie achter.
Code
Arduino-code
/* ------------------------------------------------------------ Voorbeeldsketch: lezen van nieuwe NUID van een PICC naar seriële poort. Gebaseerd op MFRC522 bibliotheek: https://github.com/miguelbalboa/rfid ------------------------------------------------------------ */ #include#include #include // LCD pinnen 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 writeVal; 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; 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 == false) { lcd.setCursor(0, 1); analogWrite(orangeLedPin, 0); lcd.print("Swipe Your Card!"); } } // Zoek nieuwe kaarten if (!rfid.PICC_IsNewCardPresent()) return; if (!rfid.PICC_ReadCardSerial()) return; MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); // Controleer of het een MIFARE Classic type is 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 printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? "0" : ""); Serial.print(buffer[i], DEC); } } void glowGreenLed(int delaytime) { digitalWrite(orangeLedPin, LOW); digitalWrite(greenLedPin, HIGH); digitalWrite(redLedPin, LOW); tone(buzzerPin, 5000, 300); if (delaytime > 0) { delay(delaytime); digitalWrite(greenLedPin, LOW); noTone(buzzerPin); } } void glowRedLed(int delaytime) { digitalWrite(orangeLedPin, LOW); digitalWrite(greenLedPin, LOW); digitalWrite(redLedPin, HIGH); digitalWrite(buzzerPin, HIGH); delay(1000); tone(buzzerPin, 5000); if (delaytime > 0) { delay(delaytime); 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); } } void printLcdMsg(String msg, int col, int row) { if (msg.equals("") || row < 0 || col < 0) { row = 0; col = 1; } lcd.setCursor(col, row); lcd.print(msg); }
Schema's
- Pin-verbindingen Arduino en LCD
- Pin-verbindingen Arduino en RFID
Productieproces
- De Deegroller: Van Etrusken tot Moderne Vakmanschap
- De Evolutie en Vakmanschap van Moderne Bowlingpinnen
- Zonneverwarmingssystemen: Van Passief tot Actieve Oplossingen voor Duurzame Huisverwarming
- Van Oude Fibulae tot Moderne Fabricage: De Veiligheidsspeld Uitgelegd
- Primal Display: Een Raspberry Pi LCD-temperatuurmonitor bouwen
- Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
- Real-time RFID aanwezigheidssysteem met Arduino en Google Sheets
- Transportbandsystemen Uitgelegd: Werking, Typen en Voordelen
- Meester uw voertuig ophangingssysteem: Auto beschermen & rijcomfort verbeteren
- Revolutionair thermo-elektrisch koelsysteem verbetert prestaties van computers en batterijen
- Elkem Silicones Onthult LSR Select: Lage‑Temperatuur Uitharding en Custom Formulering voor 50% Snellere Cycli