Repository mit Testsoftware-Implementierungen für Airsoft WiFi-Punkte: Airsoft - WiFi-Punkte - Arduino
Die Firmware ist kostenlos erhältlich
Arduino DOMINATOR WiFi Stoppuhr Planen Taste Capture Points Paintball

WiFi Punkte für Airsoft | Paintball


Entitäten im WiFi-Punkte-Projekt:


Mannschaft RED
Mannschaft RED
Mannschaft GRE
Mannschaft GRE

Projektbeschreibung für WiFi-Punkte:


Capture Points-Spielmodus für Airsoft- und Paintball-Sportarten. Die Punkte kommunizieren über WLAN-Module aus der nRF24L01-Serie miteinander, während sie Informationen über den Status des Punkts austauschen (ob er besetzt ist und von welchem Team). Ein Punkt ist ein permanenter Sender und erfordert die Kommunikation vom anderen Punkt. Der zweite Punkt ist der Empfänger und reagiert auf die vom Sender empfangenen Daten, wodurch Kollisionen bei der Kommunikation auf der WiFi-Frequenz von 2,4 GHz vermieden werden. Jeder der Punkte verwendet einen Arduino-Steuerungs-Mikrocontroller (Arduino Uno / Nano) oder einen separaten Chip (Atmel) AtMega328P, der die gesamte Logik des Systems steuert. Es gibt 2 Teams im Spiel - RED mannschaft a GRE mannschaftdie gegeneinander spielen und versuchen, beide Punkte durch Drücken der entsprechenden Taste zu besetzen. Die Tasteneingabe gibt an, wie ein Mitglied des RED- oder GRE-Teams einen Punkt belegt. Die im INPUT_PULLUP-Modus verbundenen Drucktasten werden verwendet. Durch Drücken der Taste wird das GND-Signal dem digitalen Arduino-Eingangsanschluss (Active-LOW-Schaltsignal) zugeführt. Die Druckdauer / Anzahl der Druckmaschinen wird nicht gesteuert und ist nicht konfigurierbar. Der Punkt reagiert sofort auf einen Tastendruck. Das Spiel endet, wenn beide Punkte von derselben Mannschaft besetzt sind. Die Änderung des Punktes wird vom Detektor angezeigt, am Ende des Spiels piepen beide Detektoren in einer Endlosschleife und gleichzeitig wird die WiFi-Kommunikation zwischen den nRF24L01-Modulen unterbrochen. Die WiFi-Module nRF24l01 kommunizieren mit 2,4 GHz. nRF24l01 (ohne + PA + LNA) kommunizieren auf etwa 70 Metern, nRF24l01 + PA + LNA auch pro Kilometer im Wald bzw. in einer sonst gestörten Umgebung auf einer Höhe von 450-700 Metern bei maximaler Sendeleistung. Für die externe Stromversorgung muss ein YL-Adapter mit einem 3,3-V-Wandler verwendet und über einen externen Adapter mit Strom versorgt werden. Verwenden Sie kein 5-V-Netzteil vom Arduino, da die Gefahr besteht, dass der Controller zerstört wird. Das 3-V3-Terminal ist nicht für die Stromversorgung des Moduls geeignet, da es in leistungsstärkeren Übertragungsmodi einen hohen Stromverbrauch aufweist. Der Neustart beider Punkte erfolgt durch Zurücksetzen der Arduín-Taste oder durch Herausziehen und Anschließen der Stromversorgung (Einschaltzyklus).

Drahtlose Module kommunizieren mit 2,4 GHz, es handelt sich nicht um WiFi-Technologie, sie benötigen keinen Router oder Zugangspunkt! Die Module verfügen über einen eigenen Kommunikationskanal mit einer Auswahl von bis zu 140 Kanälen.

