reglage-sp.ino

Arduino MKR WAN 1300 · Archivo : reglage-sp.ino · Lenguaje : Arduino · Uso : Régler l'antidatage SF pour maximiser la portée

El alcance LoRa se ajusta con el factor de propagación: este sketch emite el mismo mensaje de SF7 a SF12, treinta segundos por escalón. El receptor debe cambiar de SF con el emisor —o lanzar un receptor por SF— para medir la distancia real de cada escalón.

Hardware

Una Arduino MKR WAN 1300 (microcontrolador SAMD21, módem LoRa Semtech SX1272 para enlaces punto a punto, sin pila LoRaWAN integrada, antena de 868/915 MHz). Al menos dos MKR WAN 1300, antenas de 868 MHz, terreno despejado o un trayecto en coche para la campaña.

Cableado

Sin cableado; anota hora y lugar de los últimos paquetes recibidos para trazar la curva de alcance.

Funcionamiento

setSpreadingFactor fija la robustez (SF12 = 6x el tiempo de emisión del SF7), setBandwidth(125) respeta el plan EU, setCodingRate(5) añade corrección de errores. Cada +1 SF ≈ +20-35 % de alcance.

Ejecución

Instala Arduino SAMD Boards y la librería MKRWAN, selecciona la placa y carga. Hacen falta DOS placas LoRa (dos MKR WAN 1300, o una 1300 y una 1310) para ver los intercambios; fija el mismo plan de frecuencias en el código.

Variantes

Invierte los roles para medir en subida, o fija SF12 en emisión y varía la potencia (setTxPower) para aislar su efecto.

reglage-sp.ino

// Balayage des facteurs detalement : portee vs debit sur MKR WAN 1300.
// Emetteur : diffuse le meme message dans chaque SF, 30 s chacun.
#include <MKRWAN.h>

LoRaModem modem;

const int SFS[] = {7, 8, 9, 10, 11, 12};
int index = 0;
unsigned long dernier = 0;

void setup() {
  Serial.begin(115200);
  while (!Serial);
  if (!modem.begin(EU868)) while (true);
  modem.setFrequency(868.3); // canal libre hors trames classiques
  appliquer();
}

void loop() {
  if (millis() - dernier >= 30000) {
    dernier = millis();
    index = (index + 1) % 6;
    appliquer();
  }
  modem.beginPacket();
  modem.print("SF");
  modem.print(SFS[index]);
  modem.print(" ");
  modem.print(millis() / 1000);
  modem.endPacket(false);
  delay(2000);
}

void appliquer() {
  modem.setSpreadingFactor(SFS[index]);
  modem.setBandwidth(125);    // kHz, obligation reglementaire EU
  modem.setCodingRate(5);     // 4/5
  Serial.print(F("SF="));
  Serial.println(SFS[index]); // SF12 ~ 0.3 kbit/s, portee max
}

← Volver a la ficha