blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDOVAŤ BLOG
PHP, Arduino programátor
deadawp



Tester dosahu / štruktúra - nRF24L01 / nRF24L01 + PA + LNA
pridal deadawp 6.2. 2020 o 20:21



Jeden projekt s využitím WiFi modulov nRF24L01 sa už v mojom blogu nachádza. Využíval som ich pri tvorbe WiFi bodov pre herný mód Capture Points / DOMINATION. Aby sme si moduly pripomenuli, komunikujú na frekvencii 2,4 GHz pričom je možné využiť až 120 kanálov pre prenos. Je možné využiť komunikáciu s vysielačom až k ôsmym prijímačom skrz osem "pipelines". Každý modul nRF24L01 podporuje až 4 nezávislé módy výkonu - MIN, LOW, HIGH, MAX.

Každý vyžaduje špecifický zdroj. Pre mód HIGH / MAX sa odporúča využiť externý zdroj. Napájanie modulu je na 3.3V, pričom vývody má 5V tolerantné, t.j. dátové vodiče SPI zbernice sa môžu napojiť aj na 5V piny Arduina. Najčastejšie sa pre HIGH / MAX výkonový mód používa trakčná batéria a pod modul nRF24L01 doplnkový adaptér - YL-105, ktorý obsahuje 3.3V regulátor. S využitím MAX napájacieho módu s priamou viditeľnosťou je možné použiť modul nRF24L01 + PA + LNA (s externou anténou) až na 1100 metrov v nezarušenom prostredí.

Ku spoľahlivosti prenosu a navýšeniu dosahu dopomôže aj nastavenie nízkej dátovej rýchlosti. Nastaviť je možné 250kbps, 1Mbps, 2Mbps. Dôležitým prvkom pri realizácii nového projektu je vyskúšať komunikáciu na menovitú vzdialenosť, na ktorú chceme projekt používať. Preto som vytvoril jednoduchý program pre vysielač a prijímač.

Vysielač vysiela vždy v cykle hodnoty 0 až 3. Využíva 200ms pauzu medzi jednotlivými hodnotami, ktoré odosiela.  Vysielač okrem toho prijíma dáta od prijímača (ak sú dostupné), ktorý spätne odpovedá na prijaté dáta. Odosiela hodnotu, ktorú prijal. 

Prijímač čaká v cykle na dáta od vysielača. Po prijatí dát ich spätne odošle vysielaču. V prípade, že prijímač príjme hodnotu 1, pošle signál na hlásič, ktorý sa rozozvučí. Vďaka tomu je možné sledovať spolu so vzdialenosťou, či je prenos úspešný a či hlásič pravideľne pípa. 
Program pre tester dosahu je možné nájsť na: https://arduino.php5.sk/airsoft-wifi.php

Schéma zapojenia pre vysielač a prijímač (z iného projektu):

Ďalšim bodom článku je možnosť využitia štruktúry pre prenos dát. Vďaka tomu je možné v jednom dátovom balíku - "pakete" prenášať viacero dát, ktoré je možné jednoducho spracovať aj na strane prijímača. Rovnaká dátová štruktúra teda môže slúžiť pre odosielanie, ale aj príjem dát. U vysielača a prijímača je nutné, aby používali rovnakú dátovú štruktúru. Dátová štruktúra používa 2 položky, položku T typu int a položku A typu float. Vysielač vysiela hodnotu T = 100 a A = 3.14. Prijímač vysiela ako odpoveď vysielaču na prijaté dáta hodnotu T = 200 a A = 6.28.
Program pre vysielač:

//Autor: Martin Chlebovec (martinius96)
//Web: https://arduino.php5.sk

#include <SPI.h>
#include "RF24.h"
#define CE 4
#define CS 3
RF24 nRF(CE, CS);

typedef struct {
int T;
float A;
} dataPacket;

byte adresaPrijimac[] = "prijimac00";
byte adresaVysilac[] = "vysilac00";
void setup() {
Serial.begin(9600);
nRF.begin();
nRF.setDataRate( RF24_250KBPS );
nRF.setPALevel(RF24_PA_LOW);
nRF.openWritingPipe(adresaVysilac);
nRF.openReadingPipe(1, adresaPrijimac);
nRF.startListening();
}

void loop() {
dataPacket packet;
packet.T = 100;
packet.A = 3.14;
nRF.stopListening();
nRF.write(&packet, sizeof(dataPacket));
nRF.startListening();
while (nRF.available()) {
nRF.read(&packet, sizeof(dataPacket));
Serial.print("Prijata hodnota T: ");
Serial.println(packet.T);
Serial.print("Prijata hodnota A: ");
Serial.println(packet.A);
}
delay(50);
}


Program pre prijímač:

//Autor: Martin Chlebovec (martinius96)
//Web: https://arduino.php5.sk

#include <SPI.h>
#include "RF24.h"
#define CE 4
#define CS 3
RF24 nRF(CE, CS);

typedef struct {
int T;
float A;
} dataPacket;

byte adresaPrijimac[] = "prijimac00";
byte adresaVysilac[] = "vysilac00";
void setup() {
Serial.begin(9600);
nRF.begin();
nRF.setDataRate( RF24_250KBPS );
nRF.setPALevel(RF24_PA_LOW);
nRF.openWritingPipe(adresaPrijimac);
nRF.openReadingPipe(1, adresaVysilac);
nRF.startListening();
}

void loop() {
dataPacket packet;
if ( nRF.available()) {
while (nRF.available()) {
nRF.read(&packet, sizeof(dataPacket));
Serial.print("Prijata hodnota T: ");
Serial.println(packet.T);
Serial.print("Prijata hodnota A: ");
Serial.println(packet.A);
}
nRF.stopListening();
packet.T = 200;
packet.A = 6.28;
nRF.write(&packet, sizeof(dataPacket));
nRF.startListening();
}
}



Prístupov 320
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Včelárska váha - Arduino - update
[ 23.2.2020] (príspevkov 0)
Senzorická sieť v LAN sieti - Arduino + ...
[ 14.2.2020] (príspevkov 0)
Airsoft DOMINATOR - Tlačidlový - Arduino...
[ 7.2.2020] (príspevkov 0)
Tester dosahu / štruktúra - nRF24L01 / n...
[ 6.2.2020] (príspevkov 0)
Monitor teplôt, vlhkostí - Arduino Mega ...
[ 25.1.2020] (príspevkov 0)
ThingSpeak - IoT platforma pre Arduino /...
[ 16.1.2020] (príspevkov 0)
Vzorkovanie signálu - MATLAB
[ 15.1.2020] (príspevkov 0)
Meranie napätia - Arduino
[ 13.1.2020] (príspevkov 0)
Meranie jednosmerného prúdu - Arduino
[ 12.1.2020] (príspevkov 0)
Hlasom ovládané auto - ESP8266 (NodeMCU)
[ 10.1.2020] (príspevkov 0)