Druckknopf Stoppuhr der Dominanz ist eine Gerät für Sportarten wie Airsoft, Paintball. Die Stoppuhr verwendet einen Arduino Control-Mikrocontroller (Arduino Uno / Nano) oder einen separaten Chip (Atmel) ATmega328P, der die gesamte Systemlogik steuert. Die Stoppuhr enthält eine 16 x 2 (16 Zeichen x 2 Zeilen) oder 20 x 4 große LCD-Zeichenanzeige, auf der die Zeiten einzelner Teams angezeigt werden. Es gibt 2 Teams im Spiel - RED Mannschaft und 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 RED Mannschaft , GRE Mannschaft .
Druckknopf Stoppuhr der Dominanz verwendet die Tasteneingabe für die Besetzung eines Punktes durch ein Teammitglied sowie für die Eingabe einer Schiedsrichter- und Radiergummi-Entität. Somit werden insgesamt 4 Tasten für 4 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. Den Druckknopf Stoppuhr der Dominanz gibt es in zwei Versionen: Die Basisversion reagiert sofort auf einen Punktbelegungstaster. Die erweiterte Version erfordert, dass Sie die Taste 5 Sekunden lang gedrückt halten, um einen Punkt erfolgreich zu besetzen. Die Zeiten werden auf einer 16x2- oder 20x4-LCD-Zeichenanzeige angezeigt, die über den I2C-Bus mit dem Steuermikrocontroller kommuniziert. Wenn ein Teammitglied des RED Mannschaft 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 RED Mannschafts an dieser Station auf und die Anzeige fügt Zeit für dieses Team hinzu. Wenn der Punkt vom GRE Mannschaft belegt ist und das Teammitglied die entsprechende Taste drückt, ertönt erneut der Summer, die GRE-Team-LED leuchtet auf, die ROTE Teamzeit wird angehalten und die Die GRE-Teamzeit wird berechnet, welchen Punkt er belegt hat.
Wenn der Organisator (Schiedsrichter) seinen Knopf drückt, werden beide Male angehalten, bis ein Mitglied eines der Teams Benutzereingaben macht. Diese Art der Eingabe eignet sich daher zum Starten einer Pause, kann aber auch das Spiel zur Auswertung beenden. Schaltfläche Stoppuhr der Dominanz verfügt über eine vierte Schaltfläche für die Radiergummi-Entität, die beide Male angehalten und auf die Anfangswerte zurückgesetzt wird, wie nach dem Starten der Stoppuhr Taste DOMINATOR. Zum Neustarten des Spiels wird ein neues Spiel initialisiert. Das Projekt eignet sich für Airsoft-Veranstaltungen, Sportanlagen oder Airsoft-Teams, die die Ausrüstung bauen können. Der Vorteil des Druckknopf Stoppuhr der Dominanz-Systems besteht darin, dass es geklont werden und X-Punkte mit derselben Konfiguration über Maschinencode erstellen kann, der in eine unbegrenzte Anzahl von Arduino-Boards und -Chips geladen werden kann und einen identischen Anwendungsbetrieb garantiert. Die Spieler können somit mehr Punkte im Spiel erzielen, während am Ende des Spiels die Zeit addiert wird, solange welcher Punkt von welchem Team belegt wurde.
Die Druckknopfen sind im INPUT_PULLUP-Modus verbunden, sie verwenden einen internen 20-kΩ-PULLUP-Widerstand, der den Logikpegel HIGH am digitalen Eingang hält. Bei gedrückter Taste wird das LOW-Signal auf den digitalen Eingang geführt. Basierend auf dem verwendeten Tastentyp und der verwendeten Firmware-Version kann der Arduino die Dauer des Tastendrucks überprüfen, und die Zählerlogik wird unabhängig ausgeführt. Wenn die Bedingung der Änderung an diesem Punkt erfüllt ist, löst der Arduino ein Summen aus und wendet digitale Zustände auf die LEDs an. Die Systemlogik wird alle 1000 ms - 1 Hz ausgeführt (zeitgesteuert über die Funktion millis(), d. h. über Timer 0), unabhängig vom Zustand der digitalen Eingänge. In dieser Routine wird ein aktiver Teamcheck durchgeführt, gefolgt von der Zeit. Die Zeit wird dynamisch auf einem 20x4- oder 16x2-LCD-Zeichendisplay dargestellt. Das Display kommuniziert mit dem Arduino über einen I2C-Bus mit einem Taktsignal (SCL) von 100 kHz - Standard Speed. Das Überschreiben der Anzeige dauert somit bis zu ca. 15 ms, wobei nur die gerade aktive Zeile des angegebenen Teams überschrieben wird. Bei ernsthaftem Interesse kann die Firmware für DOMINATOR auf 3 oder 4 Teams erweitert werden.
Arduino Uno / Nano (ATmega328P) | I2C-Wandler für LCD-Anzeige |
GND | GND |
5V | Vcc |
A4 (Hardware SDA) | SDA |
A5 (Hardware SCL) | SCL |
Arduino Uno / Nano (ATmega328P) | Buzzer |
GND | GND |
5V | Vcc |
D5 | IN |
Arduino Uno / Nano (ATmega328P) | LED Dioden |
GND | GND |
D4 | IN (RED) |
D3 | IN (GREEN) | Arduino Uno / Nano (ATmega328P) | Tasten (INPUT_PULLUP) |
GND | GND |
D6 | IN (GREEN) |
D7 | IN (ERASER) |
D8 | IN (Schiedsrichter) |
D9 | IN (RED) |
Firmware-Name (im Ordner button_dominator) | Designed für | Herunterladen |
0x27.ino.hex | LCD-Zeichenanzeigegröße 16x2 oder 20x4 mit I2C-Wandler, der unter der Adresse 0x27 kommuniziert | Firmware herunterladen |
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 }