Stránka 1 z 1
NRF24L01
Napsal: 02 pro 2018, 21:45
od rovina
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
Re: NRF24L01
Napsal: 02 pro 2018, 23:24
od martinius96
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.
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.
Re: NRF24L01
Napsal: 03 pro 2018, 21:32
od rovina
Moc dik
Re: NRF24L01
Napsal: 05 pro 2018, 17:55
od martinius96
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