Stopky DOMINATOR (Domination Timer) sú navrhnuté pre 2 tímy, ktoré proti sebe hrajú a snažia sa o obsadenie bodu a jeho udržanie po čo najdlhšiu dobu. Stopky sú vhodné pre Airsoft / Paintball herný mód DOMINATION, resp. Capture Hill. Pozostávajú z mikrokontroléra ATmega328P (AVR), ktorý môže byť použitý samostatne, alebo osadený na vývojovom kite Arduino (Uno / Nano / Pro Mini). Pre vizualizáciu časov sa využíva LCD znakový displej (rozmer 16x2 alebo 20x4, čipset HD44780). Časy sú vypísané v dvoch riadkoch pod sebou a sú dynamicky aktualizované v prípade, že je na bode aktívny tím (bod obsadený niektorým tímom). Stopky sú vybavené indikačnými LED diódami vo farbách tímov, ktoré signalizujú aktívny tím na bode a hlásičom, ktorý oznamuje priloženie karty (zmena na bode). Do hry sú implementované tímy - RED tím a GRE tím, ktoré proti sebe hrajú a snažia sa o obsadenie bodu a jeho následné udržanie po čo najdlhší čas. Na začiatku hry sú na displeji vypísané časy 00 hodín, 00 minút, 00 sekúnd pre RED tím, GRE tím. Každý z členov tímu je vybavený RFID čipom, ktorý je integrovaný v náramku (alebo v karte / kľúčenke). RFID čip vysiela svoj jedinečný identifikátor - UID (unique ID), ktorý je načítaný RFID čítačkou a overený v logike systému ku ktorej entite (tímu) patrí. Jednotlivé náramky môžu byť farebne odlíšené (červené, zelené podľa tímu a funkcie entity), čo umožňuje ich rýchlejšiu distribúciu hráčom, ale aj ich archiváciu a uskladnenie podľa farieb. Tím RED obsadí bod v momente, keď člen tímu RED priloží svoju kartu k RFID čítačke. Táto akcia spustí buzzer, ktorý ohlási zmenu na bode krátkym pípnutím. Následne sa rozsvieti LED dióda tímu RED na tomto stanovišti a na displeji sa začne pripočítavať čas pre tento tím do momentu priloženia karty člena tímu GRE, Rozhodcu, alebo Erasera. V prípade, že bod obsadí hráč tímu GRE a priloží kartu k RFID čítačke, túto zmenu ohlási buzzer krátkym pípnutím, rozsvieti sa LED dióda tímu GRE (LED dióda tímu RED zhasne), aktuálny čas tímu RED sa zastaví a počíta sa čas tímu GRE, ktorý bod obsadil.
Ak svoju RFID kartu priloží Rozhodca, bežiaci čas sa zastaví na aktuálnej hodnote. Bod sa stáva neutrálnym, LED dióda aktívneho tímu zhasne. Zastavenie času trvá do momentu, kým priloží svoju kartu člen tímu RED, alebo tímu GRE. Tento typ karty je tak vhodný pre dočasné zastavenie prebiehajúcej hry, kontrolu zásahu hráča, či zranenia. Zároveň môže byť karta použitá pri ukončení kola hry, pre vyhodnotenie kola, respawn tímov pred pokračovaním. Ak kartu priloží Eraser, oba časy sa zastavia a zároveň sa vynulujú na počiatočnú hodnotu 00 hodín, 00 minút, 00 sekúnd, ktorá sa vypíše na displej. Karta Eraser slúži pre reštart hry, inicializáciu novej hry bez nutnosti power-on cyklu zariadenia. RFID čítačka reaguje na priloženie RFID karty okamžite vrátane celej logiky projektu Dominator. Projekt je vhodný pre Airsoft akcie (MilSim, LARP), športové areály, čí Airsoft tímy, ktoré si môžu zariadenie Dominator zostrojiť s vlastným hardvérom. Firmvér je univerzálny, ktorý vychádza zo schémy zapojenia, možno využiť aj dostupný DPS návrh pre výrobu dosky plošných spojov. Výhodou projektu RFID DOMINATOR je, že licencia používania oprávňuje prevádzkovateľa klonovať firmvér na ľubovoľný počet RFID DOMINATOR zariadení. DOMINATOR zariadenia fungujú nezávisle na sebe a reagujú na totožné RFID karty. Systém RFID Dominator je možné nasadiť do hry okamžite. Nahrávanie firmvéru trvá do 10 sekúnd cez grafické rozhranie programu XLoader, alebo cez nástroj AVRDUDE, ktorý je možné spustiť cez príkazový riadok / PowerShell.
RFID čítačka NXP RC522 komunikuje s mikrokontrolérom (Arduino / samostatný čip ATmega328P) po SPI zbernici s hodinovým signálom (SCLK) 4 MHz. Čítačka NXP RC522 reaguje na RFID čip vo vzdialenosti približne 3 cm od antény, pričom má konfigurovateľný zisk antény v rozsahu 18 až 48 dB (48 dB je použité vo finálnej aplikácii pre DOMINATOR). Načítava UID (identifikátor) RFID čipov v dosahu, preposiela tento identifikátor Arduinu. Arduino načítanú adresu karty porovná v multipodmienke, spustí pípnutie buzzra, aplikuje digitálne stavy na LED diódy. Logika systému sa nezávisle na priložení karty vykonáva každých 1000 ms - 1 Hz rutina (časované cez funkciu millis(), t.j. cez Timer 0). V tejto rutine sa vykonáva kontrola aktívneho tímu s následným pripočítaním času. Čas je dynamicky vykreslený na LCD znakovom displeji 20x4, alebo 16x2. Displej komunikuje s Arduinom po I2C zbernici s hodinovým signálom (SCL) 100 kHz - Standard Speed. Prepis displeja tak trvá do cca 15 ms, pričom sa prepisuje iba riadok daného tímu, ktorý je na bode aktívny. Pri vážnom záujme možno vytvoriť firmvér v strojovom kóde pre ATmega328P, alebo iný mikrokontróler na mieru aj pre iné typy RFID čítačiek: RDM6300, PN532, Wiegand W26, zvýšenie hodinového signálu I2C zbernice až na 400 kHz (Fast Speed). Možné rozšírenie firmvéru pre hru DOMINATOR na 3 alebo 4 tímy (na základe dohody).
Projekt RFID DOMINATOR je z hľadiska jeho univerzálnosti vhodný pre implementáciu do Airsoft / Paintball hromadných akcií a s možnosťou klonovania firmvéru je tak možné do herného poľa osadiť X DOMINATOR bodov s identickým firmvérom, o ktoré môžu hráči hrať s rovnakými RFID kartami. Klonované DOMINATOR body fungujú nezávisle na sebe. DOMINATOR sa hodí aj pre tímy, športové areály a ihriská ktoré tak môžu týmto zariadením rozšíriť ponúkané služby a herné módy pre rôzny počet hráčov. Ak sú RFID karty, náramky, respektíve kľúčenky farebne odlíšené, je veľmi ľahké a univerzálne ich distribuovať hráčom na základe ich tímu a taktiež aj ich skladovanie. Samotný RFID čip je chránený v plastovom puzdre, nevadí mu blato, špina, voda, mráz, je plne bezúdržbový. Čip nemá batériu - je pasívny. Nabije ho RFID čítačka elektrickým poľom a umožní mu vyslať UID - identifikátor ak je v dosahu RFID čítačky. DOMINATOR je vhodný pre herné módy s rovnakým počtom hráčov v oboch tímoch, napr. DOMINATION, Capture Point (Points v prípade viac klonovaných DOMINATOR bodov). Využitie je predovšetkým pre športy Airsoft, Paintball.
DPS je možné nechať si vyrobiť na Slovensku u PB Spoj, kde dokážu vyrobiť obojstrannú DPS. Výrobu je možné zrealizovať napríklad v Číne, kde dokážu vyrobiť obojstrannú DPS z GERBER návrhu. Jeden z najpopulárnejších a najlacnejších výrobcov je JLCPCB, kde je možné GERBER súbory priamo nahrať ako .zip archív. DPS sa vizualizuje, automaticky sa nastavia vrsty, rozmery DPS, obojstranná DPS. Výroba trvá 1-2 dni. Kedysi sa tento výrobca preslávil akciou výroby 10 kusov PCB za 2 doláre.
Dnes JLCPCB umožňuje vyrobiť 5 kusov tejto DPS pre RFID DOMINATOR za 6.96€, 10 kusov za 10.16€ (aktuálne k januáru 2021, ceny stúpajú). Preprava - dostupná najlacnejšia alternatíva za 7.44€ až po DHL s doručením do 3-5 pracovných dní, pričom cena prepravy je 23.16€. JLCPCB automaticky aplikuje zľavový kupón na 8€ pre prepravu, ktorý vám pridelí po registrácii. Teda s najlacnejšou prepravnou alternatívou s doručením do 25 dní je táto preprava pri prvom nákupe zdarma vďaka kupónu. Zaujímavým výrobcom PCB je aj AISLER, ktorý ponúka výrobu DPS od 3 kusov s cenou cca 7,6€ za kus s poštovným zdarma, prípadne ponúka aj možnosť doručenia za príplatok cez UPS. Taktiež je možné využiť aj iných dostupných výrobcov, napríklad: PCBWay, AllPCB, NextPCB, SeeedStudio, ktorí majú technológiu pre výrobu DPS strojovou metódou z GERBER súborov.
Arduino Uno / Nano (ATmega328P) | NXP RFID RC522 |
GND | GND |
3V3 | 3V3 |
D9 | RST |
D10 | SDA (SS) |
D11 (Hardware MOSI) | MOSI |
D12 (Hardware MISO) | MISO |
D13 (Hardware SCK) | SCK |
Arduino Uno / Nano (ATmega328P) | I2C prevodník pre LCD displej |
GND | GND |
5V | Vcc |
A4 (Hardware SDA) | SDA |
A5 (Hardware SCL) | SCL |
Arduino Uno / Nano (ATmega328P) | Hlásič (piezomenič) |
GND | GND |
D5 | IN |
Arduino Uno / Nano (ATmega328P) | LED diódy |
GND | GND |
D4 | IN (RED) |
D3 | IN (GREEN) |
K projektu RFID DOMINATOR je dostupná Shareware verzia vo forme strojového kódu (.hex) pre mikrokontróler Arduino (ATmega328P t.j. Arduino Uno / Nano / Pro Mini). Verzia umožňuje pri spustení pred herným režimom zaznamenať celkom 4 ľubovoľné RFID karty. K jednej entite je vždy priradená jedna karta. Na priloženie karty ku konkrétnej entite vyzve hláška na LCD displeji. Po priložení poslednej karty sa spustí herný režim DOMINATION so stopkami. Je možné vyskúšať hernú mechaniku a reakciu NXP RC522 čítačky na RFID karty s vizualizáciou času na displej. Merať je možné maximálne 15 sekúnd hry pre každý tím s možnosťou jeho resetu kartou Eraser a opätovným meraním 15 sekúnd donekonečna. Cieľom verzie je overiť kompatibilitu s vašim hardvérom. V Github repozitári sú dostupné strojové kódy na základe I2C adresy prevodníka pre LCD displej. Najpoužívanejšie adresy I2C prevodníkov sú 0x27 a 0x3F. Ak neviete adresu vášho prevodníka využite vstavaný príklad v Arduino IDE --> I2C Scanner (dostupný aj na tejto stránke na konci), ktorý vám adresu vypíše na UART rozhranie (Sériový monitor). Strojový kód je možné nahrať do mikrokontroléru Arduino Uno cez softvér AVRDUDE - súčasť Arduino IDE, prípadne s GUI rozhraním cez XLoader - ľahšie na použitie.
Názov firmvéru (v priečinku rfid_dominator) | Funkčnosť | Stiahnuť |
RFID_Dominator_0x27.hex | Testovací firmvér projektu RFID Dominator, umožňuje merať čas 15 sekúnd pre každý tím. Určené pre LCD znakový displej rozmeru 16x2, alebo 20x4 s I2C prevodníkom, ktorý komunikuje na adrese 0x27 | Stiahnuť firmvér |
RFID_Dominator_0x3F.hex | Testovací firmvér projektu RFID Dominator, umožňuje merať čas 15 sekúnd pre každý tím. Určené pre LCD znakový displej rozmeru 16x2, alebo 20x4 s I2C prevodníkom, ktorý komunikuje na adrese 0x3F | Stiahnuť firmvér |
Program slúži na načítanie identifikátorov (UID) RFID tagov, kariet, ktoré budú použité v programe pre RFID DOMINATOR - tento zdrojový kód nereprezentuje RFID DOMINATOR, ani jeho logiku!. Výpis UID RFID karty sa realizuje do sériového (UART) monitoru - použitá rýchlosť 9600 baud/s (znakov za sekundu). Výpis je vhodné ukladať a prepísať do prehľadného .xls (EXCEL) dokumentu, ktorý uľahčí správu priradených RFID kariet ku konkrétnym tímom a entitám pre finálnu aplikáciu RFID DOMINATOR, ktorej strojový kód je viazaný na dodané UID kariet. Pre úspešné nahratie zdrojového kódu pre načítanie UID kariet je nutné importovať knižnicu MFRC522 do vášho prostredia Arduino IDE.
Názov knižnice | Funkcia knižnice | Stiahnuť |
---|---|---|
MFRC522 |
Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega. Umožňuje komunikovať s RFID čítačkou NXP RC522 po SPI zbernici. |
Stiahnuť |
LiquidCrystal_I2C |
Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega. Umožňuje komunikovať s LCD znakovým displejom po I2C zbernici. |
Stiahnuť |
/*|-------------------------------------------------|*/ /*|Názov: Načítanie UID RFID kariet |*/ /*|Popis: Načíta prostredníctvom RFID čítačky RC522 |*/ /*|adresu RFID karty, ktorá je priložená a vypíše |*/ /*|UID na UART rozhranie. |*/ /*|Zaznamenané UID kariet sa použijú pre DOMINATOR |*/ /*|Autor: Bc. Martin Chlebovec |*/ /*|E-mail: martinius96@gmail.com |*/ /*|Licencia pouzitia: MIT |*/ /*|Revízia: 12. Marec 2021 |*/ /*|-------------------------------------------------|*/ // Šablóna - 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("Nacitany kod: "); unsigned long kod = 10000 * buffer[4] + 1000 * buffer[3] + 100 * buffer[2] + 10 * buffer[1] + buffer[0]; //finalny kod karty Serial.println(kod); }
Zaznamenané UID RFID kariet pre RED, GRE, rozhodcu a erasera sú vložené do polí. Polia môžu byť ľahko škálovateľné pre rozšírenie počtu hráčov, rozhodcov... UID je potrebné dodať v .xls výstupe. Možno použiť verejnú šablónu pre Google Tabuľky vyššie nad zdrojovým kódom (ikona Google SpreadSheet). Celé polia sú uložené do flash pamäte mikrokontroléru ako rad-only segmenty, teda polia nemusia bežať v RAM pamäti zaberať tak operačnú pamäť, ktorú DOMINATOR využíva pre plynulé počítanie časov. Zároveň sú polia nerozšíriteľné za behu programu. Ich nastavenie, veľkosť je fixné pre konkrétnu aplikáciu na mieru. Štandardný program RFID DOMINATOR-a pre 10x UID pre RED i GRE tím a 2x UID pre Rozhodcu a Erasera (celkovo 24x UID) zaberá 9512 bajtov flash pamäte, t.j. 30% a 501 bajtov pamäte RAM, t.j. 24%. Statické reťazce (const) premenné uložené do PROGMEM. Pre statické výpisy na UART monitor, prípadne na LCD znakový displej použité F makro.
Knižnica Wire je vstavaná do Arduino IDE, nie je nutná jej inštalácia. Program je možné skompilovať a overiť komunikáciu po I2C zbernici s LCD znakovým displejom. I2C prevodník je vhodné pripojiť k Arduinu na hardvérové I2C vývody (SCL na A5, SDA na A4) ešte pred nahratím programu, stačí aj bez dispelja. Načítanú adresu displeja je nutné dodať pre úspešný build pre Arduino spolu s UID RFID kariet.
#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 }