Capteur d'humidite du sol connecte avec Sigfox


Un capteur IoT low-power autonome pour votre jardin : Arduino MKRFox 1200 + SEN0193 + Sigfox.

Le capteur dans son boitier imprime 3D

Introduction

Ce tutoriel vous guide pas a pas pour construire un capteur d’humidite du sol connecte, autonome sur piles, et capable d’envoyer ses donnees via le reseau Sigfox. Le systeme est optimise pour une autonomie maximale grace au mode deep sleep du MKRFox 1200.

A la fin de ce tuto, vous aurez un capteur qui :

  • Mesure l’humidite du sol toutes les 6 heures (ou selon votre choix)
  • Envoie les donnees via Sigfox sans aucune infrastructure WiFi ou GSM
  • Tient plusieurs mois sur 2 piles AA
  • Est visible depuis le backend Sigfox ou votre propre dashboard

Materiel necessaire

Composants principaux

ComposantDescription
Arduino MKRFox 1200Microcontroleur SAMD21 + module Sigfox ATA8520 integre
Capteur SEN0193Capteur capacitif d’humidite du sol (3.3V - 5V)
2x piles AAAlcalines ou lithium - branchement direct sur le board
Porte-piles 2x AAA imprimer en 3D ou acheter - avec fils soudes
Antenne SigfoxAntenne officielle Arduino ou fil de 8.6 cm (quart d’onde 868 MHz)

Outils

  • Fer a souder + etain
  • Multimetre (pour verifier les tensions)
  • Cable USB Micro-B (pour flasher le code)
  • IDE Arduino avec le core SAMD installe
  • Mini breadboard (optionnel, pour les tests)

Preparation de l’environnement Arduino

Avant de toucher au materiel, il faut preparer l’IDE Arduino pour qu’il reconnaisse le MKRFox 1200.

Installer l’IDE Arduino

Telechargez et installez l’IDE Arduino depuis arduino.cc/en/software. La version 2.x est recommandee.

Installer le core SAMD

Le MKRFox 1200 utilise un processeur SAMD21 qui n’est pas inclus par defaut. Dans l’IDE :

  1. Allez dans Tools > Board > Boards Manager
  2. Cherchez “Arduino SAMD Boards”
  3. Installez le package (ca prend quelques minutes)

Installer les librairies

Deux librairies sont necessaires. Dans Tools > Manage Libraries (ou Sketch > Include Library > Manage Libraries) :

  1. Cherchez et installez “Arduino SigFox for MKRFox1200”
  2. Cherchez et installez “ArduinoLowPower”

Configurer la board

  1. Branchez le MKRFox 1200 en USB (cable Micro-B)
  2. Allez dans Tools > Board > Arduino SAMD > Arduino MKR FOX 1200
  3. Allez dans Tools > Port et selectionnez le port COM qui apparait

Si le port n’apparait pas, verifiez que le cable USB est bien un cable data (pas juste un cable de charge). Certains cables Micro-B ne transmettent pas les donnees.

Le moniteur serie

Pour lire les messages de debug du board, ouvrez Tools > Serial Monitor et reglez le debit a 9600 bauds (en bas a droite). C’est la que s’afficheront l’ID et le PAC du module Sigfox.

Le piege du deep sleep

Une fois le code final flashe, le board entre en deep sleep et le port USB disparait completement de votre ordinateur. C’est normal mais destabilisant la premiere fois.

Pour reprendre le controle et reflasher :

  1. Double-cliquez rapidement sur le bouton RST du board
  2. La LED orange se met a pulser lentement — le board est en mode bootloader
  3. Un nouveau port COM apparait dans l’IDE
  4. Vous avez ~8 secondes pour lancer l’upload du nouveau code

C’est la manipulation la plus importante a retenir. Si vous ne la connaissez pas, vous penserez que votre board est mort.

Schema de cablage

