Datalager med implementering af testsoftware til Airsoft-punkter: Airsoft - WiFi-punkter - Arduino
Hvis du er interesseret i at købe firmware til WiFi-punkter, skal du kontakte: martinius96@gmail.com
Arduino LCD WiFi Stopur Ordning Knap Capture Points Paintball DOMINATOR

WiFi-point til Airsoft Paintball


Enheder i WiFi-point-projektet:

Tím RED - tlačidlo pre používateľský vstup
Det RØDE hold
Tím GRE - tlačidlo pre používateľský vstup
Det GRE hold

Projektbeskrivelse WiFi-punkter:

Capture Points-spiltilstand til Airsoft og Paintball-sport. Punkterne kommunikerer med hinanden via WiFi-moduler fra nRF24L01-serien, mens de udveksler oplysninger om punktets status (om det er optaget og af hvilket hold). Det ene punkt er en permanent sender og kræver kommunikation fra det andet punkt. Det andet punkt er modtageren og reagerer på de data, der modtages af senderen, og undgår således kollisioner, når de kommunikerer på WiFi-frekvensen 2,4 GHz. Hver af punkterne bruger en Arduino-kontrolmikrocontroller (Arduino Uno / Nano) eller en separat chip (Atmel) AtMega328P, som styrer hele systemets logik. Der er 2 hold i spillet - RØDT hold a GRE holdder spiller mod hinanden og prøver at optage begge point ved at trykke på den relevante knap. Knappens input angiver handlingen ved at besætte et punkt af et medlem af det RØDE eller GRE-hold. De trykknapper, der er tilsluttet i tilstanden INPUT_PULLUP, bruges. Ved at trykke på knappen føjes GND-signalet til Arduino digitale indgangsterminal (Active-LOW switch signal). Trykvarighed / antal tryk styres ikke og kan ikke konfigureres. Punktet reagerer straks på et tryk på en knap. Spillet slutter, når begge point er besat af det samme hold. Ændringen i punktet er angivet af detektoren, i slutningen af spillet bipper begge detektorer i en endeløs sløjfe, og samtidig afbrydes WiFi-kommunikationen mellem nRF24L01-modulerne. WiFi-moduler nRF24l01 kommunikerer ved 2,4 GHz. nRF24l01 (uden + PA + LNA) kommunikerer ved ca. 70 meter, nRF24l01 + PA + LNA også pr. kilometer, henholdsvis i skoven og ellers forstyrret miljø i niveauet 450-700 meter ved maksimal transmissionseffekt. Til ekstern strømforsyning er det nødvendigt at bruge en YL-adapter med en 3,3 V konverter og strømforsyne den via en ekstern adapter. Brug ikke en 5V strømforsyning fra Arduino, der er en risiko for at ødelægge controlleren, ligesom 3V3-terminalen ikke er egnet til strømforsyning til modulet, da den har et højt strømforbrug i kraftigere transmissionstilstande. Genstart af begge punkter udføres ved at nulstille Arduín-knappen eller ved at trække ud og tilslutte strømforsyningen (start-cyklus).

Trådløse moduler kommunikerer ved 2,4 GHz, det er ikke WiFi-teknologi, de kræver ikke en router eller et adgangspunkt! Modulerne har deres egen kommunikationskanal med et valg mellem op til 140 kanaler.

