Mesure automatisée du niveau d'eau d'un puits avec transmission LORA, basée sur ESP32.

Un tube est fixé dans la fontaine avec son extrémité sous le niveau d'eau attendu le plus bas. Une pompe souffle de l'air dans le tube jusqu'à ce qu'elle bouillonne de l'extrémité inférieure. Ensuite, la pression d'air dans le tube sera proportionnelle à la hauteur de la colonne d'eau forcée. La pompe doit être suffisamment forte pour le niveau d'eau le plus attendu.
L'idée de ce principe est tirée de ce fil de discussion.
Une valve à sens unique peut être utilisée dans le tube pour éviter l'intrusion de la saleté et raccourcir la durée de pompage requise pour prolonger la durée de vie de la batterie. Ensuite, son placement doit garantir qu'il n'y a pas de pression permanente au niveau du capteur qui pourrait causer des dommages au fil du temps et empêche également la mesure de la pression zéro. La perte de pression causée par cette valve doit également être compensée dans la calcul.
La pompe, la vanne et le capteur de pression peuvent être prélevés sur un moniteur de pression artérielle bon marché. Un ADC à 16 bits ADS1115 est utilisé pour mesurer la petite tension du capteur de certains millibolts. Un ESP32 µC contrôle la procédure de mesure et transmet le résultat.
Module LORA: Hoperf RFM95W, SX1276 compatible et antenne Helix pour 868 MHz
Avant / arrière basculé horizontalement:


Bibliothèque: TTN-ESP32 est vraiment facile à utiliser et devrait avoir moins de problèmes de synchronisation sur ESP32 que Arduino LMIC, car il est basé sur les tâches ESP-IDF / Freertos. Bien qu'il ait besoin d'ESP-IDF, il peut toujours être utilisé avec les LIB Arduino car ceux-ci sont également basés sur ESP-IDF. Un lib_compat_mode = off dans platform.ini permet son utilisation avec le framework arduino .
La sauvegarde et la restauration de l'État de Lora sur un sommeil profond dans la mémoire RTC se font par TTNSession.
Les octets 0 et 1 contiennent le niveau d'eau en millimètre sous forme d'un entier 16 bits, haut d'octet en premier. Les octets 2 et 3 contiennent la tension de la batterie en millivolt comme un entier 16 bits, un octet élevé en premier. Ces entiers à 16 bits sont codés en complément de deux en cas de négatif, ce qui peut apparaître au niveau de l'eau.
Décodeur de format de charge utile TTN Voir ttn_decoder.js. Il décode 03 E0 0F 10 à
{
"batteryVolt": 3.856,
"levelMeter": 0.992
}

La consommation d'énergie est essentielle pour le fonctionnement de la batterie. L'objectif est de devoir accéder à la batterie qu'une fois par an tandis que le niveau du puits est mesuré toutes les 5 minutes.
Après beaucoup d'optimisation, la consommation d'énergie est finalement dominée par la pompe et la valve, bien qu'elles ne soient actives que pendant quelques secondes dans chaque cycle. Cette phase active a été réduite au minimum absolu qui peut toujours fournir des mesures fiables. Il pourrait en outre être amélioré avec une valve unidirectionnelle dans le tube qui maintient l'air, mais libère toujours la pression du capteur.
Pour optimiser le courant de sommeil profond, une carte EZSBC ESP32-01 a été utilisée, ce qui conduit à un très grand 12 µA. Cette planche s'est comportée de loin les plus testées, voir ESP32-Power-Consommage-Test. Pour atteindre ce courant faible, les circuits périphériques de mesure et LORA sont fournis par un régulateur de tension de 3,3 V distinct qui peut être activé et désactivé par le logiciel. L'utilisation d'épingles GPIO régulières pour SPI et les autres sorties ont échoué, car ils ne peuvent pas être isolés ou tirés bas pendant le sommeil profond. Cela a conduit à des courants de fuite considérables. Cependant, cela est possible pour les broches GPIO alimentées par RTC. Le logiciel les prépare au sommeil profond en isolant ou en tirant bas (maintien). Quelle broche se comporte dans quelle mesure n'est pas facilement évidente.
Il s'agit d'un cycle de mesure avec transmission LORA (sans jointure):


Estimation de la durée de vie de la batterie Voir batterie-consommation.ods.
Prototype optimisé:

Pour surveiller la tension de la batterie restante, il est introduit dans un autre canal libre de l'ADC à l'aide d'un diviseur de tension. Il est alimenté à partir de la tension des périphériques commutables avant le régulateur pour éviter la décharge de la batterie inutile. Le commutateur de transistor provoque une perte de tension de 30 à 40 mV, ce qui pourrait être (mais n'est pas) compensé dans le logiciel ainsi que les écarts de résistance.
Diagramme du circuit Kicad:
