Project Repository - Firmware Shareware for RFID Domination Timer: Airsoft Domination Timer firmware
If you are interested in the full firmware for the RFID Domination Timer, please contact the author of the project in English at:

martinius96@gmail.com

Arduino LCD RFID, NFC NXP C522 Stopwatch Schematics Airsoft Paintball Domination Timer

RFID Domination Timer - stopwatch for Airsoft | Paintball


The new version of the RFID Domination Timer project supports these types of firmware RFID readers NXP RC522:
  • Firmware version: 0x12 = counterfeit chip - (non - original NXP chip, replacement)
  • Firmware version: 0x91 = Version 1.0 - (original NXP Semiconductors chip)
  • Firmware version: 0x92 = Version 2.0 - (original NXP Semiconductors chip)

  • User entities in a color-coded RFID Domination Timer project:


    RFID wristband of ISO / IEC 14443-A standard - Team RED
    Team RED
    RFID wristband of ISO / IEC 14443-A standard - Team GRE
    Team GRE
    RFID wristband of ISO / IEC 14443-A standard- Referee
    Referee
    RFID wristband of ISO / IEC 14443-A standard - Eraser
    Eraser

    RFID Domination Timer description:


    Domination timer (DOMINATOR) is a stopwatch device designed for 2 teams that play against each other and try to occupy the point and keep it for as long as possible. The stopwatch is suitable for Airsoft / Paintball game mode DOMINATION, resp. Capture Hill. They consist of an ATmega328P microcontroller (AVR), which can be part of the Arduino development kit (Uno / Nano / Pro Mini). An LCD character display (size 16x2 or 20x4, chipset HD44780) is used to visualize times of both teams. The times are listed in two lines below each other and are dynamically updated if there is an active team at the point (a point occupied by a team). The stopwatch is equipped with indicator LEDs in team colors, which signal the active team at the point and a detector (piezo transducer), which announces the change at the point after attaching the RFID card. Teams are implemented in the game - RED team and GRE team who play against each other and try to occupy the point and then keep it for as long as possible. At the beginning of the game, the display shows the times 00 hours, 00 minutes, 00 seconds for RED team , GRE team . Each team member is equipped with an RFID chip that is integrated into the bracelet (or card / keychain). The RFID chip transmits its unique identifier - UID (unique ID), which is read by an RFID reader and verified in the logic of the system to which the entity (team) belongs. Individual bracelets can be color-coded (red, green by team and entity function), which allows them to be distributed more quickly to players, but also archived and stored by color. The RED team will occupy the point when the RED team member attaches their card to the RFID reader. This action triggers a buzzer that announces the change of point with a short beep. Subsequently, the LED of the RED team at this station will light up and the display will start adding the time for this team until the members team card is inserted , Referee , or Eraser . If the point is occupied by a GRE player and the card is attached to an RFID reader, the buzzer will announce this change with a short beep, the GRE LED will light up (RED LED turns off), REDs current time stops , and GREs time is scored.


    If the Referee attaches his RFID card, the running time will stop at the current value. The point becomes neutral, the active teams LED goes out. The stoppage lasts until a member of the RED team or the GRE team presents their card. This type of card is thus suitable for temporarily stopping an ongoing game, controlling a players intervention, or injuries. At the same time, the card can be used at the end of a round of the game, to evaluate the round, respawn teams before continuing. If Eraser attaches the card, both times will stop and reset to the initial value of 00 hours, 00 minutes, 00 seconds, which will be displayed. The Eraser card is used to restart the game, to initialize a new game without the need for a power-on cycle. The RFID reader responds to the insertion of an RFID card immediately, including the entire logic of the Dominator project. The project is suitable for Airsoft events, sports facilities, or Airsoft teams, which can build a Dominator device with their own hardware. Firmware is universal, which is based on the wiring diagram, it is also possible to use the available PCB design for the production of printed circuit boards. The advantage of the RFID Domination timer project is that the usage license authorizes the user to clone and create X points with the same configuration via machine code. Machine code (.hex) is a compiled firmware format for the RFID Dominator project for supplied UID RFID cards that are embedded in the code before compilation. It is thus possible to place any number of independently operating RFID Domination timer points in the game, which respond to identical RFID cards according to a uniform configuration. The RFID Dominator system is tuned, it can be put into the game immediately. Firmware uploads within 10 seconds via XLoader .


    LCD 20x4 output for RFID Domination Timer:


    LCD character display 20x4 - Arduino Domination Timer - Domination Timer

    Compatible control hardware for RFID Domination Timer:



    Peripherals for RFID Domination Timer:


    RFID Domination Timer - DOMINATION TIMER

    How RFID Domination Timer works (hardware side):


    The NXP RC522 RFID reader communicates with the microcontroller (Arduino / stand-alone chip ATmega328P) via the SPI bus with a clock signal (SCLK) of 4 MHz. The RC522 reader responds to the RFID chip at a distance of approximately 3 cm from the antenna, while having a configurable antenna gain in the range of 18 to 48 dB (48 dB is used in the final application for DOMINATOR). Reads the UID (identifier) of RFID chips in range, forwards this identifier to Arduino. Arduino compares the read address of the card in a multi-condition, triggers a buzzer beep, applies digital states to the LEDs, runs a universal counter controlled by the internal function millis() - Timer 0, which is responsible for counting both times. Based on the fulfilled condition, the counter starts to be applied to the given team to which the UID belongs and the time counter is running. The time is plotted on a 16x2 or 20x4 LCD character display. The time data is sent via the I2C bus with a clock signal (SCL) of 100 kHz (Standard Speed). To restore the display as quickly as possible, only the number at the given position (given character) is overwritten. Hours and minutes and seconds are overwritten only when changing and always only for a given team. In case of serious interest, it is possible to create firmware in machine code for ATmega328P to measure also for other types of RFID readers: RDM6300, PN532, Wiegand W26, increase of I2C bus clock signal up to 400 kHz (Fast Speed). Possible firmware expansion for Domination Timer to 3 or 4 teams.

    RFID Domination Timer - game with 4 teams
    Maximum time range that can be listed on the system: 99 hours, 59 minutes, and 59 seconds
    Consumption: approx. 110mAh with 5V power supply. Convenient to power via power bank, charger from a phone with USB output.

    Where to use RFID Domination Timer project:


    The RFID Domination Timer project is, in terms of its versatility, suitable for implementation in Airsoft actions, and with the possibility of cloning the firmware, it is possible to place X Domination Timer points in the game field with identical firmware, which players can play with the same RFID cards. Domination Timer is also suitable for teams, sports grounds and playgrounds, which can use this device to expand the services and game modes offered for different numbers of players. If RFID cards, bracelets or key fobs are color-coded, it is very easy and universally distributed to players based on their team. Their archiving is also simple. Using cards, bracelets or key rings is easy and can handle all ages in Airsoft games. The RFID chip itself is protected in a plastic case, it does not mind mud, dirt, water, frost, it is fully maintenance-free. It has no battery, the chip activates the RFID reader, which charges it with the transmitted electromagnetic field and allows it to send a UID - identifier if it is within range of the RFID reader. Domination Timer is suitable for game modes with the same number of players in both teams, e.g. DOMINATION, Capture Point (Points for multiple cloned Domination Timer points).


    Demonstration of functionality - RFID Domination Timer:



    Printed circuit board - (PCB) - RFID Domination Timer - GERBER / production by photo route


    The PCB design envisages the use of the Arduino Nano board!
  • PCB is double-sided with overlays, dimensions: 100x105mm
  • PCB production in China

    PCBs can be made in Slovakia at PB Spoj , where they can produce double-sided PCBs. Production can be realized, for example, in China, where they can produce double-sided PCBs from GERBER design. One of the most popular and cheapest manufacturers is JLCPCB, where GERBER files can be uploaded directly as a .zip archive. The PCB is visualized, the layers, PCB dimensions, double-sided PCB are set automatically. Production takes 1-2 days. This manufacturer used to be famous for the action of producing 10 pieces of PCBs for $ 2. Today, JLCPCB allows you to produce 5 pieces of this PCB for RFID DOMINATOR for 6.96 €, 10 pieces for 10.16 € (currently as of January 2021, prices are rising). Transport - the cheapest alternative is available for 7.44 € up to DHL with delivery in 3-5 working days, while the cost of transport is 23.16 €. JLCPCB will automatically apply a € 8 discount coupon for shipping, which will be assigned to you after registration. Thus, with the cheapest shipping alternative with delivery within 25 days, this shipping is free with the coupon on the first purchase. An interesting manufacturer of PCBs is also AISLER, which offers PCB production from 3 pieces with a price of about 7.6 € per piece with free shipping, or offers the possibility of delivery for a surcharge via UPS. It is also possible to use other available manufacturers, for example: PCBWay, AllPCB, NextPCB, SeeedStudio, which have the technology for PCB production by machine method from GERBER files.

    PCB for Airsoft Domination Timer - JLCPCB PCB with components - RFID Domination Timer

    Pin headers in PCB design:

  • 2x female pin-header 15-pin (for Arduino Nano)
  • 1x female pin-header 8-pin (for RFID reader RC522)
  • 1x female 90 ° pin-header 4-pin (for I2C LCD display converter 20x4)
  • Spacers in the design PCB:

  • 4x spacer for character LCD display 20x4 (Ø max 2.5 mm)
  • 2x spacer for RFID RC522 (Ø max 3.5 mm)
  • Part dimensions:

    A PDF document with part dimensions is available: HERE

    Table connection of terminals - RFID Domination Timer - fully corresponds to the wiring diagram:

    Arduino Uno / Nano (ATmega328P) NXP RFID RC522
    GND GND
    3V3 3V3
    D9 RST
    D10 SDA (SS)
    D11 MOSI
    D12 MISO
    D13 SCK
    Arduino Uno / Nano (ATmega328P) I2C converter for LCD display
    GND GND
    5V Vcc
    A4 (Hardware SDA) SDA
    A5 (Hardware SCL) SCL
    Arduino Uno / Nano (ATmega328P) Buzzer
    GND GND
    5V Vcc
    D5 IN
    Arduino Uno / Nano (ATmega328P) LED diodes
    GND GND
    D4 IN (RED)
    D3 IN (GREEN)

    Wiring diagram - RFID Domination Timer:


    Airsoft Domination Timer RFID

    Test program (Shareware) - RFID Domination Timer with machine code


    Shareware version in the form of machine code (.hex) for the Arduino microcontroller (ATmega328P) is available for the RFID Domination Timer project. The version allows you to initially record 4 different UID RFID cards, which are assigned to the RED, GRE, Referee and Eraser teams. Request to enter a specific card is displayed on the LCD character display 16x2 or 20x4 with I2C converter. Subsequently, it is possible to test the game mechanics and the response of the reader to the RFID card with time visualization on the display. It is possible to measure a maximum of 15 seconds of play for each team with the possibility of resetting it with an Eraser card and measuring again for 15 seconds. The goal of the version is to verify compatibility with your hardware. Machine codes based on the I2C converter address for the LCD display are available in the Github repository. The most used addresses are 0x27 and 0x3F. If you do not know the address of your converter, use the built-in example in Arduino IDE -> I2C Scanner, which will write the address to the UART interface (Serial monitor). Machine code can be uploaded to the Arduino Uno microcontroller via the AVRDUDE software - part of the Arduino IDE, or with a GUI interface via XLoader - easier to use.

  • AVRDUDE must be run via the CMD (command line) installed with the Arduino IDE. Located in C: /Users/User/Documents/ArduinoData/packages/arduino/tools/avrdude/6.X.X-arduino/bin
  • Sample command to upload a program to Arduino Uno / Nano (ATmega328P):
  • avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:sketch.ino.hex:i
  • XLoader is a Windows application (executable .exe tool) with a simple graphical interface which allows you to select the firmware - machine code (.hex), the target platform and can dynamically show the COM port on which the device is located.
  • By simply clicking on Upload, machine code can be uploaded automatically ( XLoader uses similar as Arduino IDE tool AVRDUDE). The XLoader window informs you of a successful upload by listing the number of bytes uploaded.
  • The firmware can be downloaded from the project repository: HERE . Firmware is in folder of the project repository /rfid_dominator/ divided according to the address of the I2C converter (you found out from the I2C scanner output to the UART interface).

    Available firmware (Shareware) - RFID Domination Timer


    Firmware name (in the rfid_dominator folder) Designed for Download
    RFID_Dominator_0x27.hex LCD character display size 16x2 or 20x4 with I2C converter, which communicates at address 0x27 Download firmware
    RFID_Dominator_0x3F.hex LCD character display size 16x2 or 20x4 with I2C converter, which communicates at address 0x3F Download firmware

    Demonstration of functionality - Shareware RFID DOMINATOR:


    In the case of the latest Chinese Arduino Nano clones, which have an "Old Bootloader", it is necessary to record at 57600 baud / s! For other versions with the newer Bootloader 115200 baud / s (this speed is also used in the AVRDUDE command to load machine code).

    Program for reading UID addresses of RFID cards for Domination Timer


    The program is used to read the identifiers (UID) of RFID tags, cards that will be used in the program for RFID DOMINATOR - this source code does not represent RFID DOMINATOR or its logic! . The UID RFID card is written to the serial (UART) monitor - the used speed is 9600 baud / s (characters per second). The statement should be saved and rewritten in a clear .xls (EXCEL) document, which will facilitate the management of assigned RFID cards to specific teams and entities for the final RFID DOMINATOR application, whose machine code is tied to the supplied UID cards. To successfully upload the source code for loading UID cards, you need to import the MFRC522 library into your Arduino IDE.


    Available libraries for microcontrollers (Arduino)


    Library archive (.zip) expand to C:/Users/[User]/Documents/Arduino/libraries
    Library name Library function Download
    MFRC522

    Library for AVR microcontrollers (ATmega) Arduino Uno / Nano / Mega. It allows to communicate with RFID reader NXP RC522 via SPI bus.

    Download
    LiquidCrystal_I2C

    Library for AVR microcontrollers (ATmega) Arduino Uno / Nano / Mega. It allows to communicate with the LCD character display via the I2C bus.

    Download

    Example of stored UID RFID cards - Excel document .xls:


    Physical UID of RFID cards stored in a clear Excel document

    Excel (.xls) template for writing UIDs - Online Google Spreadsheets: Google Spreadsheets - RFID Domination TimerTemplate

    Software implementation - DOMINATION TIMER RFID
    Template is also available in offline version (.xlsx format): Template.xlsx
    /*|---------------------------------------------------|*/
    /*|Title: Reading UID of RFID cards                   |*/
    /*|Description: Reads via RFID reader RC522 address   |*/
    /*|of RFID card that is attached and printed          |*/
    /*|to the UART interface.                             |*/
    /*|The recorded UID cards will be used for DOMINATOR  |*/
    /*|Author: Bc. Martin Chlebovec                       |*/
    /*|E-mail: martinius96@gmail.com                      |*/
    /*|License: MIT                                       |*/
    /*|Revision: 12. Marec 2021                           |*/
    /*|---------------------------------------------------|*/
    
    
    // Template - Google SpreadSheet: https://docs.google.com/spreadsheets/d/1EHpdJi8v84eJ-6ExEPT6JuPkxI9Tfbm8v85zGRFvJ1Q/edit?usp=sharing
    
    
    /*
     * Typical pin layout used:
     * -----------------------------------------------------------------------------------------
     *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
     *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
     * Signal      Pin          Pin           Pin       Pin        Pin              Pin
     * -----------------------------------------------------------------------------------------
     * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
     * SPI SS      SDA(SS)      10            53        D10        10               10
     * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
     * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
     * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
     *
     */
    #include <SPI.h>
    #include <MFRC522.h>
    #define SS_PIN 10
    #define RST_PIN 9
    
    MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
    void setup() {
      Serial.begin(9600);
      while (!Serial);
      SPI.begin();
      rfid.PCD_Init(); // Init MFRC522
      rfid.PCD_SetAntennaGain(112); // set to max (00001110)
      rfid.PCD_DumpVersionToSerial();
    }
    
    void loop() {
      if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
        Serial.print(F("Card UID: "));
        dump_byte_array(rfid.uid.uidByte, rfid.uid.size);
        Serial.println();
        Serial.print(F("PICC type: "));
        MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
        Serial.println(rfid.PICC_GetTypeName(piccType));
        rfid.PICC_HaltA();
        rfid.PCD_StopCrypto1();
      }
    
    }
    
    void dump_byte_array(byte *buffer, byte bufferSize) {
      for (byte i = 0; i < bufferSize; i++) {
      }
      Serial.print("Code of RFID card is: ");
      unsigned long kod = 10000 * buffer[4] + 1000 * buffer[3] + 100 * buffer[2] + 10 * buffer[1] + buffer[0]; //finalny kod karty
      Serial.println(kod);
    }
    

    Program optimization for RFID DOMINATOR:


    UID numbers of RFID cards for RED, GRE, Referee and Eraser inserted into fields that can be easily scaled to expand the number of players assigned to a particular group. Entire arrays are stored in the microcontrollers flash memory as row-only segments, so the arrays do not have to run in RAM to take up the RAM used by DOMINATOR. The standard RFID DOMINATOR program for 10x UID for RED and GRE team and 2x UID for Referee and Eraser takes up 9512 bytes of flash memory, i. 30% and 501 bytes of RAM, i. 24%. Static strings (const) of a variable stored in PROGMEM. Used F macro for static reports on the UART monitor or on the LCD character display.


    I2C Scanner - a program for reading the address of the I2C converter for the LCD display


    Expected output of I2C Scanner:


    Výpis I2C adresy, na ktorej komunikuje I2C prevodník pre displej 16x2 / 20x4

    The Wire library is built into the Arduino IDE, no installation is required. The program can be compiled and verified communication via I2C bus with LCD character display. I2C converter should be connected to Arduino to hardware I2C outlets (SCL to A5, SDA to A4) before loading the program, it is enough even without display. The retrieved display address must be provided for a successful build for Arduino along with the UID of the RFID cards.

    #include <Wire.h>
     
     
    void setup()
    {
      Wire.begin();
     
      Serial.begin(9600);
      while (!Serial);             // Leonardo: wait for serial monitor
      Serial.println("\nI2C Scanner");
    }
     
     
    void loop()
    {
      byte error, address;
      int nDevices;
     
      Serial.println("Scanning...");
     
      nDevices = 0;
      for(address = 1; address < 127; address++ )
      {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
     
        if (error == 0)
        {
          Serial.print("I2C device found at address 0x");
          if (address < 16)
            Serial.print("0");
          Serial.print(address,HEX);
          Serial.println("  !");
     
          nDevices++;
        }
        else if (error==4)
        {
          Serial.print("Unknown error at address 0x");
          if (address < 16)
            Serial.print("0");
          Serial.println(address,HEX);
        }    
      }
      if (nDevices == 0)
        Serial.println("No I2C devices found\n");
      else
        Serial.println("done\n");
     
      delay(5000);           // wait 5 seconds for next scan
    }