Capteur d'humidite du sol connecte avec Sigfox
Un capteur IoT low-power autonome pour votre jardin : Arduino MKRFox 1200 + SEN0193 + Sigfox.
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
| Composant | Description |
|---|---|
| Arduino MKRFox 1200 | Microcontroleur SAMD21 + module Sigfox ATA8520 integre |
| Capteur SEN0193 | Capteur capacitif d’humidite du sol (3.3V - 5V) |
| 2x piles AA | Alcalines ou lithium - branchement direct sur le board |
| Porte-piles 2x AA | A imprimer en 3D ou acheter - avec fils soudes |
| Antenne Sigfox | Antenne 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 :
- Allez dans Tools > Board > Boards Manager
- Cherchez “Arduino SAMD Boards”
- Installez le package (ca prend quelques minutes)
Installer les librairies
Deux librairies sont necessaires. Dans Tools > Manage Libraries (ou Sketch > Include Library > Manage Libraries) :
- Cherchez et installez “Arduino SigFox for MKRFox1200”
- Cherchez et installez “ArduinoLowPower”
Configurer la board
- Branchez le MKRFox 1200 en USB (cable Micro-B)
- Allez dans Tools > Board > Arduino SAMD > Arduino MKR FOX 1200
- 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 :
- Double-cliquez rapidement sur le bouton RST du board
- La LED orange se met a pulser lentement — le board est en mode bootloader
- Un nouveau port COM apparait dans l’IDE
- 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
| Connexion | Branchement |
|---|---|
| SEN0193 VCC | Pin D5 du MKRFox (alimentation pilotee par le code) |
| SEN0193 GND | Pin GND du MKRFox |
| SEN0193 AOUT | Pin A1 du MKRFox (lecture analogique) |
| Piles AA + | Borne + du connecteur a vis vertes |
| Piles AA - | Borne - du connecteur a vis vertes |
| Antenne | Connecteur ANT du MKRFox |
Attention : D6 est la
LED_BUILTINsur 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 :
- Allez dans Device > Register
- Entrez l’ID et le PAC recuperes a l’etape precedente
- Selectionnez votre pays et validez
- 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 :
- Flashez le code en mode debug avec
Serial.println(raw) - Notez la valeur raw avec le capteur dans l’air sec
- Plongez le capteur dans un verre d’eau et notez la valeur raw
- Remplacez 675 et 320 dans le
map()par vos valeurs
Caracteristiques techniques
Consommation energetique
| Mode | Consommation |
|---|---|
| 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
| Alimentation | Autonomie |
|---|---|
| 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
| Parametre | Valeur |
|---|---|
| Messages uplink max/jour | 140 messages |
| Taille payload max | 12 bytes par message |
| Messages downlink max/jour | 4 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.
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