ConnexionBranchement
SEN0193 VCCPin D5 du MKRFox (alimentation pilotee par le code)
SEN0193 GNDPin GND du MKRFox
SEN0193 AOUTPin A1 du MKRFox (lecture analogique)
Piles AA +Borne + du connecteur a vis vertes
Piles AA -Borne - du connecteur a vis vertes
AntenneConnecteur ANT du MKRFox
Schema de cablage Arduino MKRFox 1200 + SEN0193

Attention : D6 est la LED_BUILTIN sur le MKRFox 1200, pas D13 comme sur les autres Arduino. Ne pas utiliser D6 pour piloter le capteur.

Le capteur est alimente via D5 et non via VCC directement. Cela permet de l’eteindre en deep sleep et d’economiser de l’energie. Le courant max par pin est de 7 mA - le SEN0193 en 3.3V consomme ~5 mA, ce qui est dans la limite.

Configuration Sigfox

Etape 1 - Recuperer l’ID et le PAC

Avant d’enregistrer votre device sur le backend Sigfox, vous devez recuperer son identifiant unique (ID) et son code d’activation (PAC). Flashez ce code temporaire :

#include <SigFox.h>

void setup() {
  Serial.begin(9600);
  while (!Serial) {}
  if (!SigFox.begin()) {
    Serial.println("Erreur SigFox");
    while (true);
  }
  SigFox.debug();
  Serial.print("ID  : "); Serial.println(SigFox.ID());
  Serial.print("PAC : "); Serial.println(SigFox.PAC());
  SigFox.end();
  while (true);
}

void loop() {}

Apres le flash, ouvrez le moniteur serie (Tools > Serial Monitor, 9600 bauds). Vous verrez s’afficher l’ID (8 caracteres hex) et le PAC (16 caracteres hex). Notez-les soigneusement - vous en aurez besoin pour enregistrer le device sur le backend Sigfox.

Etape 2 - Enregistrer le device

Rendez-vous sur backend.sigfox.com et creez un compte si ce n’est pas deja fait. Ensuite :

  1. Allez dans Device > Register
  2. Entrez l’ID et le PAC recuperes a l’etape precedente
  3. Selectionnez votre pays et validez
  4. Le device sera actif apres le 4eme message envoye

Etape 3 - Configurer le decodage du payload

Dans Device Type > Edit > Payload display, configurez le decodage :

moisture::uint:8 temperature::uint:8

Vous verrez ainsi directement les valeurs d’humidite (0-100%) et de temperature (en degres Celsius) dans le backend.

Le code Arduino

Code de production - low power

Voici le code complet optimise pour l’autonomie. Le cycle est simple : reveil → mesure → envoi Sigfox → deep sleep → et on recommence. L’intervalle est regle a 10 minutes (SLEEP_MS) mais vous pouvez l’augmenter (ex: 21600000 pour 6 heures) pour maximiser l’autonomie :

#include <SigFox.h>
#include <ArduinoLowPower.h>

#define SENSOR_POWER_PIN  5
#define SENSOR_DATA_PIN   A1
#define SLEEP_MS          600000  // 10 minutes

void setup() {
  // Init une seule fois au demarrage
  if (!SigFox.begin()) {
    reboot();
  }
  SigFox.end(); // module en veille
}

void loop() {
  // Reveil -> envoie -> dort -> reveil -> envoie -> dort...
  if (!SigFox.begin()) {
    reboot();
  }

  sendMeasurement();
  SigFox.end();

  LowPower.deepSleep(SLEEP_MS); // reprend ICI apres le sleep
}

void sendMeasurement() {
  pinMode(SENSOR_POWER_PIN, OUTPUT);
  digitalWrite(SENSOR_POWER_PIN, HIGH);
  delay(200);

  int raw = 0;
  for (int i = 0; i < 5; i++) {
    raw += analogRead(SENSOR_DATA_PIN);
    delay(20);
  }
  raw /= 5;

  // Calibration : sec ~675, mouille ~320 (a ajuster)
  int moisture = map(raw, 675, 320, 0, 100);
  moisture = constrain(moisture, 0, 100);

  digitalWrite(SENSOR_POWER_PIN, LOW);
  pinMode(SENSOR_POWER_PIN, INPUT);

  uint8_t payload[2];
  payload[0] = (uint8_t)moisture;
  payload[1] = (uint8_t)SigFox.internalTemperature();

  SigFox.beginPacket();
  SigFox.write(payload, sizeof(payload));
  SigFox.endPacket();
}

