reglage-sp.ino
La portée LoRa se règle au facteur d'étalement : ce croquis émet le même message en SF7 puis SF12, trente secondes par palier. Le récepteur doit changer de SF avec l'émetteur — ou lancez un récepteur par SF — pour mesurer la distance réelle de chaque palier.
Matériel requis
Une Arduino MKR WAN 1300 (microcontrôleur SAMD21, modem LoRa Semtech SX1272 point à point, pas de pile LoRaWAN embarquée, antenne 868/915 MHz). Deux MKR WAN 1300 minimum, antennes 868 MHz, terrain dégagé ou trajet de voiture pour la campagne.
Câblage
Aucun câblage ; notez l'heure et le lieu des derniers paquets reçus pour tracer la courbe de portée.
Fonctionnement
setSpreadingFactor fixe la robustesse (SF12 = 6× l'airtime du SF7), setBandwidth(125) respecte le plan EU, setCodingRate(5) ajoute de la correction d'erreur. Chaque palier +1 SF ≈ +20-35 % de portée.
Exécution
Installez Arduino SAMD Boards et la bibliothèque MKRWAN, sélectionnez la carte, téléversez. Il faut DEUX cartes LoRa (deux MKR WAN 1300, ou une 1300 et une 1310) pour voir les échanges ; réglez le même plan de fréquences dans le code.
Variantes
Inversez les rôles pour mesurer en montée, ou fixez le SF12 en émission et faites varier la puissance (setTxPower) pour isoler son effet.
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
}