RFID DOMINATOR: Die ultimative Domination-Stoppuhr für Airsoft und Paintball
Über RFID DOMINATOR – Revolutionierung des Wettkampf-Gameplays
Der RFID DOMINATOR ist eine hochmoderne Domination-Stoppuhr, die für Airsoft, Paintball und andere Wettkampfsportarten entwickelt wurde und die Strategie und das Engagement in jedem Spiel verbessert.
Dieses fortschrittliche Gerät verfügt über ein integriertes Display, das die gesamte Belegungszeit eines Kontrollpunkts aufzeichnet, und ist daher für organisierte Veranstaltungen und Teamwettbewerbe unverzichtbar.
Dank der RFID-Technologie können Spieler mühelos die Kontrolle übernehmen, indem sie ihr RFID-Armband oder ihre Karte auf das Gerät halten. Die Stoppuhr piept, um einen Teamwechsel anzuzeigen, und der Timer zählt für das aktive Team weiter, bis ein gegnerischer Spieler den Punkt für sich beansprucht oder ein Schiedsrichter das Spiel unterbricht.
Schiedsrichter haben außerdem die Möglichkeit, den Timer bei Bedarf zurückzusetzen, um ein reibungsloses und faires Spielerlebnis zu gewährleisten.
Der auf Vielseitigkeit ausgelegte RFID DOMINATOR unterstützt Standardspiele mit zwei Teams und kann erweitert werden, um bis zu vier Teams in einem einzigen Wettbewerb unterzubringen.
Steigern Sie Ihren Wettbewerbsvorteil und definieren Sie Ihre Spielweise mit dem RFID DOMINATOR neu!
Anwendungsszenarien
Ideal für Spielplätze, Felder mit Airsoft-/Paintball-Erfahrung. Events wie LARP, MilSim, Szenario, Speedball, aufgrund der Flash-Größe, die Hunderte von RFID-Tags in einer einzigen Anwendung unterstützt.
Unterstützte Hardware
Mit RFID DOMINATOR 2.0 PCB sind folgende Komponenten kompatibel
DEMO Firmware
RFID DOMINATOR bietet eine kostenlose DEMO-Firmware an, mit der Sie das Gerät und seine Grundfunktionen testen können, sofern es ordnungsgemäß gemäß den auf der Webseite von RFID DOMINATOR verfügbaren Schaltplänen verdrahtet ist.
Modulares Design, portable Firmware
Das modulare Design des RFID DOMINATOR ermöglicht dem Benutzer, Hauptkomponenten auszutauschen, ohne etwas löten zu müssen. Durch die Hot-Swap-Methode kann er das Modul innerhalb von Sekunden entfernen und ein neues einsetzen. Der Benutzer kann die Firmware auf beliebig viele andere Geräte kopieren und klonen. Einmal bezahlen, so oft Sie es für Ihre Geräte benötigen.
Erschwinglich
Klonbar
Einfach zu bedienen
Open-Source-Hardware-freundlich
RFID-fähig
Modularer Aufbau
Ausgabe anzeigen
Support und Feedback
Details
PCB
RFID DOMINATOR 2.0 PCB-Spezifikationen
104 x 103 x 1,6 mm, doppelseitige Leiterplatte vom Typ FR4. Siebdruck auf der Leiterplatte markiert Position und Ausrichtung der Komponenten, wie diese gelötet werden müssen.
Open-Source-Hardware-Unterstützung
Mit Open-Source-Hardware kompatible Hardware
Die Hardware von RFID DOMINATOR basiert auf Open-Source-Hardware. Sie verwendet Arduino-Module und das Arduino-Board selbst für ein modulares Design und die Vorteile von Open-Source-Hardware (kostengünstig, leicht austauschbar).
Bestückte Leiterplatte
Blick auf die Leiterplatte, nachdem sie mit kompatiblen Bauteilen bestückt wurde
Nachdem die RFID DOMINATOR 2.0-Platine zusammengebaut wurde, beträgt die Gesamthöhe der Platine 45 mm. Auf der Vorderseite befinden sich ein LCD2004A-Bildschirm und ein MFRC522-Lesegerät, zusammen mit LED-Dioden und einem Summer. Auf der Rückseite befindet sich der Arduino Nano V3.0-Controller.
Gehäuse
3D-gedrucktes Gehäuse für RFID DOMINATOR 2.0
Gehäuse kompatibel mit PCB von RFID DOMINATOR 2.0. Die Abmessungen des Gehäuses betragen 124 x 123 x 47 mm. Die PCB selbst wird von innen, an der Vorderseite des Gehäuses, mit 4 M3-Schrauben montiert. Es besteht die Möglichkeit, ein 25 mm breites Spannband am Gehäuse zu verwenden, um es an einem Baum oder Balken zu befestigen.
Schaltplan
Schaltplan für RFID DOMINATOR 2.0
Der Schaltplan zeigt, wie Arduino Nano mit allen anderen Komponenten verdrahtet ist. Für LCD2004A wird ein hardwareseitig verdrahteter I2C-Bus und für MFRC522 ein SPI-Bus verwendet. Zusätzliche GPIOs werden für LED-Diodenanzeigen und für Summer mit PWM-Unterstützung verwendet.
Tasten-Dominator
Prototyp des mechanischen Tasters Dominator
Die Standardplatine des RFID-Dominator 2.0 kann auch für den Taster Dominator verwendet werden. Der einzige Unterschied besteht darin, dass der RFID-Leser entfernt und zwei Tasten mit optionalem Durchmesser eingesetzt werden. Auch Tasten mit LED-Hintergrundbeleuchtung sind möglich.
Galerie
Häufig gestellte Fragen
Nachfolgend finden Sie die am häufigsten gestellten Fragen unserer Community.
Wie hoch ist der Energieverbrauch des Systems?
Das System verbraucht normalerweise 40–60 mAh bei 5 V, was 0,2–0,3 W entspricht. Eine 2000 mAh-Stromquelle kann das System je nach Belastung 30–35 Stunden lang betreiben.
Kann ich es über eine Powerbank mit Strom versorgen?
Ja, der RFID DOMINATOR kann über seinen 5V-Ausgang direkt mit einer Powerbank mit Strom versorgt werden.
Wie kann ich die Firmware hochladen?
Ob es sich um eine DEMO- oder FINAL-Firmware handelt, verwenden Sie die bereitgestellte, mit Arduino kompatible .hex-Datei. Laden Sie sie mit dem XLoader-Tool hoch. Stellen Sie für Arduino Nano mit dem alten Bootloader die Geschwindigkeit auf 57600 Baud/s ein; für den neuen Bootloader verwenden Sie 115200 Baud/s. Erfolgreiche Uploads werden durch eine Nachricht von XLoader bestätigt.
Wie kopiere ich vorhandene Firmware?
Laden Sie einfach die gleiche Firmware-Datei, die Sie per E-Mail erhalten haben, auf Ihr nächstes RFID DOMINATOR-Gerät hoch. Es funktioniert identisch und erkennt die gleichen RFID-Armbänder und -Karten. Es gibt keine Begrenzung für die Anzahl der Klone, die Sie erstellen können.
Kann der Teamname geändert werden?
Im Moment nicht, aber bald wird es möglich sein, wenn die AT-Befehlserweiterung fertig ist. Teamnamen dürfen maximal 3 Buchstaben haben (dies wird durch die Software begrenzt).
Kann der DOMINATOR im Freien verwendet werden?
DOMINATOR verfügt über keine wasserdichte Box. Wenn es trocken ist, kann es auch im Freien verwendet werden. Hauptsächlich im Innenbereich oder unter einem Unterstand verwenden.
In welcher Form ist DOMINATOR erhältlich?
RFID DOMINATOR ist in der Mindestversion des Quellcodes erhältlich – ohne Summer, ausschließliche Verwendung des LCD-20x4-Displays, max. 1 RFID-Karte pro Unternehmen. Der Button DOMINATOR ist als .hex-Maschinencode verfügbar, der direkt auf einer ATmega328P MCU (Arduino Uno, Nano) ausgeführt werden kann, ohne Zugriff auf den Quellcode. DPS-Designdateien und .STL-Dateien der 3D-gedruckten Box werden nicht mit der Software geliefert.
RFID DOMINATOR - Quellcode:
Minimale Version, 1 Karte pro Team, kein Buzzer, nur für 20x4-LCD-Display
Teste RFID DOMINATOR im Wokwi Simulator! - Hier klicken
//RFID DOMINATOR 2.0 - Domination Timer for Airsoft, USAGE UNDER MIT LICENSE!
//BLUE AND YELLOW TEAM, MINIMAL FUNCTIONALITY, ONE CARD / WRISTBAND PER TEAM
//BUZZER NOT INCLUDED, only 20x4 LCD screen supported
//Author: Martin Chlebovec (martinius96@gmail.com)
//Revision --> 20th February 2026
//Project info: https://your-iot.github.io/DOMINATOR/
//Installation instructions:
//Download library MFRC522 from: https://github.com/miguelbalboa/rfid/releases/tag/1.4.11 (Click on Source code (zip))
//Download library LiquidCrystal_I2C from: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library (click on Code --> Download ZIP)
//Open .zip and copy whole directory into C:/Users/[actual user]/Documents/Arduino/libraries
//Now you can compile this source code
//For Arduino Nano with Old Bootloader, navigate to Tools --> Board --> Arduino Nano
//Tools --> Processor --> ATMega328P (Old Bootloader) - that will reduce upload speed to 57600 baud/s
//Standardly all Arduino Nano V3.0 has Old Bootloader (Blue clones)
//For standard bootloader nothing is required to set, only Arduino Nano under Tools --> Board (default)
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <Wire.h>
#include <MFRC522.h>
//Pinout compatible for Arduino Nano with MFRC522 (NXP RC522) on RFID DOMINATOR 2.0 PCB board
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
//Known RFID cards UIDs based on teams (You can see UID of your cards in Serial monitor when attached)
const unsigned long TEAM_BLU = 4321; //BLUE TEAM UID --> BLUE CARD
const unsigned long TEAM_YEL = 17933; //YELLOW TEAM UID --> YELLOW CARD
const unsigned long TEAM_REFEREE = 7921; //REFEREE GROUP UID --> GREEN CARD
const unsigned long TEAM_ERASER = 4294948592; //ERASER GROUP UID --> RED CARD
unsigned long code; //UID --> RFID CARD ADDRESS
boolean run = false; //is BLU team active on DOMINATION TIMER?
boolean run2 = false; //is YEL team active on DOMINATION TIMER?
unsigned long timer = 0; //timer 32-bit - GAME TIMER
unsigned long timer2 = 0; //timer 32-bit - RFID CHECK TIMER
boolean once = false; //was once-timed action created yet?
//TIME RELATED VARIABLES FOR TEAM RED
int second = 0; //seconds of team RED
int minute = 0; //minutes of team RED
int hour = 0; //hours of team RED
//TIME RELATED VARIABLES FOR TEAM GRE
int second2 = 0; //seconds of team GRE
int minute2 = 0; //minutes of team GRE
int hour2 = 0; //hours of team GRE
//OUTPUTS
const int BLU_LED = 6; //LED for team RED
const int RED_LED = 4; //LED for team GRE
const int ORA_LED = 7; //LED for team RED
const int GRE_LED = 3; //LED for team GRE
LiquidCrystal_I2C* lcd;
//user-defined functions declaration
void updateLCD();
void updateLCD2();
void tickClock();
void tick();
byte error, address;
void setup() {
Serial.begin(9600); //Start UART bus at 9600 baud/s
Serial.println(F("RFID Domination Timer 2.0 - freeware 9th February 2026"));
Serial.println(F("Creator: Martin Chlebovec (martinius96@gmail.com)"));
Serial.println(F("Project info: https://your-iot.github.io/DOMINATOR/"));
SPI.begin(); //Standard SPI speed for RC522 --> 4 MHz
Wire.begin(); //Standard I2C speed for LCD screen --> 100 kHz
for (address = 1; address < 127; address++ ) //this cycle will scan I2C bus and set LCD display automatically with any I2C 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(" !");
break;
}
}
lcd = new LiquidCrystal_I2C(address, 20, 4); //display initialization
pinMode(BLU_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(ORA_LED, OUTPUT);
pinMode(GRE_LED, OUTPUT);
rfid.PCD_Init(); // Init MFRC522
rfid.PCD_SetAntennaGain(rfid.RxGain_max);
rfid.PCD_DumpVersionToSerial(); //Write version of Firmware to UART
lcd->begin(); //Not valid for Wokwi simulator, valid for LiquidCrystal_I2C library from @fdebrabander
lcd->backlight(); //backlight on
lcd->clear();
lcd->setCursor(0, 0);
lcd->print(F(" RFID DOMINATOR 2.0 "));
lcd->setCursor(0, 2);
lcd->print(F(" DEVELOPED BY: "));
lcd->setCursor(0, 3);
lcd->print(F(" Martin Chlebovec "));
for (int i = 0; i < 20; i++) {
// LED animation effect, loading
switch (i % 4) {
case 0:
digitalWrite(BLU_LED, HIGH);
delay(250);
digitalWrite(BLU_LED, LOW);
break;
case 1:
digitalWrite(GRE_LED, HIGH);
delay(250);
digitalWrite(GRE_LED, LOW);
break;
case 2:
digitalWrite(RED_LED, HIGH);
delay(250);
digitalWrite(RED_LED, LOW);
break;
case 3:
digitalWrite(ORA_LED, HIGH);
delay(250);
digitalWrite(ORA_LED, LOW);
break;
}
//print loading bar
lcd->setCursor(i, 1);
lcd->write(byte(255)); // plný znak
}
delay(500);
lcd->clear();
lcd->setCursor(0, 0);
lcd->print(F("BLU 00:00:00")); //BLUE TEAM IN ROW 1
lcd->setCursor(0, 1);
lcd->print(F("YEL 00:00:00")); //YELLOW TEAM IN ROW 2
lcd->setCursor(0, 2);
lcd->print(F(" Martin Chlebovec "));
lcd->setCursor(0, 3);
lcd->print(F(" RFID DOMINATOR 2.0 "));
}
void loop() {
tickClock();
if ((millis() - timer2) >= 300) { //Check for incomming datas from RC522 reader each 300 ms
timer2 = millis();
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
dump_byte_array(rfid.uid.uidByte, rfid.uid.size);
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
if (code == TEAM_BLU) { // WAS CARD FROM TEAM BLUE?
if (!run) {
timer = millis();
}
Serial.println(F("Detected card from team BLU"));
digitalWrite(BLU_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(ORA_LED, LOW);
digitalWrite(GRE_LED, LOW);
run = true;
run2 = false;
}
if (code == TEAM_YEL) { //WAS CARD FROM TEAM YELLOW?
if (!run2) {
timer = millis();
}
Serial.println(F("Detected card from team YEL"));
digitalWrite(BLU_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(ORA_LED, HIGH);
digitalWrite(GRE_LED, LOW);
run = false;
run2 = true;
}
if (code == TEAM_REFEREE) { //WAS CARD FROM TEAM REFEREE?
Serial.println(F("Detected card from REFEREE"));
digitalWrite(BLU_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(ORA_LED, LOW);
digitalWrite(GRE_LED, LOW);
run = false;
run2 = false;
}
if (code == TEAM_ERASER) { //WAS CARD FROM TEAM ERASER?
Serial.println(F("Detected card from ERASER"));
digitalWrite(BLU_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(ORA_LED, LOW);
digitalWrite(GRE_LED, LOW);
//Zero each value for times
second = 0;
minute = 0;
hour = 0;
second2 = 0;
minute2 = 0;
hour2 = 0;
updateLCD();
updateLCD2();
//Stop active team
run = false;
run2 = false;
}
}
}
}
void tickClock() {
if ((millis() - timer) >= 1000) { //Timer for counting time each 1000 ms (second resolution)
timer = millis();
//Serial.println(timer); //UNCOMMENT TO GET TIMER PRECISION INFO, if couting in 1000 ms or more
if (once == false) {
timer2 = millis();
once = true;
}
error = Wire.endTransmission(); //check, if display was disconnected during operation, if yes, that will renew is connection and initialization
if (error != 0) {
Serial.println("Display is not communicating");
// Communication error, re-initialize the communication with the LCD
lcd->begin(); //Not valid for Wokwi simulator, valid for LiquidCrystal_I2C library from @fdebrabander
lcd->backlight();
lcd->setCursor(0, 0);
lcd->print(F("BLU : : ")); //BLU TEAM IN ROW 1
updateLCD();
lcd->setCursor(0, 1);
lcd->print(F("YEL : : ")); //YEL TEAM IN ROW 2
updateLCD2();
}
tick();
tick2();
}
}
void tick() {
if (run) {
// updateLCD(); //print team 1 numbers (BLUE)
second++;
if (second >= 60)
{
second = 0;
minute++;
if (minute >= 60)
{
minute = 0;
hour++;
}
}
updateLCD();
}
}
void tick2() {
if (run2) {
// updateLCD2(); //print team 2 numbers (YELLOW)
second2++;
if (second2 >= 60)
{
second2 = 0;
minute2++;
if (minute2 >= 60)
{
minute2 = 0;
hour2++;
}
}
updateLCD2();
}
}
void updateLCD() {
lcd->setCursor(4, 0);
if (hour < 10) {
lcd->print(F("0"));
}
lcd->print(hour, DEC);
lcd->setCursor(7, 0);
if (minute < 10) {
lcd->print(F("0"));
}
lcd->print(minute, DEC);
lcd->setCursor(10, 0);
if (second < 10) {
lcd->print(F("0"));
}
lcd->print(second, DEC);
}
void updateLCD2() {
lcd->setCursor(4, 1);
if (hour2 < 10) {
lcd->print(F("0"));
}
lcd->print(hour2, DEC);
lcd->setCursor(7, 1);
if (minute2 < 10) {
lcd->print(F("0"));
}
lcd->print(minute2, DEC);
lcd->setCursor(10, 1);
if (second2 < 10) {
lcd->print(F("0"));
}
lcd->print(second2, DEC);
}
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
}
Serial.print(F("Detected UID (code) of RFID CARD: "));
code = 10000 * buffer[4] + 1000 * buffer[3] + 100 * buffer[2] + 10 * buffer[1] + buffer[0]; //Final UID (reverse order, byte 5 as MSB
Serial.println(code); //UID
}