Un capteur de niveau d'eau connecté
- Le Dim 12 juin 2016
- Dans Nouvelles technos à Amiens
Nous allons réaliser un prototype de capteur de niveau d'eau connecté à partir du module Sigfox TD1208 de chez Telecom Design. Cet objet est destiné à sécuriser des ouvrages ou des bâtiments lors d’inondations, à prévenir d'anomalies dans l'écoulement des fossés, à contrôler le niveau de remplissage de cuves ou d'abreuvoirs, à anticiper les crues de rivières ou débordements de réservoirs.
Il s'agit d'un capteur tout-ou-rien capable de déclencher deux événements, selon que le niveau d'eau passe au dessus ou en dessous d'un seuil matérialisé par la position de l'objet lui-même. Chaque dépassement de ce seuil déclenche l'émission d'un message vers une application web, qui devra se charger d'avertir l'utilisateur (mail, tweet, sms...)
Auto alimenté et opérant en bas débit sur le réseau Sigfox, le produit bénéficie d'une autonomie importante et d'une couverture réseau maximale. Ces caractéristiques en font un candidat idéal pour les applications déportées ou isolées, loin de toute source d'énergie et en l'absence de réseau câblé, GPRS ou WiFi.
Cas d'usage du capteur
Le capteur trouvera son utilité dans toutes les situations ou le niveau d'eau présente une menace ou un risque :
-
Anticiper le débordement d'un déversoir d'orage, d'une retenue d'eau.
-
Prévenir d'un bouchon entre deux sections de fossé, en comparant les niveaux en amont et en aval.
-
Alerter d'une inondation de fond de cale sur un bateau de plaisance
-
Protéger la cave d'une résidence secondaire ou d'un immeuble isolé
-
Monitorer le niveau d'un cours d'eau en amont d'une installation à protéger
-
Prévenir lorsqu'un abreuvoir pour bétail est presque vide
Le réseau Sigfox
La société toulousaine Sigfox propose l'exploitation de son propre réseau d'antennes (stations de base) réparties sur le territoire Français et Européen (le déploiement aux USA et en Australie est en cours). Opérant autour de 868MHz, les modules "certifiés Sigfox" peuvent émettre jusqu'à 144 messages de 12 octets par jour pour un coût minimal.
La solution de connectivité Sigfox est donc idéale pour les applications M2M (Machine To Machine), l'IoT (Internet Of Things), la télémétrie, la surveillance ou le monitoring. Dans une certaine mesure, l'établissement d'une connexion descendante (du réseau vers les objets) est également possible.
L'accès au réseau est conditionné par l'utilisation d'un module dit "certifié" et la souscription d'un abonnement annuel (aux alentours de 15€ par an et par device).
Le module Sigfox TD1208
Telecom Desing produit et commercialise une gamme complète de modules certifiés Sigfox, dont certains embarquent même un GPS ou un accéléromètre. Un des plus populaires, le TD1208, propose les caractéristiques suivantes dans un boîtier miniaturisé :
-
Tension nominale : 3V
-
Puissance de sortie : +14dBm
-
Basse consommation : 5µA en veille, 50mA en émission
-
interface série UART (RX,TX)
-
Interpréteur de commandes AT
-
ports GPIO, I2C, ADC, DAC
-
capteur de température intégré
Ce module peut être exploité de trois façons :
-
Par un microcontrôleur externe via un jeu de commandes AT sur le port série
-
En standalone via le développement d'un firmware grâce au SDK fourni
-
En standalone, en utilisant un jeu réduit d'événements pré-programmés
Le module TD1208 est disponible en version "nu" à installer soi-même. Des connaissances en radio sont toutefois nécessaires pour connecter l'antenne et la taille réduite du boîtier ne facilite pas son montage "à la main".
En phase de développement ou de prototypage, la solution clé en main idéale est peut-être celle proposée par Snootlab avec sa carte dédiée au TD1208. Le module est déjà monté, l'alimentation protégée par un condensateur, et une antenne est prête à être branchée.
Le capteur de niveau d'eau
Un flotteur équipé d'un aimant déclenche un contact physique en se déplaçant. Monté dans un boîtier étanche, le capteur est livré prêt à installer. Avec un tel capteur, judicieusement installé, il est facile de savoir :
-
quand le niveau d'eau atteint un certain seuil, indiquant un risque de trop-plein
-
quand le niveau d'eau passe sous un certain seuil, indiquant un risque de pénurie
Alimentation et autonomie
Le module TD1208 fonctionne sous 3V, nous l'alimentons grâce à deux piles bouton CR2032 de 3V en parallèle. Ce montage présente deux avantages :
-
Augmentation de l'autonomie en additionnant la capacité des deux piles
-
Possibilité de remplacer une pile à la fois, sans couper l'alimentation du module
Il est cependant recommandé d'installer deux piles neuves et identiques.
L'autonomie globale du système dépendra de deux facteurs :
-
La capacité des piles
-
La fréquence d'envoi des messages
Estimation de l'autonomie en veille
-
Capacité des piles : 2 X 210 mAh = 420 mAh
-
Consommation moyenne en veille: 5µA : 0,005mA
-
Autonomie en veille : 420 / 0,005 = 84000 heures = environ 9 ans
Émission d'un message
-
Durée d’envoi moyenne : 6s
-
Consommation pendant l'envoi : 50mA
-
Consommation pour l'envoi d'un message : (6 / 3600) X 50 = 0,083 mAh
Autonomie avec 1 message par heure
-
Consommation moyenne sur 1 heure : 0,083 + 0,005 X 1 = 0,088 mA
-
Autonomie : 420 / 0.088 = 4772 heures = environ 6 mois et demi
Autonomie avec 1 message par jour
-
Consommation moyenne sur 1 journée : 0,083 + 0,005 X 24 = 0,203 mAh
-
Autonomie : 420 / 0,203 = 2069 jours = environ 5 ans et demi
Le montage
Grâce au design de la carte Snootlab, le montage consiste simplement à implémenter l'alimentation. Deux supports de pile CR2032 soudés sur une carte de prototypage de 7x3cm laissent assez de place pour la connectique qui accueillera la carte.
On prendra soin de prévoir 3 câbles supplémentaires pour disposer des broches GND, RX et TX. Cette "sortie" permettra de faciliter la communication avec le TD1208 à partir d'un arduino ou d'un câble USB <> Serial.
Le connecteur d'antenne est fragile, il doit être manipulé avec précaution et vous devez en limiter l'utilisation.
Il est déconseillé d'alimenter le module sans avoir connecté son antenne. En cas de tentative d'émission, l'énergie émise par le module radio ne pourrait pas être dissipée, et devrait être absorbée d'une manière ou d'une autre par les composants internes.
Connexion série
Pour accéder aux commandes AT du TD1208, nous devons établir une connexion série entre un ordinateur et le module.
Le module TD1208 fonctionnant sous 3V, il convient d'adapter les tensions de communication. La plupart des cartes de type Arduino/Genuino fonctionnent sous 5V, vous devrez donc abaisser la tension en sortie de la sortie TX grâce à deux résistances montées en diviseur de tension. Dans la majorité des cas, vous n'aurez pas besoin de remonter à 5V le signal en entrée (RX). Sur Arduino, un potentiel de 3V est suffisant pour signifier un état haut.
L'autre solution est d'utiliser une carte fonctionnant sous 3,3V. Nous exploitons une carte de chez Olimex : l'Olimexino 32U4, capable de tourner sous 3,3 ou 5V.
Un programme simple permet de faire transiter les commandes de l'ordinateur à la carte Olimex, puis au module TD1208.
Une fois uploadé sur la carte, ouvrez un moniteur série à 9600bps, et choisissez CR/LF comme délimiteur de fin de ligne.
Code source arduino
#include// connexion série vers le modem TD1208 via les broches 8 et 9 SoftwareSerial td1208(8,9); void setup() { // établissement d'une connexion série avec le PC Serial.begin(9600); // on attend que la connexion série soit ouverte while (!Serial); // pendant que le modem démarre delay(3000); // Initialisation de la connexion vers le modem td1208.begin(9600); // termine les éventuelles commandes précédentes (thx snootlab.fr) td1208.write((uint8_t)'\0'); td1208.write((uint8_t)';'); // 3 octets doivent être reçus while(td1208.available() < 3); td1208.read(); //'K' td1208.read(); //'O' td1208.read(); //';' } void loop() { // on attend un message du port série if(Serial.available()) { // on le transmet au modem td1208.write(Serial.read()); } // on attend un message du modem if(td1208.available()) { // on le transmet au port série Serial.write(td1208.read()); } }
les commandes AT du module TD1208
Une fois le programme lancé, il est facile d'invoquer les commandes AT du module Sigfox à partir d'un ordinateur. Essayez quelques commandes de base :
- AT
Renvoie invariablement la chaîne "OK" - AT?
Renvoie la liste des commandes AT disponibles - AT&V
Renvoie les informations à propos du module (fabricant, modèle, version, configuration) - ATI[v]
Renvoie une information propre au module. [n] doit être remplacé par un entier équivalent à une variable; par exemple : - ATI26
Retourne la température en °C du module - ATI28
Retourne la tension en V de l'alimentation - ATI5
Retourne la date de publication du firmware - AT$SS=00 11 FF
Envoie sur le réseau les octets "00", "11" et "FF"
Switch monitoring via les commandes AT
Quelques commandes permettent de programmer le comportement du module. Certains événements détectables par le TD1208 peuvent déclencher l'envoi d'un message sans devoir recourir à un microcontrôleur. Les événements pris en charge sont :
-
dépassement d'un seuil de température (un seuil min et un max)
-
dépassement d'un seuil de tension (min et max)
-
front montant ou descendant sur une entrée GPIO
Nous allons exploiter le monitoring de switchs sur un des ports GPIO grâce à la commande ATS506. Elle accepte 7 paramètres :
-
enable : Activer ou désactiver le monitoring sur un port (0|1)
-
port : le port à observer (0..5)
-
bit : le bit à observer (0..15)
-
falling : observer les front descendants (0|1)
-
rising observer les fronts montants (0|1)
-
pull : activer ou désactiver une résistance de rappel (0|1)
-
state : séléction d'une résistance de rappel pullup ou pulldown (0|1)
Nous souhaitons déclencher l'envoi d'un message lorsque l'entrée USR0 est connectée et/ou déconnectée du VCC. La séquence AT correspondante est donc la suivante :
ATS506=1,1,13,1,1,1,0
Description des valeurs
-
enable : 1 : On souhaite activer le monitoring sur ce port
-
port : 1 : l'entrée USR0 est localisée sur le port 1
-
bit : 13 : l'entrée USR0 correspond au bit 13 du port 1
-
falling : 1 : On souhaite repérer les front descendants
-
rising : 1 : On souhaite repérer les fronts montants
-
pull : On souhaite utiliser la résistance de rappel interne
-
state : 0 : On connecte l'entrée USR0 sur GND via la résistance de rappel (on détectera donc les contacts entre USR0 et VCC)
Une fois cette commande exécutée, chaque ouverture ou fermeture du contact entre la broche USR0 et VCC déclenchera l'émission d'un message par le module.
Ce comportement est persistant tant que le module est alimenté. C'est pourquoi vous devez programmer le module déjà monté avec son alimentation définitive.
Une commande AT (AT&W) est destinée à "sauvegarder" la configuration dans la mémoire du module, mais cette configuration ne semble pas être rechargée automatiquement après un redémarrage physique.
Consulter des messages Sigfox
Le backend Sigfox permet de consulter l'ensemble des messages envoyés par un device et reçus par une ou des stations de base. En plus du contenu du message, il fournit de précieuses informations sur l'état de la connexion, et une idée la position géographique du device.
Les messages envoyés automatiquement par le module lors de l'activation du capteur ne sont pas paramétrables. 4 octets sont envoyés à chaque fois.
Après plusieurs essais, on déduit facilement que la valeur qui nous interesse est disponible dans le 3e octet, qui vaut toujours 0A (10) lors d'un front montant, et 0B (11) lors d'un front descendant .
Les autres données semblent correspondre auu numéro de port à l'origine du message, et à un compteur dont je n'ai pas compris le fonctionnement.
Exploiter les messages Sigfox
Sigfox propose via son backend de déclencher des callbacks (ou webhooks) à l'arrivée de chaque message. Ils permettent de transférer les messages reçus par sigfox sur votre propre serveur. Pour créer un callback, vous devez de préférence connaître le format des données contenues dans les messages.
Dans notre cas, on indiquera que 4 octets (a,b,c et d) sont disponibles sous la forme suivante :
a::int:8:little-endian b::int:8:little-endian c::int:8:little-endian d::int:8:little-endian
On demande ensuite à sigfox d'invoquer notre URL en POST en ajoutant le contenu suivant :
{ "data" : { "level" : {customData#c} } }
On ne demande que le 3ème octet, qui contient la valeur qui nous interesse.
Un boitier en PVC
Pour fabriquer le boîtier du prototype, nous avons pris le parti de nous fournir uniquement chez Leroy Merlin. Pas d'impression 3D ou de fraisage numérique, juste des pièces en PVC destinées à l'évacuation d'eau, et un tube de colle.
La liste des pièces est la suivante :
-
un bouchon Ø50
-
un manchon Ø50/Ø50
-
un réducteur Ø50/Ø40
-
un morceau de 50mm de tube Ø40
-
un manchon Ø40/Ø40
-
un bouchon Ø40
-
un tube de colle PVC
Le montage est simple, on emboîte tout et on colle. On fixe le flotteur sur la partie basse, tandis que le montage électronique vient se loger dans la partie supérieure, le tout hermétiquement fermé avec le bouchons.
Ressources et liens
- Sigfox : un réseau global pour l'internet des objets
- Telecom design : Solutions techniques pouur l'internet des objets
- TD Next : Modules Sigfox pour les applications embarquées
- TD1208 : Module Sigfox Ready
- Snootlab : Matériel électronique, cartes et shields pour Arduino
- Olimex : Cartes Open Source Hardware
- Olmiexino 32U4 : Arduino Leonardo by Olimex
- Arduino : carte de prototypage open source
- Leroy Merlin : Outillage, quincaillerie et matériaux
Aller plus loin avec l'IoT
Awelty teste et expérimente plusieurs solutions techniques dans le cadre du développement de son offre autour des objets connectés et de l'internet des objets. En connectant du matériel et des capteurs au réseau Internet et à des applications web sur mesure, les possibilités d'exploitation sont infinies : Surveillance, monitoring, gestion de flotte, optimisation de process. Contactez-nous.