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 member's 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), RED's current time stops , and GRE's 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 team's 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 player's 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 (MilSim, LARP), 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 .
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.
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).
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.
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) |
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.
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 |
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.
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 |
/*|---------------------------------------------------|*/ /*|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(rfid.RxGain_max); 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); }
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.
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 }