Projekt steht nicht zum kostenlosen Download zur Verfügung! Wenn Sie den Softwareteil des Projekts mit den auf der angegebenen Seite beschriebenen Funktionen erwerben möchten, wenden Sie sich an: martinius96@gmail.com
Arduino NRF24L01+PA+LNA Schematics WiFi LCD Capture point Eagle Airsoft Paintball Nerf Wars

WLAN-Zugangspunkte über Arduino Nanoo


Gebrauchte Hardware:

  • Arduino NanoEthernet Shield Wiznet W5100
  • Nrf24l01 + PA + LNA
  • Tasten
  • LED-Dioden
  • Lautsprecher
  • Beschreibung der Funktionalität und Verwendung:

  • Das System ist für Airsoft / Paintball / Nerf Wars für Capture Point Spielmodus konzipiert.
  • Das System verwendet das Arduino Nano-Paar für die 2 Punkte, auf denen die Spieler kämpfen, wobei jedes der Boards aus zwei Dioden, zwei Detektoren, zwei WLAN-Modulen nRF24l01 + PA + LNA besteht. Zusätzlich zu diesen Komponenten sind die Schaltflächen für jedes der Teams auch auf den Boards platziert.
  • Ein Knopf ist für Team 1 (gelbe Mannschaft) und zweiter für Mannschaft 2 (rote Mannschaft). Im Falle einer Besetzung drücken sie ihren Knopf, um die Farbe des Punktes entsprechend ihrer Mannschaft zu ändern.
  • Wenn ein Team beide Punkte besetzt, ertönt der Melder an beiden Punkten (das Spiel endet oder läuft nach den Regeln des Veranstalters), was beispielsweise nur das Ende der Runde oder das Hinzufügen von Punkten bedeuten kann. In Echtzeit kommunizieren beide Arduina mit den Modulen nRF24l01 + PA + LNA. Die Antwort zwischen den beiden Arduins liegt bei 1-5 ms.
  • Dank der Module nRF24l01 ist es möglich, mit Arduin in hunderten von Metern in einer ununterbrochenen Umgebung zu kommunizieren (nRF24l01 bietet über 120 Kanäle für die Kommunikation mit 2,4 GHz.) Mit einer externen 5V / 3,3V-Quelle ist es möglich, bis zu 1,1 Kilometer zu kommunizieren.

  • Youtube video - Capture Points - Arduino + nRF24L01


    Block scheme:

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

    Wiring:

    Schéma zapojenia - Arduino Nano s WiFi komunikačným modulom NRF24l01 + PA + LNA

    Transmitter tester (This is not code for Airsoft WiFi project! - project is paid)

    //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);
      }
    }
    

    Receiver tester (This is not code for Airsoft WiFi project! - project is paid)

    //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();
      }
    }