Unterstützte Modulgeschwindigkeiten nRF24L01:


  • 250 kbps - Diese Option wird für ältere nRF24L01 nicht unterstützt!
  • 1 Mbps
  • 2 Mbps

  • Leistungsmodi von nRF24L01-Modulen:


  • RF24_PA_MIN=-18dBm
  • RF24_PA_LOW=-12dBm
  • RF24_PA_MED=-6dBM
  • RF24_PA_HIGH=0dBm

  • Blockdiagramm - WiFi-Punkte - Airsoft:


    Blockschema - Punkte erfassen - Airsoft / Paintball, Arduino, nRF24L01

    Kompatible Steuerungshardware für WiFi-Airsoft-Punkte:



    Peripheriegeräte für WiFi Airsoft-Punkte:


    2x WLAN-Modul nRF24L01 / nRF24L01 + PA + LNA
    2x WiFi-Modul nRF24L01 / nRF24L01 + PA + LNA
    Schaltknopf
    4x Schaltknopf
    Summer
    2x Summer
    4x LEDs
    4x LEDs

    Schaltplan - WiFi-Punkte


    WiFi body - DOMINATOR - schéma zapojenia - Arduino / Airsoft, stopwatch, DOMINATION

    WiFi-Punkte - Verbindung testen


    WiFi body - - Arduino pre Airsoft, Paintball

    WiFi Punkte - Capture Points - Demonstration der Funktionalität:



    Die Verdrahtung der Klemmen - Konfigurierbarer DOMINATOR - entspricht vollständig dem Schaltplan:


    Arduino Uno / Nano (AtMega328P) nRF24L01
    GND GND
    3V3 / externý zdroj Vcc
    D3 CSN
    D4 CE
    D11 MOSI
    D12 MISO
    D13 SCK
    Arduino Uno / Nano (AtMega328P) LED Dioden
    GND GND
    D7 IN (RED)
    D8 IN (GREEN)
    Arduino Uno / Nano (AtMega328P) Taste (INPUT_PULLUP)
    GND GND
    D5 IN (RED)
    D6 IN (GRE)
    Arduino Uno / Nano (AtMega328P) Summer
    D2 IO
    GND GND

    Programm - WiFi-Punkte


    Programm - NODE 1 (permanenter Sender)


    // nRF24L01 transmitter
    #include <SPI.h>
    #include "RF24.h"
    #define CE 4
    #define CS 3
    RF24 nRF(CE, CS);
    int response = 8;
    int received = 12;
    const int buzzer = 2;
    const int red_team = 5;
    const int blue_team = 6;
    const int red_led = 7;
    const int blue_led = 8;
    byte adresaPrijimac[] = "prijimac00";
    byte adresaVysilac[] = "vysilac00";
    void setup() {
      Serial.begin(9600);
      pinMode(buzzer, OUTPUT);
      pinMode(red_led, OUTPUT);
      pinMode(blue_led, OUTPUT);
      pinMode(red_team, INPUT_PULLUP);
      pinMode(blue_team, INPUT_PULLUP);
      nRF.begin();
      nRF.setDataRate( RF24_250KBPS );
      nRF.setPALevel(RF24_PA_LOW);
      nRF.openWritingPipe(adresaVysilac);
      nRF.openReadingPipe(1, adresaPrijimac);
      nRF.startListening();
    }
    
    void loop() {
      if (response == received) {
        tone( buzzer, 900, 800);
        delay(1000);
      } else {
        nRF.stopListening();
        int output_red = digitalRead(red_team);
        int output_blue = digitalRead(blue_team);
        if (output_red == LOW) {
          response = 1;
          digitalWrite(red_led, HIGH);
          digitalWrite(blue_led, LOW);
        } else if (output_blue == LOW) {
          response = 2;
          digitalWrite(red_led, LOW);
          digitalWrite(blue_led, HIGH);
        }
        nRF.write( &response, sizeof(response) );
        nRF.startListening();
        while (nRF.available()) {
          nRF.read( &received, sizeof(received) );
        }
        Serial.println("Received datas: ");
        Serial.println(received);
        Serial.println("Response: ");
        Serial.println(response);
        delay(50);
      }
    }
    

    Programm - NODE 2 (Dauerempfänger mit Rückruf zum Sender)


    // nRF24L01 receiver
    #include <SPI.h>
    #include "RF24.h"
    int response = 3;
    int received = 4;
    const int buzzer = 2;
    const int red_team = 5;
    const int blue_team = 6;
    const int red_led = 7;
    const int blue_led = 8;
    #define CE 4
    #define CS 3
    RF24 nRF(CE, CS);
    byte adresaPrijimac[] = "prijimac00";
    byte adresaVysilac[] = "vysilac00";
    void setup() {
      Serial.begin(9600);
      pinMode(buzzer, OUTPUT);
      pinMode(red_led, OUTPUT);
      pinMode(blue_led, OUTPUT);
      pinMode(red_team, INPUT_PULLUP);
      pinMode(blue_team, INPUT_PULLUP);
      nRF.begin();
      nRF.setDataRate( RF24_250KBPS );
      nRF.setPALevel(RF24_PA_LOW);
      nRF.openWritingPipe(adresaPrijimac);
      nRF.openReadingPipe(1, adresaVysilac);
      nRF.startListening();
    }
    
    void loop() {
      if (response == received) {
        tone( buzzer, 900, 800);
        delay(1000);
      } else {
        if ( nRF.available()) {
          while (nRF.available()) {
            nRF.read( &received, sizeof(received) );
          }
          Serial.println("Received datas:: ");
          Serial.println(received);
          Serial.println("Response: ");
          Serial.println(response);
          nRF.stopListening();
          int output_red = digitalRead(red_team);
          int output_blue = digitalRead(blue_team);
          if (output_red == LOW) {
            response = 1;
            digitalWrite(red_led, HIGH);
            digitalWrite(blue_led, LOW);
          } else if (output_blue == LOW) {
            response = 2;
            digitalWrite(red_led, LOW);
            digitalWrite(blue_led, HIGH);
          }
          nRF.write( &response, sizeof(response) );
          nRF.startListening();
        }
      }
    }