DOMINATOR to stoper do sportów Airsoft i Paintball, który pozwala mierzyć czas punktu z rozdzielczością sekund. Stoper wyposażony jest w wyświetlacz LCD 16x2 / 20x4. Po włączeniu urządzenia możliwe jest przełączanie się pomiędzy pozycjami menu na wyświetlaczu za pomocą enkodera obrotowego - KY-040. Dzięki przedmiotom możliwe jest uruchomienie trybu gry DOMINATOR, który reaguje na przyciski użytkownika (wejścia) lub możliwe jest ustawienie czasu zajętości drużyny przed grą w trybie konfigurowalnym. Ten parametr reprezentuje wymagany czas naciśnięcia klawisza, aż drużyna pomyślnie zajmie punkt. Ten konfigurowalny parametr jest implementowany na liczbę sekund. Drugim konfigurowalnym parametrem jest automatyczne zakończenie gry po osiągnięciu określonej liczby godzin stopera z opcją NIEOGRANICZONE - gdy stoper odlicza do nieskończoności, lub po maksymalnym czasie wyświetlania - 99 godzin, 59 minut, 59 sekund. Stoper wykorzystuje mikrokontroler sterujący Arduino (Arduino Uno/Nano) lub osobny układ (Atmel) ATmega328P, który steruje całą logiką systemu. W grze są 2 drużyny - RED Drużyna i GRE Drużyna 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 Drużyna , Drużyna GRE .
Przycisk DOMINATOR wykorzystuje dane wejściowe przycisku do działania członka zespołu, a także dane wejściowe arbitra. Łącznie w Konfigurowalnym systemie DOMINATOR wykorzystywane są 2 przyciski dla 3 jednostek systemu. Wykorzystywane 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”). Konfigurowalny DOMINATOR reaguje na długość prasy, którą ustawia się w menu konfiguracji za pomocą enkodera. Wymagane jest przytrzymanie przycisku przez określony czas. System nie reaguje na krótkie naciśnięcia. W wersji rozszerzonej istnieje również możliwość ustawienia neutralizacji punktowej (zatrzymanie czasu aktywnej drużyny w punkcie, jeśli członek drugiej drużyny przytrzyma przycisk przez co najmniej 50% wymaganego czasu) 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. Sędzia musi nacisnąć oba przyciski w tym samym czasie, aby zatrzymać oba razy. Czasy są zatrzymywane, dopóki punkt nie zostanie ponownie zajęty przez niektóre zespoły w systemie Ten rodzaj danych wejściowych nadaje się zatem do rozpoczęcia przerwy, ale może również zakończyć grę w celu jej oceny. W trybie gry ODLICZANIE kombinacja obu przycisków ma na celu zatrzymanie odliczania! Nowa gra realizowana jest poprzez zresetowanie całej płytki Arduino za pomocą przycisku RST lub odłączenie i ponowne podłączenie zasilania. W menu można również skonfigurować aktywność/nieaktywność brzęczyka, który również można włączyć do gry. Tryb gry DOMINATOR wykorzystuje brzęczyk do ogłaszania aktualnego zajęcia punktu. Gumka nie istnieje w tym typie DOMINATORA. W systemie można zaimplementować drugą grę - odliczanie, które pozwala ustawić minutowe odliczanie, podczas którego należy je zatrzymać. Gracz zatrzymuje odliczanie przytrzymując oba przyciski przez określony czas (w oparciu o menu konfiguracji długości naciśnięcia z DOMINATORA).
Arduino Uno / Nano (ATmega328P) | Konwerter I2C do wyświetlacza LCD |
GND | GND |
5V | Vcc |
A4 | SDA |
A5 | SCL |
Arduino Uno / Nano (ATmega328P) | Enkoder obrotowy - KY-040 |
GND | GND |
5V | + |
D3 | CLK |
D4 | DT |
D5 | SW |
Arduino Uno / Nano (ATmega328P) | diody LED |
GND | GND |
D6 | IN (RED) |
D7 | IN (GREEN) | Arduino Uno / Nano (ATmega328P) | Guziki (INPUT_PULLUP) |
GND | GND |
D8 | IN (RED) |
D9 | IN (GRE) | Arduino Uno / Nano (ATmega328P) | Brzęczyk |
D10 | IO |
GND | GND |
Wersja Shareware (.hex) jest dostępna dla konfigurowalnego projektu DOMINATOR. Wersja umożliwia pomiar maksymalnie 60 sekund dla każdego zespołu. Po osiągnięciu tego czasu stoper zatrzymuje się. 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 interfejsu GUI za pośrednictwem XLoader - łatwiejszy w użyciu.
Nazwa oprogramowania (w folderze encoder_dominator) | Zaprojektowany dla | Pobierać |
encoder_0x27.ino.hex | Wyświetlacz znakowy LCD 16x2 lub 20x4 z konwerterem I2C, który komunikuje się pod adresem 0x27 | Pobierz oprogramowanie |
encoder_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 }