NRF24L01

Odpovědět
rovina
Příspěvky: 2
Registrován: 02 pro 2018, 20:07
Reputation: 0

NRF24L01

Příspěvek od rovina » 02 pro 2018, 21:45

Dobrý den,na funkcnim zarizeni s modulem NRF24L01bych potreboval zvysit dosah signalu nasel jsem NRF24L01+PA+LNA modul tak se ptam jestli by stacilo zamenit jen moduly nebo to musim preprogramovat i s novym modulem. Jedna se o tohle zarizeni

Kód: Vybrat vše

https://www.ebay.com/itm/DC-120V-100A-Volt-Amp-AH-SOC-Battery-Monitor-Wireless-Meter-Remaining-Capacity/123270760171?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: NRF24L01

Příspěvek od martinius96 » 02 pro 2018, 23:24

Program ako taký je totožný pre NRF24L01 a NRF24L01 + PA + LNA.
Ja používam knižnicu RF24, kde sa dá nastavovať výkon a taktiež prenosová rýchlosť.
Najlepšie výsledky som tam dosiahol pri nastavení najmenšej prenosovej rýchlosti na 250kbps a MAX výkon - čo vyžadovalo ext. napájanie, HIGH výkon (druhý najsilnejší) som bol schopný dosiahnuť, keď som NRF24L01 cez adaptér - base napájal na 5V z Arduina.
Obrázek
V programe to vyzeralo asi cca:

Kód: Vybrat vše

nRF.setDataRate( RF24_250KBPS );
nRF.setPALevel(RF24_PA_HIGH);
Na tomto nastavení som v nezarušenom priestore dosiahol 80 metrov na tento výkon s nrf24l01 a cez 900m s +pa + lna.

rovina
Příspěvky: 2
Registrován: 02 pro 2018, 20:07
Reputation: 0

Re: NRF24L01

Příspěvek od rovina » 03 pro 2018, 21:32

Moc dik

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: NRF24L01

Příspěvek od martinius96 » 05 pro 2018, 17:55

Vyhrabal som nato jeden príklad:
Knižnica: https://ulozto.sk/!4fzG9qpl8j3Y/rf24-zip
Tento program som používal pri teste dosahu, na prijímači bol buzzer, ktorý pípal, ak získal údaj od vysielača.
Prijímač:

Kód: Vybrat vše

#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_HIGH);
  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();
  }
}
Vysielač

Kód: Vybrat vše

#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_HIGH);
  // 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);
  }
}
Tú úroveň výkonu na HIGH som používal s adaptérom pre nrf a napájaním na 5V.
Pravdepodobne to pôjde i pri 3.3V, alebo skôr LOW :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 14 hostů