Przycisk DOMINATOR to urządzenie - stoper do sportów takich jak Airsoft, Paintball. Stoper wykorzystuje mikrokontroler Arduino (Arduino Uno/Nano) lub osobny układ (Atmel) ATmega328P, który steruje całą logiką systemu. Stoper posiada wyświetlacz znakowy LCD o wymiarach 16x2 (16 znaków x 2 linie) lub 20x4, który pokazuje czasy poszczególnych drużyn. W grze są 2 drużyny - RED team i GRE team które grają przeciwko sobie i zajmują wyimaginowany punkt, który jest tworzony przez to urządzenie - DOMINATOR. Na początku gry wyświetlacz pokazuje czasy 00 godzin, 00 minut, 00 sekund dla RED team , zespół GRE .
Przycisk DOMINATOR wykorzystuje dane wejściowe przycisku do działania członka zespołu, a także dane wejściowe sędziego i elementu wymazującego. Zatem łącznie 4 przyciski dla 4 jednostek systemu, używane są przyciski przełączające podłączone w trybie INPUT_PULLUP. Naciśnięcie przycisku podaje sygnał GND do wejścia cyfrowego Arduino (sygnał przełączania Active-LOW). Używane są przyciski przełączania, a nie przyciski przełączania (nie odpowiadałyby logice systemowej, wszystkie byłyby zawsze „wciśnięte”). Przycisk DOMINATOR występuje w dwóch wersjach: Wersja podstawowa natychmiast reaguje na przycisk zajętości punktu. Wersja zaawansowana wymaga przytrzymania przycisku przez 5 sekund, aby skutecznie zająć punkt. Czasy wyświetlane są na wyświetlaczu znakowym LCD 16x2 lub 20x4, który komunikuje się z mikrokontrolerem sterującym poprzez magistralę I2C. Jeśli drużyna drużyny RED zajmie punkt przez naciśnięcie przycisku, włączy się brzęczyk, który krótkim sygnałem dźwiękowym ogłosi zmianę punktu. Następnie dioda LED drużyny RED na tej stacji zaświeci się, a wyświetlacz zacznie dodawać czas dla tej drużyny.
Jeśli punkt jest zajęty przez drużynę GRE i członek drużyny naciśnie odpowiedni przycisk, brzęczyk zabrzmi ponownie, dioda LED drużyny GRE zaświeci się, czas drużyny RED zostanie wstrzymany, a Obliczany jest czas zespołu GRE, który punkt jest zajęty. Jeśli organizator (sędzia) naciśnie swój przycisk, oba razy zostaną wstrzymane, dopóki członek jednej z drużyn nie wprowadzi danych przez użytkownika. Ten rodzaj danych wejściowych jest zatem odpowiedni do rozpoczęcia przerwy, ale może również zakończyć grę w celu oceny. Przycisk DOMINATOR posiada czwarty przycisk dla elementu gumki, który wstrzymuje i resetuje oba razy do wartości początkowych jak po uruchomieniu stopera Button DOMINATOR. Służy do ponownego uruchamiania gry, inicjowania nowej gry. Projekt nadaje się na imprezy airsoftowe, obiekty sportowe lub zespoły Airsoft, które mogą budować sprzęt. Zaletą systemu Button DOMINATOR jest to, że można go sklonować i utworzyć X punktów o tej samej konfiguracji za pomocą kodu maszynowego, który można załadować na nieograniczoną liczbę płytek i układów Arduino i gwarantuje identyczne działanie aplikacji. Gracze mogą w ten sposób zdobyć więcej punktów w grze, natomiast na koniec gry doliczany jest czas, o ile który punkt był zajęty przez którą drużynę. Możliwe jest również użycie przycisków ze zintegrowaną świecą żarową, co poprawia czytelność i eksponuje kolor poszczególnych przycisków w ciemności.
Przyciski połączone są w trybie INPUT_PULLUP, wykorzystują wewnętrzny rezystor 20 kΩ PULLUP, który utrzymuje poziom logiczny HIGH na wejściu cyfrowym. Po naciśnięciu przycisku na wejście cyfrowe podawany jest sygnał LOW. Na podstawie typu przycisku i używanej wersji oprogramowania układowego Arduino może zweryfikować długość przytrzymania przycisku, a logika licznika jest wykonywana niezależnie. Gdy warunek zmiany w punkcie zostanie spełniony, Arduino wyzwala brzęczenie, nakładając stany cyfrowe na diody LED. Logika systemu jest wykonywana co 1000 ms - 1 Hz procedura (zsynchronizowana za pomocą funkcji millis(), tj. za pomocą timera 0), niezależnie od stanu wejść cyfrowych. W tej procedurze wykonywana jest aktywna kontrola zespołu, po której następuje czas. Czas jest dynamicznie kreślony na wyświetlaczu LCD 20x4 lub 16x2 znaków. Wyświetlacz komunikuje się z Arduino za pośrednictwem magistrali I2C z sygnałem zegarowym (SCL) 100 kHz - Standard Speed. Przepisywanie wyświetlacza trwa więc do ok. 15 ms, podczas gdy nadpisywana jest tylko linia danego zespołu, która jest aktywna w danym punkcie. Przy poważnym zainteresowaniu oprogramowanie układowe DOMINATORA można rozszerzyć do 3 lub 4 zespołów.
Arduino Uno / Nano (ATmega328P) | Konwerter I2C do wyświetlacza LCD |
GND | GND |
5V | Vcc |
A4 (Hardware SDA) | SDA |
A5 (Hardware SCL) | SCL |
Arduino Uno / Nano (ATmega328P) | Brzęczyk |
GND | GND |
5V | Vcc |
D5 | IN |
Arduino Uno / Nano (ATmega328P) | diody LED |
GND | GND |
D4 | IN (RED) LED |
D3 | IN (GREEN) LED | Arduino Uno / Nano (ATmega328P) | Guziki (INPUT_PULLUP) |
GND | GND |
D6 | IN (GRE drużyna) |
D7 | IN (Gumka) |
D8 | IN (Sędzia) |
D9 | IN (RED drużyna) |
Wersja Shareware (.hex) jest dostępna dla projektu DOMINATOR Button. Wersja pozwala zmierzyć maksymalnie 15 sekund gry dla każdej drużyny. Celem wersji jest weryfikacja zgodności z Twoim sprzętem. Kody maszynowe oparte na adresie konwertera I2C dla wyświetlacza LCD są dostępne w repozytorium Github. Najczęściej używane adresy to 0x27 i 0x3F. Jeśli nie znasz adresu swojego konwertera, skorzystaj z przykładu wbudowanego w Arduino IDE -> I2C Scanner, który zapisze adres do interfejsu UART (monitor szeregowy). Kod maszynowy można wgrać do mikrokontrolera Arduino Uno za pomocą oprogramowania AVRDUDE - części Arduino IDE lub za pomocą interfejsu GUI za pośrednictwem XLoader - łatwiejszy w użyciu.
Nazwa oprogramowania (w folderze button_dominator) | Zaprojektowany dla | Pobierać |
0x27.ino.hex | Wyświetlacz znakowy LCD 16x2 lub 20x4 z konwerterem I2C, który komunikuje się pod adresem 0x27 | Pobierz oprogramowanie |
0x3F.ino.hex | Wyświetlacz znakowy LCD 16x2 lub 20x4 z konwerterem I2C, który komunikuje się pod adresem 0x3F | Pobierz oprogramowanie |
Biblioteka Wire jest wbudowana w Arduino IDE, nie jest wymagana instalacja. Program można skompilować i zweryfikować komunikację poprzez magistralę I2C z wyświetlaczem znakowym LCD. Konwerter I2C należy przed wczytaniem programu podłączyć do Arduino do sprzętowych terminali I2C (SCL na A5, SDA na A4), wystarczy nawet bez wyświetlacza. Pobrany adres wyświetlacza musi być dostarczony do pomyślnej kompilacji dla Arduino wraz z identyfikatorem UID kart RFID.
#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 }