blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
PHP, Arduino programátor
deadawp



Airsoft / Paintball DOMINATOR cez Arduino + RFID
pridal deadawp 18.11. 2018 o 1:37



Dnes by som vám rád predstavil už takmer prachom zapadnutý projekt, ktorý som kedysi vytváral pre airsoftový tím. Požiadavka bola naprogramovať DOMINATOR cez Arduino, ktorý by bol univerzálny a spĺňal náležitosti, ktoré by mal mať správny DOMINATOR a trošku ho zmenil, čo sa týka spôsobu ovládania.

Čo ten DOMINATOR vlastne je?
Jedná sa o zariadenie, ktoré sa používa pri hraní herného módu King of the Hill, teda kráľa kopca (bodu). Zariadenie by malo disponovať displejom s dvomi časmi pre oba herné tímy. Tím, ktorý sa k DOMINATORU dostane stlačí tlačidlo a čas sa začne pripočítavať jeho tímu. (Oba časy sú počiatočne nastavené na 00 hodín, 00 minút a 00 sekúnd).

Čas sa pripočítava do momentu, kým bod neobsadí iný tím a tlačidlom nezmení pripočítavanie času na svoju stranu. Nakoľko som chcel projekt odlíšiť, využil som RFID čítačku, ktorá dokáže čítať karty a kľúčenky na 13.56MHz (existuje aj ekvivalent na 125kHz) a týmto spôsobom môžeme nahradiť mechanické tlačidlá.

Ako teda systém funguje s RFID čítačkou oproti mechanickým tlačidlám?
RFID čítačka dokáže čítať karty a kľúčenky na spomínanej frekvencii vo vzdialenosti do 3-5cm. Vyžaduje sa teda fyzická prítomnosť niektorého člena tímu. Každý člen tímu má kartu, alebo kľúčenku, ktorej kód je vopred zaznamenaný a uložený do programu. Každý kód je priradený k tímu. Načítanie karty signalizuje aj hlásič - buzzer, ktorý oznamuje zmenu.

Čas sa začne pripočítavať tímu, ktorý kartu, alebo kľúčenku priložil. Okrem dvoch tímov som využil aj špeciálne kľúčenky pre organizátora, ktorý dokáže po priložení karty zapauzovať čas v prípade sťažnosti hráča na zásah, zranenie, alebo kvôli inej situácii v hre, ktorá by mohla inému tímu priniesť výhodu. Súčasťou systému je ešte jeden používateľ - tzv. eraser, ktorý dokáže časy vynulovať a zapauzovať zároveň. Používa sa napríklad pri neplatnom odštartovaní hry, neplatnom priložení kľúčenky (napríklad vyradený hráč). Systém nie je limitovaný počtom členov tímu, záleží najmä od pamäťovej náročnosti pre beh programu, nakoľko celý systém pracuje s interným timerom - millisom. 

Aký hardvér bol využitý?

  • Riadiaci mikrokontróler - Arduino Nano/Atmega328P
  • 2x led diódy - indikácia, ktorému tímu sa pripočítava čas (modrá/červená)
  • 20x4 LCD displej - displej s real-time časmi tímov
  • 2x relé  - pre pripojenie svetiel na 230V (SSR/elmg.) - napríklad v noci - funkčnosť na základe ledky
  • 1x hlásič
  • 1x RFID čítačka RC522 na 13.56MHz
  • 12x karty/kľúčenky (5x pre každý tím, 1x organizátor, 1x eraser)

Princíp programu:
Program pracuje s funkciou millis(), ktorá vracia čas od behu procesora. Slúži na časovenie procesov, overenia vstupu, logiky... V pravidelných intervaloch, raz za 0.01 sekundy sa vykoná logika systému, ktorá overuje, či sa už niektorému tímu má pripočítavať čas, ak áno, čas sa počíta a vyobrazuje, teda 100x sa vypíše na LCD displej za sekundu, teda 100x refresh/sekunda.

Pri využití intervalu 0.001 sekundy bol systém nepresný a komunikácia s rýchlosťou 1000x refresh/sekunda po I2C zbernici na displej nefungovala korektne, nakoľko nejaký čas zaberalo aj samotné čítanie kariet. Knižnica RFID pre čítačku RC522 dokáže prerušením indikovať záznam karty, čo aktivuje hlásič. Na základe výsledku overenia cez jednoduchú if podmienku s adresami kariet (fyzickými) aktivujeme premennú, ktorá pracuje s časom a má v sebe logiku - desatiny, sekundy, minúty a hodiny. 

V systéme sú 2 podprogramy, ktoré sú tvorené bool premennými. Každá bool premenná je pre jeden tím. Ak sa nastaví na true, začne sa vykonávať logika pre ten daný tím. Ak sa priloží kľúčenka rovnakého tímu, nič sa nezmení. Ak sa priloží kľúčenka iného tímu, bool pre tím, ktorému sa počítač čas sa zmení na false a pre tím, ktorému sa začne počítať čas na true. Ak kľúčenku priloží organizátor, obe bool premenné sa nastavia na false. Hodnoty - sekundy, minúty a hodiny sú uložené v dynamických globálnych premenných, s ktorými sa vo vnútrie true boolových hodnôt pracuje. Ak kľúčenku priloží eraser, obe bool premenné sa nastavia na false a všetky globálne premenné na 0. 

