Stoppuhr der Dominanz ist ein Gerät - eine Stoppuhr für Sportarten wie Airsoft oder Paintball, mit der Sie die Zeit der Besetzung eines Punktes mit einer Auflösung von Sekunden messen können. Die Stoppuhr ist mit einer 16x2 / 20x4 LCD-Zeichenanzeige ausgestattet. Nach dem Einschalten des Gerätes kann mit dem Drehgeber - KY-040 - zwischen den Menüelementen auf dem Display umgeschaltet werden. Über die Gegenstände ist es möglich, den Stoppuhr der Dominanz-Spielmodus zu starten, der auf Benutzertasten (Eingaben) reagiert, oder die Zeit der Teambelegung vor dem Spiel im konfigurierbaren Modus einzustellen. Dieser Parameter gibt die erforderliche Länge des Haltens der Taste an, bis das Team den Punkt erfolgreich belegt. Dieser konfigurierbare Parameter wird für die Anzahl der Sekunden implementiert. Der zweite konfigurierbare Parameter ist das automatische Ende des Spiels, um mit der Option UNLIMITED eine bestimmte Anzahl von Stunden der Stoppuhr zu erreichen - wenn die Stoppuhr bis unendlich zählt oder nach der maximalen Anzeigezeit auf dem Display - 99 Stunden, 59 Minuten, 59 Sekunden. Die Stoppuhr verwendet einen Arduino-Steuerungs-Mikrocontroller (Arduino Uno / Nano) oder einen separaten Chip (Atmel) ATmega328P, der die gesamte Systemlogik steuert. Es gibt 2 Teams im Spiel - RED mannschaft un GRE mannschaft, die gegeneinander spielen und den imaginären Punkt einnehmen, der von diesem Gerät gebildet wird - DOMINATOR. Zu Beginn des Spiels zeigt das Display die Zeiten 00 Stunden, 00 Minuten, 00 Sekunden für an RED mannschaft, GRE mannschaft.
Taste Stoppuhr der Dominanz verwendet die Tasteneingabe für die Besetzung eines Punktes durch ein Teammitglied sowie für die Eingabe einer Schiedsrichterentität. Somit werden insgesamt 2 Tasten für 3 Systementitäten verwendet, wobei die im INPUT_PULLUP-Modus verbundenen Schalttasten verwendet werden. Durch Drücken der Taste wird das GND-Signal dem digitalen Arduino-Eingangsanschluss (Active-LOW-Schaltsignal) zugeführt. Schalttasten werden verwendet, keine Schalttasten (sie würden nicht auf die Systemlogik reagieren, die gesamte Software würde immer "gedrückt" werden). Der konfigurierbare Stoppuhr der Dominanz reagiert auf die Länge der Presse, die im Konfigurationsmenü über einen Encoder eingestellt wird. Es ist erforderlich, die Taste für eine bestimmte Zeit gedrückt zu halten. Das System reagiert nicht auf kurzes Drücken. In der erweiterten Version können Sie auch die Punktneutralisierung festlegen (Anhalten der Zeit des aktiven Teams an dem Punkt, an dem ein Mitglied des anderen Teams die Taste mindestens 50% der erforderlichen Zeit gedrückt hält) Die Zeiten werden auf einer 16x2- oder 20x4-LCD-Zeichenanzeige angezeigt, die über den I2C-Bus mit dem Steuermikrocontroller kommuniziert. Wenn ein Teammitglied des ROTEN Teams per Knopfdruck einen Punkt belegt, wird ein Summer ausgelöst, der mit einem kurzen Piepton eine Änderung des Punktes ankündigt. Dann leuchtet die LED des ROTEN Teams an dieser Station auf und die Anzeige fügt Zeit für dieses Team hinzu.
Wenn der Punkt vom GRE-Team belegt ist und das Teammitglied die entsprechende Taste drückt, ertönt der Summer erneut, die GRE-Team-LED leuchtet auf, die ROTE Zeit wird angehalten und die Zeit des GRE-Teams, das den Punkt belegt hat, wird gezählt. Der Schiedsrichter muss beide Tasten gleichzeitig anhalten, um beide Male anzuhalten. Die Zeiten werden angehalten, bis der Punkt von einigen Teams im System erneut belegt wird Diese Art der Eingabe eignet sich daher zum Starten einer Pause, kann aber auch das Spiel für die Auswertung beenden. Beim COUNTDOWN-Spielmodus soll die Kombination beider Tasten die Countdown-Zeit stoppen! Das neue Spiel wird implementiert, indem das gesamte Arduino-Board über die RST-Taste zurückgesetzt oder die Stromversorgung getrennt und wieder angeschlossen wird. Im Menü ist es auch möglich, die Aktivität / Inaktivität des Summers zu konfigurieren, die auch im Spiel enthalten sein kann. Der Stoppuhr der Dominanz-Spielmodus verwendet einen Summer, um die aktuelle Besetzung eines Punktes anzukündigen. Radiergummi existiert in diesem Stoppuhr der Dominanz-Typ nicht. Ein zweites Spiel kann im System implementiert werden - Countdown, mit dem Sie einen Minuten-Countdown einstellen können, während dieser gestoppt werden muss. Der Player stoppt den Countdown, indem er beide Tasten eine bestimmte Zeit lang gedrückt hält (basierend auf dem Konfigurationsmenü für die Dauer des Drückens von Stoppuhr der Dominanz).
Arduino Uno / Nano (ATmega328P) | I2C-Wandler für LCD-Anzeige |
GND | GND |
5V | Vcc |
A4 | SDA |
A5 | SCL |
Arduino Uno / Nano (ATmega328P) | Drehcodierer - KY-040 |
GND | GND |
5V | + |
D3 | CLK |
D4 | DT |
D5 | SW |
Arduino Uno / Nano (ATmega328P) | LED Dioden |
GND | GND |
D6 | IN (RED) |
D7 | IN (GREEN) | Arduino Uno / Nano (ATmega328P) | Taste (INPUT_PULLUP) |
GND | GND |
D8 | IN (RED) |
D9 | IN (GRE) | Arduino Uno / Nano (ATmega328P) | Summer |
D10 | IO |
GND | GND |
Für das Projekt Configurable Stoppuhr der Dominanz ist eine Shareware-Version (.hex) verfügbar. Mit der Version können Sie maximal 60 Sekunden für jedes Team messen. Wenn diese Zeit erreicht ist, stoppt die Stoppuhr. Ziel der Version ist es, die Kompatibilität mit Ihrer Hardware zu überprüfen. Maschinencodes, die auf der I2C-Konverteradresse für das LCD-Display basieren, sind im Github-Repository verfügbar. Die am häufigsten verwendeten Adressen sind 0x27 und 0x3F. Wenn Sie die Adresse Ihres Konverters nicht kennen, verwenden Sie das in Arduino IDE -> I2C Scanner integrierte Beispiel, das die Adresse in die UART-Schnittstelle (serieller Monitor) schreibt. Der Maschinencode kann über die AVRDUDE-Software - Teil der Arduino IDE - oder über den XLoader mit einer GUI-Schnittstelle einfacher auf den Arduino Uno-Mikrocontroller hochgeladen werden.
Firmware-Name (im Ordner encoder_dominator) | Designed für | Herunterladen |
encoder_0x27.ino.hex | LCD-Zeichenanzeigegröße 16x2 oder 20x4 mit I2C-Wandler, der unter der Adresse 0x27 kommuniziert | Firmware herunterladen |
encoder_0x3F.ino.hex | LCD-Zeichenanzeigegröße 16x2 oder 20x4 mit I2C-Wandler, der unter der Adresse 0x3F kommuniziert | Firmware herunterladen |
#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 }