Capteur optique sans fil pour compteur d’eau
Après avoir réalisé un capteur inductif pour compteur d’eau qui réagit bien avec les compteurs d’eau disposant d’une « cyble » métallique, je vais adapter le prototype afin de pouvoir faire un relevé sur un compteur d’eau qui dispose d’un disque effet miroir sur fond noir et qui n’interagit que très peu avec le capteur inductif. J’utiliserai cette fois-ci un capteur optique qui se reflétera bien sur le disque.
Comme pour le précédent, le capteur devra pouvoir survivre sur un accu pendant au moins un an ou deux et transmettre les relevés à une distance raisonnable, c’est à dire atteindre l’endroit des parties communes de mon immeuble là où se situe mon compteur d’eau… et accessoirement, ne pas être trop onéreux.
Choix du matériel
Microcontrôleur : Comme souvent et vu que j’en ai quelque uns en stock, ça sera un Atmega328p. Pour des applications très basse consommation, il a un mode veille profonde qui peut descendre dans les quelques µA. On le trouve sur les Arduino Nano ou Uno, donc il est très répandu. Pour simplifier, il n’y a pas de quartz, on utilise l’horloge interne à 8MHz.
Capteur optique : un CNY70 qui regroupe une LED infrarouge et un phototransistor dans le même boitier. Les dimensions permettent d’en mettre 3 sur la circonférence du disque, et la forme du boitier permet de le coller à la vitre du compteur.
Émetteur radio : un SX1278 (module RA02 avec le connecteur IPEX pour l’antenne externe), modulation LoRa, dans la bande des 433MHz. Il a un mode power saving qui permet de descendre vers le 3µA. Un autre est requis pour fabriquer un récepteur
Accu : Un LiFePO4 au format 14500 (même taille qu’une pile AA). Une tension assez stable, pas besoin de régulateur avec sa tension entre 3.2/3.3V
Principe de fonctionnement
Toutes les x millisecondes, on effectue une mesure sur chacun des capteurs (A, B et C) afin de déterminer dans quel état est le disque. On compare ensuite cet état à la mesure précédente pour détecter un éventuel changement et ainsi compter le nombre de tour. X est à déterminer en fonction de la vitesse maximale de rotation du disque, donc selon le compteur et son débit.
Entre chaque mesure, le microcontrôleur est mis en veille profonde pour économiser au maximum l’énergie. Évidemment, plus la mesure est rapide, plus on peut retourner en veille rapidement.
Le nombre de rotation, qui correspond au volume d’eau utilisé, est transmis soit régulièrement, soit uniquement quand de l’eau est tirée. Ou bien un mélange des deux, avec plus de transmissions quand le compteur tourne. C’est un équilibre à trouver entre les données souhaitées et la consommation d’énergie, mais il est intéressant d’avoir une transmission régulière pour voir que le capteur est toujours en ligne.
La tension de la batterie est mesurée avant une transmission pour ajouter cette information dans le datagramme.
Détail d’une mesure
Lors d’une phase de mesure, les 3 phototransistors sont activés (alimentation des collecteurs), puis un par un, leur led infrarouge est activée et le courant transmis par le phototransistor est mesuré.
En jaune l’alimentation des collecteurs, en cyan l’alimentation de la LED infrarouge A (il n’y a pas B et C, qui seraient à la suite sous le jaune), en magenta la mesure du courant du phototransistor A :
Vu le débit d’eau maximal dans mon logement, le capteur fera 2 mesures par seconde quand de l’eau est tirée, et passera à une seule mesure par seconde le reste du temps. Dès qu’un changement d’état [A,B,C] est détecté le nombre de mesures s’accélère puis quand il n’y a aucun changement pendant un certain nombre de mesures on repasse au ralentit.
Consommation électrique
En supposant qu’on tire de l’eau 2h chaque jour, ce qui est déjà pas mal (donc durant ces 2h le capteur effectue 2 mesures par seconde, une seule le reste du temps), que la consommation est transmise tous les quarts d’heure, on a une consommation moyenne de 22µAh, soit grosso modo 200mAh sur une année. On pourra aussi jouer sur la consommation en réglant au plus juste la puissance d’émission du module radio en fonction de la distance jusqu’au récepteur, j’ai mis le minimum possible sur la bibliothèque utilisée (2dBm).
L’auto-décharge de l’accu n’est pas pris en compte dans le calcul.
Tâche | % du temps | conso mAh |
Power down | 99,8322264 | 0,005 |
Mesures | 0,1622273679 | 9 |
TX | 0,0055462348 | 40 |
Réalisation
Le projet avec le schéma et le circuit imprimé sont partagés ici : https://oshwlab.com/sanglierlab/lora-cyble-water-meter-sensor.
Le circuit imprimé est adapté aux dimensions de mon compteur d’eau, le disque faut 18mm de diamètre avec un axe de 8mm ce qui laisse une bande de mesure de 5mm de largeur sur laquelle sont disposés les CNY70 en formant des angles de 120°.
Le programme arduino ici : FirmwareWaterCounterOptical, il est compilé avec https://github.com/MCUdude/MiniCore pour utiliser un atmega328p en mode standalone. La configuration à utiliser est l’horloge interne 8MHz (il n’y a pas de quartz sur le circuit). Un poussoir permet de lancer une partie du programme servant à calibrer les mesures sur chacun des photo-transistors. La calibration doit s’effectuer à la mis en service avec le disque du compteur qui tourne.
3 réflexions sur « Capteur optique sans fil pour compteur d’eau »
Hello Sanglier Lab,
It’s a pleasure to visit your projects, which look great. Will you have a new electronics project? We’re willing to sponsor your next project by offering our services, such as PCB prototyping.
Is this something you are interested in?
bonjour
merci pour cette étude tres intéressante. Une question sur la consommation du CNY70.
je vois qu il est alimenté par le GPIO mais sa consommation de 50mA ce n’est pas trop pour un GPIO? par exemple sur un ESP32 C’est 20mAh max pour un GPIO. Si il est alimenté en permanence la batterie ne vas pas durer. Pourriez vous clarifier? merci
Bonjour,
Les 50mA pour le CNY70 c’est le courant maximum avant d’endommager l’émetteur infrarouge, et également le courant maximum pouvant traversant le collecteur du photo transistor : Absolute maximum rating input forward current et collector current dans la datasheet.
Ici le courant passant dans chaque émetteur infrarouge est de 5 à 6mA avec la résistance de 390 Ohms, sous 3.3V. Le courant de collecteur est également limité par la résistance de 27k.
Les photo-transistors ne sont alimentés que pendant environ 1ms à chaque mesure.
Bonne soirée 🙂