Projekt nie je dostupný zdarma na stiahnutie! Pri záujme o kúpu softvérovej časti projektu s funkčnosťou, ktorá je na danej stránke rozpísaná kontaktovať na adrese: martinius96@gmail.com
Arduino NRF24L01+PA+LNA Schematics WiFi LCD Capture point Eagle Airsoft Paintball Nerf Wars

Wifi body cez Arduino Nano


Využitý hardvér:

  • Arduino NanoEthernet Shield Wiznet W5100
  • Nrf24l01 + PA + LNA
  • Pushbuttony
  • LED diódy
  • Hlásiče
  • Popis funkčnosti a použitie:

  • Systém je určený pre športy typu Airsoft/Paintball/Nerf Wars pre herný mód Capture point.
  • Systém využíva dvojicu Arduino Nano pre 2 body, o ktoré hráči bojujú, na každej z dosiek sú dve diódy, dva hlásiče, dva wifi moduly nRF24l01 + PA + LNA. Okrem týchto súčiastok sú pri doskách umiestnené i tlačidlá pre každý z tímov.
  • Jedno tlačidlo je pre Tím 1 (žltý tím) a druhé pre Tím 2 (červený tím). Tím pri obsadení stlačí svoje tlačidlo, čo zmení farbu bodu podľa ich tímu.
  • Ak jeden tím obsadí oba body, rozuzvučia sa hlásiče na oboch bodoch (hra sa skončí, alebo pokračuje ďalej podľa pravidiel organizátora akcie) Môže to napríklad znamenať len koniec kola, alebo prípočet bodov. V reálnom čase medzi sebou obe Arduiná komunikujú s modulmi nRF24l01 + PA + LNA. Odozva medzi oboma Arduinami je na úrovni 1-5ms.
  • Vďaka modulom nRF24l01 je možné komunikovať medzi Arduinami na obrovské vzdialenosti na stovky metrov v nezarušenom prostredí (nRF24l01 ponúka vyše 120 kanálov pre komunikáciu na 2,4Ghz.) Pri využití externého 5v/3.3v zdroja je možné komunikovať až na 1,1 kilometra.

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