Understøttede modulhastigheder nRF24L01:

  • 250 kbps - denne mulighed understøttes ikke til ældre nRF24L01!
  • 1 Mbps
  • 2 Mbps
  • Effekttilstande for nRF24L01-moduler:

  • RF24_PA_MIN=-18dBm
  • RF24_PA_LOW=-12dBm
  • RF24_PA_MED=-6dBM
  • RF24_PA_HIGH=0dBm
  • Blokdiagram - WiFi-punkter - Airsoft:

    Bloková schéma / Block scheme - Capture Points - Airsoft / Paintball, Arduino, nRF24L01

    Hardware til projektet - WiFi-punkter:

  • 2x Arduino Uno / Nano / AtMega328PArduino Uno/Nano
  • 2x WiFi modul nRF24L01 / nRF24L01 + PA + LNAnRF24L01 / nRF24L01 + PA + LNA
  • 2x SummerHlásič priloženia karty
  • 2x LED dioderLED diódy - indikátor aktívneho tímu na bode
  • 2x knap (pushbutton)LED diódy - indikátor aktívneho tímu na bode

  • Ledningsdiagram - WiFi-punkter


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

    WiFi-punkter - testforbindelse


    WiFi body - - Arduino pre Airsoft, Paintball

    WiFi-punkter - Capture Points - Demonstration af funktionalitet:


    Ledningsføring af terminaler - WiFi-punkter - svarer fuldt ud til ledningsdiagrammet:

    Arduino Uno / Nano (AtMega328P) nRF24L01
    GND GND
    3V3 / ekstern kilde Vcc
    D3 CSN
    D4 CE
    D11 MOSI
    D12 MISO
    D13 SCK
    Arduino Uno / Nano (AtMega328P) LED dioder
    GND GND
    D7 IN (RED)
    D8 IN (GREEN)
    Arduino Uno / Nano (AtMega328P) Knap (INPUT_PULLUP)
    GND GND
    D5 IN (RED)
    D6 IN (GRE)
    Arduino Uno / Nano (AtMega328P) Summer
    D2 IO
    GND GND

    Testprogram - WiFi-punkter


    Målet med testprogrammet er at teste hardwareens kompatibilitet (versioner af nRF24L01-moduler med en overførselshastighed på 250 kbps, da ikke alle understøtter det). Test og implementer en forbindelse mellem senderen og modtageren med en tilbagekaldelse af modtageren, som returnerer de data, der sendes til senderen. Modtageren har en integreret summer, der bipper, når den registrerer bestemte data - det indikerer, at der er en forbindelse til senderen, og dataene flyder. Testeren er også velegnet til brug i Airsoft-spillet til den indledende test af rækkevidden og kommunikationen mellem de to noder. Senderen sender altid, modtageren kun som svar på senderen efter modtagelse af dataene. Det er muligt at overføre forskellige data i strukturen, større pakker.

    Sendertesteren (Dette er ikke et program til Airsoft WiFi-projektet! - Projektet er betalt)

    //nRF24L01 + PA + LNA - Transmitter tester
    //Author: Martin Chlebovec (martinius96)
    //Web: https://arduino.php5.sk
    //Donate: https://paypal.me/chlebovec
    
    #include <SPI.h>
    #include "RF24.h"
    // nastavení propojovacích pinů
    #define CE 4
    #define CS 3
    // inicializace nRF s piny CE a CS
    RF24 nRF(CE, CS);
    // nastavení adres pro přijímač a vysílač,
    // musí být nastaveny stejně v obou programech!
    byte adresaPrijimac[]= "prijimac00";
    byte adresaVysilac[]= "vysilac00";
    void setup() {
      // komunikace přes sériovou linku rychlostí 9600 baud
      Serial.begin(9600);
      // zapnutí komunikace nRF modulu
      nRF.begin();
      nRF.setDataRate( RF24_250KBPS );
      // nastavení výkonu nRF modulu,
      // možnosti jsou RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH and RF24_PA_MAX,
      // pro HIGH a MAX je nutnýv externí 3,3V zdroj
      nRF.setPALevel(RF24_PA_LOW);
      // nastavení zapisovacího a čtecího kanálu
      nRF.openWritingPipe(adresaVysilac);
      nRF.openReadingPipe(1,adresaPrijimac);
      // začátek příjmu dat
      nRF.startListening();
    }
    
    void loop() {
      // for smyčka pro postupné odeslání
      // hodnot 0 až 3 pro načtení všech dat
      // z přijímače
      for (int i=0; i < 4; i++ ) {
        // ukončení příjmu dat
        nRF.stopListening();
        // vytisknutí aktuální volby po sériové lince
        Serial.print("Posilam volbu ");
        Serial.println(i);
        // uložení startovního času komunikace
        unsigned long casZacatek = micros();
        // odeslání aktuální volby, v případě selhání
        // vytištění chybové hlášky na sériovou linku
        if (!nRF.write( &i, sizeof(i) )){
           Serial.println("Chyba při odeslání!");
        }
        nRF.startListening();
        unsigned long casCekaniOdezvy = micros();
        boolean timeout = false;
        while ( ! nRF.available() ){
        if (micros() - casCekaniOdezvy > 200000 ){
              timeout = true;
              break;
          }      
        }
        if ( timeout ){
          Serial.println("Chyba při prijmu, vyprseni casu na odezvu!");
        }
        else{
         
            unsigned long prijataData;
            nRF.read( &prijataData, sizeof(prijataData) );
            unsigned long casKonec = micros();
            Serial.print("Odeslana volba: ");
            Serial.print(i);
            Serial.print(", prijata data: ");
            Serial.println(prijataData);
            Serial.print("Delka spojeni: ");
            Serial.print(casKonec - casZacatek);
            Serial.println(" mikrosekund.");
        }
        delay(200);
      }
    }
    

    Modtagertester (Dette er ikke et program til Airsoft WiFi-projektet! - Projektet er betalt)

    //nRF24L01 + PA + LNA - Receiver tester
    //Author: Martin Chlebovec (martinius96)
    //Web: https://arduino.php5.sk
    //Donate: https://paypal.me/chlebovec
    
    #include <SPI.h>
    #include "RF24.h"
    int prijem;
    const int buzzer = 2;
    #define CE 4
    #define CS 3
    RF24 nRF(CE, CS);
    byte adresaPrijimac[] = "prijimac00";
    byte adresaVysilac[] = "vysilac00";
    void setup() {
      Serial.begin(9600);
      pinMode(buzzer, OUTPUT);
      nRF.begin();
      nRF.setDataRate( RF24_250KBPS );
      nRF.setPALevel(RF24_PA_LOW);
      nRF.openWritingPipe(adresaPrijimac);
      nRF.openReadingPipe(1, adresaVysilac);
      nRF.startListening();
    }
    
    void loop() {
      unsigned long odezva;
      if ( nRF.available()) {
        // čekání na příjem dat
        while (nRF.available()) {
          nRF.read( &prijem, sizeof(prijem) );
        }
        Serial.print("Prijata volba: ");
        Serial.print(prijem);
        switch ( prijem ) {
          case 1:
    
            odezva = millis();
    
            tone(buzzer, 50, 500);
    
            break;
          case 2:
            odezva = millis() / 1000;
            break;
          case 3:
            odezva = micros();
            break;
          default:
            odezva = 0;
            break;
        }
        nRF.stopListening();
        nRF.write( &odezva, sizeof(odezva) );
        nRF.startListening();
      }
    }