void reboot() {
  NVIC_SystemReset();
  while (1);
}

Calibration du capteur

Les valeurs 675 (sol sec) et 320 (sol mouille) sont des valeurs de reference. Pour calibrer precisement :

  1. Flashez le code en mode debug avec Serial.println(raw)
  2. Notez la valeur raw avec le capteur dans l’air sec
  3. Plongez le capteur dans un verre d’eau et notez la valeur raw
  4. Remplacez 675 et 320 dans le map() par vos valeurs

Caracteristiques techniques

Consommation energetique

ModeConsommation
Deep sleep~430 uA
Capteur actif~5 mA pendant 300 ms
Transmission Sigfox~35 mA pendant 6 secondes
Consommation moyenne (6h)~435 uA

Autonomie estimee

AlimentationAutonomie
2x AA alcalines (2500 mAh)~240 jours (8 mois)
2x AA lithium (3000 mAh)~285 jours (9-10 mois)
LiPo 2500 mAh (direct)~230 jours (7-8 mois)

L’autonomie reelle depend de la temperature ambiante, de la qualite des piles et de la couverture reseau Sigfox. En dessous de 0 degres, les piles alcalines perdent jusqu’a 50% de leur capacite - preferez les piles lithium pour un usage hivernal.

Limites Sigfox

ParametreValeur
Messages uplink max/jour140 messages
Taille payload max12 bytes par message
Messages downlink max/jour4 messages
Frequence (Europe)868 MHz

Depannage

Le port COM n’apparait plus dans l’IDE Le board est en deep sleep et le port USB disparait. Solution : appuyez deux fois rapidement sur le bouton RST. La LED orange pulse lentement - vous avez 8 secondes pour lancer le flash.

SigFox.begin() plante ou bloque Ajoutez un delay(2000) en debut de setup() pour laisser le temps au module ATA8520 de demarrer. C’est particulierement important apres un reveil du deep sleep.

L’envoi reste bloque sur endPacket() C’est normal ! L’envoi Sigfox peut prendre jusqu’a 60 secondes car le board attend la confirmation ACK du reseau. Le message est bien parti si vous le voyez sur le backend.

Valeur d’humidite incorrecte Recalibrez le capteur avec vos valeurs reelles (air sec et eau). Les valeurs 675/320 sont des references qui varient selon chaque capteur et la tension d’alimentation.

Aucun message recu sur le backend Verifiez que le device est bien enregistre sur backend.sigfox.com avec le bon ID et PAC. Le premier message peut prendre quelques minutes a apparaitre.

Interieur du boitier : Arduino MKRFox 1200, piles AA, capteur et antenne Sigfox

Integration avec le homelab

Les donnees ne restent pas sur le backend Sigfox. Deux services du homelab completent la chaine :

  • smartag.sortium.fr : recoit les messages Sigfox via un callback backend configure sur backend.sigfox.com. Il ingere et stocke les donnees des capteurs.
  • garden.sortium.fr : dashboard de monitoring du potager qui affiche les donnees d’humidite et de temperature recuperees via Smartag.

Le flow complet : Capteur → Sigfox → backend.sigfox.com → callback webhook → Smartag → Garden dashboard.

Pour aller plus loin

  • Ajouter un boitier imprime en 3D etanche (IP67) pour un usage en plein air
  • Ajouter un module TP4056 pour recharger une LiPo via USB-C
  • Implanter plusieurs capteurs pour cartographier l’humidite d’un jardin entier
  • Combiner avec un systeme d’irrigation automatique