Repozytorium projektów — oprogramowanie sprzętowe Shareware dla konfigurowalnego Dominatora: Domination Timer firmware
W przypadku zainteresowania firmware dla konfigurowalnego DOMINATORA w kodzie maszynowym prosimy o kontakt z autorem projektu w języku ANGIELSKIM pod adresem:

martinius96@gmail.com

Arduino LCD Enkoder obrotowy Stoper Schemat Przycisk Menu Paintball DOMINATOR

Konfigurowalny DOMINATOR - stoper do Airsoft Paintball


Podmioty w projekcie konfigurowalne DOMINATOR:

Drużyna RED - przycisk wprowadzania użytkownika
Drużyna RED
Sędzia - połączenie obu przycisków zatrzymuje czas
Sędzia / STOP
Drużyna GRE - przycisk wprowadzania użytkownika
Drużyna GRE

Konfigurowalny opis projektu DOMINATOR:


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 .

Konfigurovateľný DOMINATOR - výber konfigurovateľného parametra Konfigurovateľný DOMINATOR - menu pre nastavenie maximálnej dĺžky hry

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).


Lista czasów na wyświetlaczu LCD - tryb gry DOMINACJA:


Výpis časov na LCD znakovom displeji 20x4 - Arduino Domination Timer - DOMINATOR

Lista czasów na wyświetlaczu LCD - tryb gry ODLICZANIE:


Výpis časov na LCD znakovom displeji 20x4 - Arduino Domination Timer - COUNTDOWN

Kompatybilny sprzęt sterujący - Konfigurowalny DOMINATOR:


Mikrokontroler sterujący ATmega328P DIP
ATmega328P - DIP28
Mikrokontroler sterujący ATmega328P SMD
ATmega328P - SMD

Kompatybilne urządzenia peryferyjne - Konfigurowalny DOMINATOR:



Schemat połączeń - Konfigurowalny DOMINATOR


Konfigurovateľný DOMINATOR - schéma zapojenia - Arduino / Airsoft, stopwatch, DOMINATION

Konfigurowalny DOMINATOR - Tryb gry DOMINACJA


Konfigurovateľné stopky - Arduino pre Airsoft, Paintball

Okablowanie zacisków - DOMINATOR konfigurowalny - w pełni odpowiada schematowi okablowania:


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

Program testowy (Shareware) - Konfigurowalny DOMINATOR z kodem maszynowym


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.

  • AVRDUDE musi być uruchamiany przez CMD (wiersz poleceń) zainstalowany z Arduino IDE. Zlokalizowany w C:/Users/User/Documents/ArduinoData/packages/arduino/tools/avrdude/6.X.X-arduino/bin

  • Przykładowe polecenie do wgrania programu do Arduino Uno / Nano (ATmega328P):
  • Dla oprogramowania układowego z adresem wyświetlacza I2C 0x27 (przykładowy port COM 21 i 115200 bodów/s): avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:encoder_0x27.ino.hex:i
  • Dla oprogramowania układowego z adresem wyświetlacza I2C 0x3F (przykładowy port COM 21 i 115200 bodów/s): avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:encoder_0x3F.ino.hex:i
  • XLoader to aplikacja Windows (narzędzie wykonywalne .exe) z prostym interfejsem graficznym co pozwala wybrać firmware - kod maszynowy (.hex), platformę docelową i może dynamicznie pokazywać port COM, na którym znajduje się urządzenie.
  • Po prostu klikając Prześlij, kod maszynowy może zostać załadowany automatycznie ( XLoader używa podobny do narzędzia Arduino IDE AVRDUDE). Okno XLloadera informuje o pomyślnym załadowaniu w postaci listy przesłanych bajtów.
  • Oprogramowanie można pobrać z repozytorium: TUTAJ . Firmware znajduje się w folderze Github repozytorium projektu /firmware/encoder_dominator/ podzielony według adresu konwertera I2C (dowiedziałeś się z wyjścia skanera I2C na interfejsie UART). Jeśli używasz Arduino Nano z OLD Bootloaderem, konieczne jest wgranie projektu z prędkością 57600 bodów/s, ponieważ szybkość transmisji 115200 nie jest obsługiwana!

    Dostępne oprogramowanie układowe - Konfigurowalny przycisk DOMINATOR


    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

    Skaner I2C - program do odczytu adresu konwertera I2C dla wyświetlacza LCD


    Oczekiwane wyjście skanera I2C:


    Výpis I2C adresy, na ktorej komunikuje I2C prevodník pre displej 16x2 / 20x4

    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
    }