Incializácia premenných

Prevod načítanej karty na jedinečný tvar v DEC tvare + zapnutie hlásiča na 4kHz po dobu 1s

Snippet logiky kariet pre tím 1 - jeho bool premenná nastavená na true

Logika systému bežiaca každých 10ms


Logika systému pre prvý tím:

Vykreslenie výsledkov na displej

Aký je maximálny časový rozsah systému?
Maximálny časový rozsah pri aktuálnom nastavení pozície na LCD displeji je maximálny rozsah 99 hodín, 59 minút, 59 sekúnd. V skutočnosti ale systém dokáže bežať až takmer 50 dní do pretečenia millisu. 

Pre koho je systém vhodný?
Systém je vhodný pre tímy, amatérskych hráčov, ktorí si chcú hru prikrášliť, taktiež aj pre niekoľko-dňové akcie typu Fort Benning, možnosť využiť v externých i interných priestoroch, vhodné aj pre športový areál prevádzkujúci Airsoft/Paintball. Nahratie UID (adries) RFID tagov je jednorázové, sú zapísané priamo do zdrojového kódu. 

Celý systém je možné osadiť i na DPS, existujú návrhy pre výrobu prostredníctvom GERBER súborov / fotocestou - oba pre znakový LCD displej 20x4 s mikrokontrolérom Arduino Nano. Rozmer závisí najmä od použitého displeja, dá sa použiť 20x4 ako na foto vyššie, alebo 16x2, ktorý dokáže výrazne zmenšiť výsledný rozmer DPS.

DOMINATOR v praxi:

Wiring Arduino pin --> periféria (kompatibilné pre R3 dosky + Nano + Atmega328P

Arduino a prepojenie s LCD s I2C prevodníkom
A4 --> SDA
A5 --> SCK/SCL
5V --> Vcc
GND --> GND

Arduino a prepojenie RC522
3.3V --> 3.3V
DGND --> GND
D9 --> RST
D10 --> CS
D11 --> MOSI
D12 --> MISO
D13 --> SCK

Arduino a prepojenie hlásiča - v prípade 3-pinového treba priviesť ešte 5V z Arduina
D5 --> INPUT
GND --> GND

Arduino a prepojenie  LED + relé
5V --> 5V relé
GND --> GND
D3--> Anóda dióda + relé IN2
D4 --> Anóda dióda + relé IN1

Knižnice sú dostupné v Github repozitári: https://github.com/martinius96/Airsoft-DOMINATOR-RFID/

Pre viac informácii o projekte RFID DOMINATOR navštívte jeho stránky: https://martinius96.github.io/Airsoft-DOMINATOR-RFID/

Schéma zapojenia pre RFID DOMINATOR:

Zdrojový kód pre načítanie adries UID RFID tagov - NEREPREZENTUJE RFID DOMINATOR!!!!:

//PROGRAM PRE NACITANIE UID RFID KARIET PRE DALSIE POUZITIE V DOMINATOR-e
//PRE PROJEKT RFID DOMINATOR (Airsoft, Paintball, Nerf Wars)
//Autor: Martin Chlebovec
//TOTO NIE JE PROGRAM PRE DOMINATOR!

#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_1_PIN 10
#define NR_OF_READERS 1
byte ssPins[] = {SS_1_PIN};
MFRC522 mfrc522[NR_OF_READERS];
void setup() {
Serial.begin(9600);
while (!Serial);
SPI.begin();
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN);
mfrc522[reader].PCD_SetAntennaGain(112); // set to max (00001110)
Serial.print(F("Reader "));
Serial.print(reader);
Serial.print(F(": "));
mfrc522[reader].PCD_DumpVersionToSerial();
}
}

void loop() {
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
Serial.print(F("Reader "));
Serial.print(reader);
Serial.print(F(": Card UID:"));
dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
Serial.println();
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak);
Serial.println(mfrc522[reader].PICC_GetTypeName(piccType));
mfrc522[reader].PICC_HaltA();
mfrc522[reader].PCD_StopCrypto1();
}
}
}

void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
}
Serial.print("Kod:");
unsigned long kod = 10000 * buffer[4] + 1000 * buffer[3] + 100 * buffer[2] + 10 * buffer[1] + buffer[0]; //finalny kod karty
Serial.print(kod);
}



Prístupov 5242
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Ovládanie Arduina cez UART z počítača
[ 19.11.2020] (príspevkov 0)
ArduinoJson - knižnica pre parsovanie JS...
[ 15.11.2020] (príspevkov 0)
Overenie kradnutých vozidiel - Arduino +...
[ 11.11.2020] (príspevkov 0)
Hladinomer + Zrážkomer - Arduino / ESP82...
[ 2.11.2020] (príspevkov 0)
RFID vrátnik - update Október 2020
[ 29.10.2020] (príspevkov 0)
Digitálny potenciometer, prerušenie, deb...
[ 28.10.2020] (príspevkov 0)
Integrácia zrážkomera RG-11 do projektu ...
[ 22.10.2020] (príspevkov 0)
WiFi Termostat - ESP8266 - WiFiManager -...
[ 28.9.2020] (príspevkov 0)
Izbový termostat - Portovanie programu -...
[ 22.9.2020] (príspevkov 0)
RFID vrátnik - Ukončenie projektu
[ 9.9.2020] (príspevkov 0)