Репозиторий с тестовыми программными реализациями для точек Airsoft WiFi: Airsoft - точки WiFi - Arduino
Если вы заинтересованы в приобретении прошивки для точек WiFi, обращайтесь (на английском языке) по адресу: martinius96@gmail.com
Arduino LCD WiFi Секундомер Схема Кнопка Capture Points Paintball DOMINATOR

Точки Wi-Fi для Airsoft | Paintball


Сущности в проекте точек WiFi:

RED команда
RED команда
GRE команда
GRE команда

Описание проекта точек WiFi:

Режим игры «Захват очков» для страйкбола и пейнтбола. Точки общаются друг с другом через модули WiFi из серии nRF24L01, при этом обмениваются информацией о статусе точки (занята ли она и какой командой). Одна точка является постоянным передатчиком и требует связи с другой точкой. Вторая точка - это приемник, который реагирует на данные, полученные передатчиком, что позволяет избежать коллизий при обмене данными на частоте Wi-Fi 2,4 ГГц. В каждой из точек используется управляющий микроконтроллер Arduino (Arduino Uno / Nano) или отдельный чип (Atmel) AtMega328P, который контролирует всю логику системы. В игре 2 команды - RED команда и GRE команда, которые играют друг против друга и пытаются занять обе точки, нажав соответствующую кнопку. Ввод кнопки указывает на действие по занятию точки членом команды RED или GRE. Используются кнопки, подключенные в режиме INPUT_PULLUP. Нажатие кнопки подает сигнал GND на цифровой входной терминал Arduino (сигнал переключения Active-LOW). Продолжительность / количество нажатий не контролируется и не настраивается. Точка немедленно реагирует на нажатие кнопки. Игра заканчивается, когда обе точки заняты одной и той же командой. Смена точки индицируется детектором, в конце игры оба детектора издают бесконечный звуковой сигнал, при этом связь по WiFi между модулями nRF24L01 прерывается. Модули WiFi nRF24l01 обмениваются данными на частоте 2,4 ГГц. nRF24l01 (без + PA + LNA) обменивается данными на расстоянии около 70 метров, nRF24l01 + PA + LNA также на километр, соответственно, в лесу или в других нарушенных условиях на уровне 450-700 метров при максимальной мощности передачи. Для внешнего питания необходимо использовать YL-адаптер с преобразователем на 3,3 В и запитать его через внешний адаптер. Не используйте блок питания 5V от Arduino, есть риск вывести из строя контроллер, а также клемма 3V3 не подходит для питания модуля, так как имеет высокое потребление тока в более мощных режимах передачи. Перезапуск обеих точек выполняется путем сброса кнопки Arduín или путем извлечения и подключения источника питания (цикл включения).

Беспроводные модули обмениваются данными на частоте 2,4 ГГц, это не технология WiFi, им не нужен роутер или точка доступа! Модули имеют собственный канал связи с возможностью выбора до 140 каналов.

Поддерживаемые скорости модулей nRF24L01:

  • 250 kbps - эта опция не поддерживается для более старых моделей nRF24L01!
  • 1 Mbps
  • 2 Mbps
  • Режимы питания модулей nRF24L01:

  • RF24_PA_MIN=-18dBm
  • RF24_PA_LOW=-12dBm
  • RF24_PA_MED=-6dBM
  • RF24_PA_HIGH=0dBm
  • Блок-схема - точки WiFi - страйкбол:

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

    Совместимое оборудование управления для точек Wi-Fi Airsoft:



    Периферийные устройства для точек WiFi Airsoft:


    2 модуля WiFi nRF24L01 / nRF24L01 + PA + LNA
    2 модуля WiFi nRF24L01 / nRF24L01 + PA + LNA
    Кнопка питания (pushbutton)
    4x Кнопка питания
    Зуммер
    2x Зуммер
    2x Светодиоды
    4x Светодиоды

    Схема подключения - точки WiFi


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

    Точки WiFi - тестовое соединение


    WiFi body - - Arduino pre Airsoft, Paintball

    Точки WiFi - Capture Points - Демонстрация функциональности:


    Таблица подключения клемм - точек WiFi - полностью соответствует схеме подключения:

    Arduino Uno / Nano (AtMega328P) nRF24L01
    GND GND
    3V3 /внешний источник Vcc
    D3 CSN
    D4 CE
    D11 MOSI
    D12 MISO
    D13 SCK
    Arduino Uno / Nano (AtMega328P) LED диоды
    GND GND
    D7 IN (RED)
    D8 IN (GREEN)
    Arduino Uno / Nano (AtMega328P) Кнопки (INPUT_PULLUP)
    GND GND
    D5 IN (RED)
    D6 IN (GRE)
    Arduino Uno / Nano (AtMega328P) Зуммер
    D2 IO
    GND GND

    Тестовая программа - точки WiFi


    Целью программы тестирования является проверка совместимости оборудования (версии модулей nRF24L01 со скоростью передачи 250 кбит / с, так как не все из них это поддерживают). Протестируйте и установите соединение между передатчиком и приемником с помощью обратного вызова приемника, который возвращает данные, отправленные передатчику. Приемник имеет встроенный зуммер, который подает звуковой сигнал при обнаружении определенных данных - это указывает на то, что есть соединение с передатчиком и данные идут. Тестер также подходит для использования в игре Airsoft для первоначального тестирования дальности и связи между двумя узлами. Передатчик всегда передает, приемник только в ответ на передатчик после получения данных. Возможна передача разных данных в структуре, более крупных пакетов.

    Тестер передатчика (Это не программа для проекта Airsoft WiFi! - Проект платный)

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

    Тестер приемника (Это не программа для проекта Airsoft WiFi! - Проект платный)

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