Repozytorium projektów — oprogramowanie sprzętowe Shareware dla Button Dominator: Domination Timer firmware
W przypadku zainteresowania oprogramowaniem do kodu maszynowego przycisku DOMINATOR prosimy o kontakt z autorem projektu w języku ANGIELSKIM pod adresem:

martinius96@gmail.com

Arduino LCD Przycisk Stoper Schemat I2C Paintball DOMINATOR

Przycisk DOMINATOR - stoper do Airsoft | Paintball


Podmioty w projekcie przycisku DOMINATOR:

Drużyna RED - tlačidlo pre používateľský vstup
Drużyna RED
Drużyna GRE - tlačidlo pre používateľský vstup
Drużyna GRE
Sędzia - tlačidlo pre používateľský vstup
Sędzia
Gumka - tlačidlo pre používateľský vstup
Gumka

Opis projektu Przycisk DOMINATOR


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.


Lista czasów na wyświetlaczu znakowym LCD 20x4:


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

Kompatybilny sprzęt sterujący do przycisku DOMINATOR:


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

Peryferia do przycisku DOMINATOR:



Zasada funkcjonalności projektu Przycisk DOMINATOR po stronie sprzętowej:


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.

RFID Dominator - hra pre 4 tímy
Maksymalny zakres czasu, który może być wymieniony w systemie: 99 godzin, 59 minut i 59 sekund
Zużycie: ok. 20mAh przy zasilaniu 5V. Wygodny do zasilania przez power bank, ładowarkę z telefonu z wyjściem USB.

Przycisk DOMINATOR podczas biegania w grze Airsoft


Airsoft Dominator RFID

Przycisk DOMINATOR - demonstracja funkcjonalności i logiki systemu



Tabela połączeń zacisków - Przycisk DOMINATOR - w pełni odpowiada schematowi elektrycznemu:


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)

Schemat połączeń - przycisk DOMINATOR:


Airsoft Dominator RFID

Program testowy (Shareware) - Przycisk DOMINATOR z kodem maszynowym


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.

  • AVRDUDE musi być uruchamiany przez CMD (wiersz poleceń) zainstalowany z Arduino IDE. Znajduje się 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):
  • avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:sketch.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.
  • Firmware można pobrać z repozytorium projektu: TUTAJ . Firmware znajduje się w folderze Github repozytorium projektu / firmware / button_dominator / podzielony według adresu konwertera I2C (dowiedziałeś się z wyjścia skanera I2C na interfejsie UART).

    Dostępne oprogramowanie (Shareware) - Przycisk DOMINATOR


    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
    W przypadku najnowszych chińskich klonów Arduino Nano, które posiadają "Stary Bootloader", konieczne jest nagrywanie z prędkością 57600 bodów/s! Dla innych wersji z nowszym Bootloaderem 115200 bodów/s (ta prędkość jest również wykorzystywana w poleceniu AVRDUDE do ładowania kodu maszynowego).

    Wgrywanie wersji Shareware projektu Button DOMINATOR do Arduino przez XLoader


    XLoader - Arduino - AVRDUDE - Tlačidlový DOMINATOR - testovací program

    Ogólny samouczek wideo dotyczący wgrywania oprogramowania układowego do Arduino przez Xloader



    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
    }