Détecteur de niveau avec transmission d’alertes par réseau SigFox

Carte Arduino MKR FOX 1200

Pour répondre à un concours lancé par le site arduino.cc, j’ai réalisé un prototype basé sur la carte MKR FOX 1200. Vous pouvez retrouver le projet original sur https://create.arduino.cc/projecthub/marcussacapuces91/water-level-telemeter-91ff4c.

La réalisation a été classée dans les 10 premiers projet et a donc été primée.

Objectif

L’idée générale de ce projet et d’assurer une information directe des populations au travers d’un réseau de collecte de données hydrologiques des réseaux hydrologiques et de présenter les évolutions, par exemple sur une cartographie en temps réel.

Matériel

Technologiquement la réalisation du capteur est simple et peu coûteuse pour être facilement déployable à grande échelle.

Pour répondre au thème du concours, l’UC est basée sur la carte MKR FOX 1200 qui embarque :

  • une alimentation multi-sources (piles 3v, panneau solaire ou port USB 5v),
  • un microcontrôleur Atmel SAM D21 exploitant un processeur 32-bit ARM® Cortex®-M0+,
  • une module SigFox  ATA8520.

A cela, j’ai ajouté quelques composants “glue” ainsi qu’un capteur télémétrique à ultra-sons, le très commun HC-SR04 qui est capable de mesurer une distance entre 40cm et 4m.

Voici le plan de la réalisation :

Attention la transparence de la carte MKR FOX 1200 correspond à des éléments placés de dessous d’elle.

Pour rappel, la carte fonctionne en 3v et le capteur en 5v. Il a donc fallu ajouter quelques composants de conversion, à la fois pour l’alimentation, mais aussi pour les signaux. De plus un transistor permet de contrôler l’alimentation(ou pas) du capteur, cale permet une importante économie d’énergie entre deux mesures.

Code embarqué (firmware)

Le code est développé avec l’IDE Arduino qui correctement configuré le permet facilement.

Les principales problématiques à résoudre sont :

  • une répétition à intervalle fixe d’une boucle de mesure et de calcul (de 1 à 15 min) ;
  • un filtrage des mesures (très bruitées) réalisées par le capteur ;
  • la transmission de ces mesures via le flux SigFox et la récupération d’éléments de configuration ;
  • un passage en mode sommeil de l’ensemble afin de réduire sa consommation électrique et donc d’augmenter son autonomie.

Le code est disponible sur mon GitHub :

https://github.com/Marcussacapuces91/Water-Level-Telemeter

Backend SigFox

Une fois démarrée, chaque carte SigFox doit être configurée dans le “backend” de l’exploitant du réseau. Cela fait une foix, on doit configurer un callback qui produit un appel en cascade vers le site de son choix pour collecter les mesures de chaque capteur.

Voici ma configuration :

qui donc propage tous les messages émis par le capteur vers mon API Web qui en assure la collecte dans une base locale (sqlite) pour traitement et affichage ultérieurs.

La configuration permet de propager en retour les réponses de mon API vers le capteur quand cela est nécessaire.