Project repository - wiring diagrams, machine codes for testing - Github: Airsoft - RFID Domination Timer - Arduino
If you are interested in purchasing firmware for RFID Domination Timer, please contact:

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 chip)
  • Firmware version: 0x92 = Version 2.0 - (original NXP 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
    RFID wristband of ISO / IEC 14443-A standard - Eraser

    RFID Domination Timer description:

    Domination Timer is a device (stopwatch) for Airsoft sports, Paintball with an Arduino microcontroller (Uno / Nano) with an AtMega328P AVR chip. The stopwatch includes an LCD character display measuring 16x2 (16 characters x 2 lines), or 20x4, on which the times of individual teams are displayed. There are 2 teams in the game - RED team and GRE team that play against each other and occupy the imaginary point that is formed by this device - Domination Timer. At the beginning of the game, the display shows the times 00 hours, 00 minutes, 00 seconds for RED team , GRE team . Each member of the team is equipped with a card, bracelet or key fob, which communicates on the frequency 13.56MHz with an RFID reader, if it is within range. Keychains and bracelets can be color-coded (green, red according to team and function ...), which allows them to be distributed more efficiently to players, but also their archiving and storage. If the RED team occupies a point, the team player attaches his card to the reader, thus occupying the point. This action triggers a buzzer that announces a change in the point. Then the RED team's LED at this station will light up and the display will start adding time for that team.

    If a GRE team occupies a point and a member of that team attaches the card to the reader, a buzzer sounds again, that team's LED lights up, RED's team time is paused, and team time counts. GRE, which occupied the point. If the card / key fob is attached by the organizer (referee), both times are paused until one of the teams inserts the card. This type of card is thus suitable for starting a break, but can also be used at the end of the game, when it is necessary to stop time to evaluate the game. If the card is attached by Eraser, both times are stopped and reset to the initial value of 00 hours, 00 minutes, 00 seconds at the same time. Used to restart the game, initialize a new game. Project RFID Domination Timer for Airsoft is suitable for events, facilities (arenas), or Airsoft teams. Huge advantage of the Domination Timer system is that the system can be cloned using same firmware for multiple RFID Domination Timers, so you can create as many Timers as you want that will react to same cards. The NXP RC522 reader works at a frequency of 13.56MHz, registers RFID tags at approx. 3 centimeters (almost physical contact with the reader is required), compatible ISO / IEC 14443-A tag format. The given tag standard also includes ISIC, bus cards, which function as NFC cards and can communicate their physical address - UID to a reader within range.

    LCD 20x4 output for RFID Domination Timer:

    LCD character display 20x4 - Arduino Domination Timer - DOMINATOR

    Compatible control hardware for RFID Domination Timer:

    Peripherals for RFID Domination Timer:

    LCD znakový displej 16x2 / 20x4
    LCD character display 16x2 / 20x4
    I2C prevodník pre LCD displej
    I2C converter for LCD display
    RFID čítačka NXP RC522
    RFID reader NXP RC522
    RFID čipy štandardu ISO/IEC 14443-A
    RFID chips of ISO / IEC 14443-A standard
    2x LED diódy
    2x LED diodes

    How RFID Domination Timer works (hardware side):

    The NXP RC522 RFID reader communicates with the microcontroller (Arduino / stand-alone AtMega328P chip) via the SPI bus with a clock signal (CLK) of 4 MHz. The reader responds to the distance of the chip about 3 cm from the antenna, while it has a configurable gain of the antenna in the range of 18 to 48 dB (48 dB is used in the final application). Reads the UID (identifier) of RFID cards in range, forwards this identifier to Arduino. Arduino compares the read card address in a multi-condition, applies digital states to diodes, runs a universal counter controlled by the millis() function, which is responsible for counting both times. Based on the fulfilled condition, the counter will be applied to the given team to which the UID belongs. The time is sent via the I2C bus to the 20x4 character display, where it is plotted on a specific line - only the specific position is overwritten for the fastest possible time recovery. Listing of all adjustments to the display takes up to 30ms at the I2C bus speed of 100 kHz - Standard speed, which is used. In case of serious interest, it is possible to create firmware in machine code for AtMega328P to measure for other types of RFID readers: RDM6300, PN532, Wiegand W26, increase of I2C bus clock signal up to 400 kHz (Fast Speed).

    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:

    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 DOMINATOR points in the game field with identical firmware, which players can play with the same RFID cards. DOMINATOR 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 dirt, water, 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 if it is within range of the RFID reader. DOMINATOR is suitable for game modes with the same number of players in both teams, e.g. DOMINATION, Capture Point (Points for multiple cloned DOMINATOR points). It is mainly used for Airsoft sports, Paintball games.

    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
    3V3 3V3
    D9 RST
    D10 SDA (SS)
    D11 MOSI
    D12 MISO
    D13 SCK
    Arduino Uno / Nano (AtMega328P) I2C converter for LCD display
    5V Vcc
    A4 (Hardware SDA) SDA
    A5 (Hardware SCL) SCL
    Arduino Uno / Nano (AtMega328P) Buzzer
    5V Vcc
    D5 IN
    Arduino Uno / Nano (AtMega328P) LED diodes
    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. MFRC522 library in version 1.4.8: Github repository - download the .zip archive and copy the contents of the archive to Arduino / libraries (the folder is most often located in the Documents, or according to your own installation in another location).

    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
    /*|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:                      |*/
    /*|License: MIT                                       |*/
    /*|Revision: 12. Marec 2021                           |*/
    // Template - Google SpreadSheet:
     * 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() {
      while (!Serial);
      rfid.PCD_Init(); // Init MFRC522
      rfid.PCD_SetAntennaGain(112); // set to max (00001110)
    void loop() {
      if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
        Serial.print(F("Card UID: "));
        dump_byte_array(rfid.uid.uidByte, rfid.uid.size);
        Serial.print(F("PICC type: "));
        MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
    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

    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 microcontroller's 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()
      while (!Serial);             // Leonardo: wait for serial monitor
      Serial.println("\nI2C Scanner");
    void loop()
      byte error, address;
      int nDevices;
      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.
        error = Wire.endTransmission();
        if (error == 0)
          Serial.print("I2C device found at address 0x");
          if (address < 16)
          Serial.println("  !");
        else if (error==4)
          Serial.print("Unknown error at address 0x");
          if (address < 16)
      if (nDevices == 0)
        Serial.println("No I2C devices found\n");
      delay(5000);           // wait 5 seconds for next scan