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.
  • Empfänger

    // nRF24L01 prijimac
    #include <SPI.h> //arduino kniznica pre SPI zbernicu
    #include "RF24.h" //kniznica pre moduly
    int odezva = 3; //globalna premenna pre odosielany stav timu
    int prijem = 4; //globalna premenna pre citany stav timu
    const int buzzer = 2; //pin pre hlasic
    const int cervenytim = 5; //pin pre cerveny button
    const int zltytim = 6;  //pin pre zlty button
    const int cervenaled = 7;
    const int zltaled = 8;
    #define CE 4 //chip state pin
    #define CS 3 //chip select pin
    RF24 nRF(CE, CS); //nrf s volitelnymi pinmi CE a CS
    byte adresaPrijimac[] = "prijimac00"; //adresa prijimac
    byte adresaVysilac[] = "vysilac00"; //adresa vysielac
    void setup() {
      Serial.begin(9600); //Serial monitor na 9600 baud/s
      pinMode(buzzer, OUTPUT); //hlasic nastavit ako vystup
        pinMode(cervenaled, OUTPUT);
      pinMode(zltaled, OUTPUT);
      pinMode(cervenytim, INPUT_PULLUP); //tlacidla ako vstup na pullup rezistor
      pinMode(zltytim, INPUT_PULLUP); //tlacidla ako vstup na pullup rezistor
      nRF.begin(); //zapnut komunikaciu s nRF modulom
      nRF.setDataRate( RF24_250KBPS ); //najnizsia rychlost pre najvacsiu moznu vzidalenost
      nRF.setPALevel(RF24_PA_HIGH); //napajacie napatie na high moznost MAX potrebuje externy zdroj na 5v (3.3v pri napojeni napriamo)
      nRF.openWritingPipe(adresaPrijimac); //zapisujeme na prijimac na jeho adresu
      nRF.openReadingPipe(1, adresaVysilac); //citame na svojej adrese na kanale XX
      nRF.startListening();
    }
    
    void loop() {
     if(odezva == prijem){
              
      tone( buzzer, 900, 800);
     
      delay(1000);
          }else{
            noTone(buzzer);
             int vystupcerveny = digitalRead(cervenytim);
      int vystupzlty = digitalRead(zltytim);
      if(vystupcerveny==LOW){
        odezva = 1;
        digitalWrite(cervenaled, HIGH);
        digitalWrite(zltaled, LOW);
        }else if(vystupzlty==LOW){
        odezva = 2;
         digitalWrite(cervenaled, LOW);
        digitalWrite(zltaled, HIGH);
        }
       
      if ( nRF.available()) {
        // čekání na příjem dat
        while (nRF.available()) {
          nRF.read( &prijem, sizeof(prijem) );
        }
        Serial.println("Prijata volba: ");
        Serial.println(prijem);
        Serial.println("Odozva: ");
        Serial.println(odezva);
        nRF.stopListening();
        nRF.write( &odezva, sizeof(odezva) );
        nRF.startListening();
      }
            }  
    
    }
    					 

    Sender

    // nRF24L01 vysielac
    #include <SPI.h>
    #include "RF24.h"
    #define CE 4
    #define CS 3
    RF24 nRF(CE, CS);
    int odezva = 8;
    int prijem = 12;
    const int buzzer = 2;
    const int cervenytim = 5;
    const int zltytim = 6;
    const int cervenaled = 7;
    const int zltaled = 8;
    byte adresaPrijimac[]= "prijimac00";
    byte adresaVysilac[]= "vysilac00";
    void setup() {
      Serial.begin(9600);
      pinMode(buzzer, OUTPUT);
      pinMode(cervenaled, OUTPUT);
      pinMode(zltaled, OUTPUT);
      pinMode(cervenytim, INPUT_PULLUP);
      pinMode(zltytim, INPUT_PULLUP);
      nRF.begin();
      nRF.setDataRate( RF24_250KBPS );
      nRF.setPALevel(RF24_PA_HIGH);
      nRF.openWritingPipe(adresaVysilac);
      nRF.openReadingPipe(1,adresaPrijimac);
      nRF.startListening();
    }
    
    void loop() {
     if(odezva == prijem){
              
      tone( buzzer, 900, 800);
     
      delay(1000);
          }else{
            noTone;
            int vystupcerveny = digitalRead(cervenytim);
      int vystupzlty = digitalRead(zltytim);
      if(vystupcerveny==LOW){
        odezva = 1;
        digitalWrite(cervenaled, HIGH);
        digitalWrite(zltaled, LOW);
        }else if(vystupzlty==LOW){
        odezva = 2;
        digitalWrite(cervenaled, LOW);
        digitalWrite(zltaled, HIGH);
        }
        
        nRF.stopListening();
         nRF.write( &odezva, sizeof(odezva) );
        nRF.startListening();
     while (nRF.available()) {
          nRF.read( &prijem, sizeof(prijem) );
        }
        Serial.println("Prijata volba: ");
        Serial.println(prijem);
        Serial.println("Odozva: ");
        Serial.println(odezva);
        delay(50);
            
            
            }
      
      
      }