projects:rfid-revbank-username

Sinds Juli 2020 werkt TDVenlo met een Revbank voor het financiele beheer van de bar. Hierbij kan het product gescand worden met de barcodescanner en vervolgens dient de gebruiker zijn gebruikersnaam in te typen om het bedrag van het krediet af te schrijven.

Om dit te vereenvoudingen is er vanaf 2 September de mogelijkheid om met RFID de gebruiker te identificeren.Om dit mogelijk te maken is er een Arduino Leonardo als HID(Human Interface Device) aan de revbank gekoppeld met een RC522 RFID scanner. De RFID scanner leest de badge die voor de scanner gehouden wordt, de Arduino Leonardo heeft alle gebruikersnamen in de software zitten met de bijbehorende badge. de Arduino Leonardo communiceert de gebruiker door aan de revbank door deze in te typen als een virtueel toetsenbord.

icon-library.com_images_rfid-reader-icon_rfid-reader-icon-17.jpg

Als controller is een Arduino Leonardo genomen vanwege de mogelijkheid tot het aanmelden als een HID device. om RFID tags te lezen wordt gebruik gemaakt van een RC522 RFID scanner.

// Include Libraries
#include "Arduino.h"
#include "RFID.h"
#include "Keyboard.h"


// Pin Definitions
#define RFID_PIN_RST  2
#define RFID_PIN_SDA  10
// Global variables and defines

// object initialization
RFID rfid(RFID_PIN_SDA,RFID_PIN_RST);


// define vars for testing menu
const int timeout = 10000;       //define timeout of 10 sec
char menuOption = 0;
long time0;
long cooldown = 0;
int greenLed = 6;
int redLed = 7;
// Setup the essentials for your circuit to work. It runs first every time your circuit is powered with electricity.
void setup() 
{
      // Setup Serial which is useful for debugging
      // Use the Serial Monitor to view printed messages
      Serial.begin(9600);
      //while (!Serial) ; // wait for serial port to connect. Needed for native USB
      Serial.println("start");
      pinMode(greenLed,OUTPUT);
       pinMode(redLed,OUTPUT);
      //initialize RFID module
      rfid.init();
      //rfid.PCD_SetAntennaGain(rfid.RxGain_max);
     //menuOption = menu();
      delay(5000);
      Keyboard.begin();
}
// Main logic of your circuit. It defines the interaction between the components you selected. After setup, it runs over and over again, in an eternal loop.
void loop() 
{
  
  
      //if(menuOption == '1') {
      // RFID Card Reader - RC522 - Test Code 
    //Read RFID tag if present
     String rfidtag = rfid.readTag();
    //print the tag to serial monitor if one was discovered
    if((cooldown+3000) < millis())
    {
      rfid.printTag(rfidtag);
      ledState("off");
        if(rfidtag == "[badge-ID]")//[badge-number]
        {
          cooldown = millis();
          Keyboard.print("[revbank-username]");
           Keyboard.press(KEY_RETURN);
            Keyboard.releaseAll();
            ledState("green");
          } else if(rfidtag == "[badge-ID]") //[badge-number]
        {
           cooldown = millis();
            Keyboard.print("[revbank-username]");
            Keyboard.press(KEY_RETURN);
            Keyboard.releaseAll();
          ledState("green");
        } else
        {
          ledState("red");
        }
    }
      
}
void ledState(char color)
{
    if(color == "green")
    {
      digitalWrite(greenLed,HIGH);
    digitalWrite(redLed,LOW);
  } else if(color == "red")
  {
    digitalWrite(redLed,HIGH);
     digitalWrite(greenLed,LOW);
  } else
  {
    digitalWrite(redLed,LOW);
    digitalWrite(greenLed,LOW);
  } 
}

Het nadeel van het huidige systeem is dat het niet veilig is aangezien iedereen de badge ID uit kan lezen en kopieren. Een ander nadeel is dat bij elk nieuw lid de software van de Arduino Leonardo geflasht dient te worden.

  • voor het identificeren van de gebruiker dient een veilig protocol gebruikt te worden.
  • De gebruikersnaam en badge ID dient opgevraagd te worden vanuit openLDAP in de server zodat er een centrale gebruiker administratie is.
  • projects/rfid-revbank-username.txt
  • Last modified: 12/04/2024 23:42
  • by ron