Mesurer un niveau de fioul dans une cuve

Tout a fait j’ai percé au diamètre de la sonde. J’ai rajouté un peu de silicone.
En effet, j’ai oublié, j’ai effectivement mis un vernis.

Je mets ce vernis sur toutes mes plaques électroniques qui sont installées a l’extérieur.
(Portail, spot led…)

En cherchant, tu trouveras moins cher.

ATTENTION, NE PAS METTRE SUR LES PETITS INTERRUPTEURS CAR ILS VONT COLLER.

J’ai soudé les fils avant de mettre le vernis.

Ensuite dans la boîte de dérivation, j’ai aussi mis un petit sachet de dessicant . On le trouve dans les boîtes a chaussures neuves.
Essai de trouver un sachet avec un papier alu et pas en papier.
Attention, il faut le changer de temps en temps.
Je le mets au four pendant 15 secondes.

Le sachet n’est pas obligatoire.
Je nettoie ma cuve tous les ans et j’en profite pour le changer ou le faire sécher.

Salut @Taz merci à toi pour les précisions apportées . J’vais aller fouiller les boites à chaussure de madame :rofl:

@fgtoul MERCI pour le partage

Bonjour
On en trouve dans le commerce :slight_smile: sous la dénomination « gel de silice », plusieurs conditionnements disponibles.
Cdt

Bonsoir,

J’ai complété le wiki cité plus haut .
Vous y trouverez des modèles de Widgets pour IPX800 V4, permettant de calculer le volume de liquide dans des citernes de différentes formes :

  • cuve cylindrique verticale
  • cuve cylindrique horizontale
  • cuve parallélépipédique
  • cuve ellipsoïde ou cuve à bouts sphériques

cdt

Ce capteur https://www.gotronic.fr/art-module-de-detection-us-hc-sr04-20912.htm Fonctionne de la même manière avec l’ipx ?

vu la différence de prix j’ai un doute.

Bonjour Lapier12,

la sonde utilisée par @Taz a une sortie analogique, ce qui n’est pas le cas de celle que vous proposez.

Chez le même fournisseur il y a les sondes Maxbotix avec sortie analogique.

Bonne journée

Oui exact je l’avais vu LV-MaxSonar EZ1 Maxbotix - Capteurs à ultrasons Maxbotix | GO TRONIC mais j’ai eu un doute quand ils disent pour la mesure d’un objet mobile à un obstacle.

C’est la précision qui m’a fait continuer à chercher.

Merci à toi

Slt

Je pensais que ça fonctionné mais ce n’est pas le cas.
Quand j’ai renseigné toutes les informations Ma citerne était pleine
Hier, ma cuve était pleine à 30% et le programme me donnait une hauteur de 164cm
Je pensais qu’elle mesurait la distance entre l’eau et la hauteur restante
C’est a dire: il me reste 30cm d’eau, la hauteur de ma cuve fait 190cm donc je pensais que l’information que ma sonde me renvoyé était: 190-36 = 164 cm
J’ai modifié la formule en fonction de cette valeur.

Aujourd’hui ma cuve est pleine a 60% malheureusement le programme me dit que j’ai toujours 30 % d’eau

function bruteToDistance(brute) {
  d = Math.floor(60.38 * Math.pow(brute * 0.5,-0.300));
    if (d < 10 || d > 175) {
        return "";
    }else{
        return 175 - d 
    }
}

var hauteurEau= bruteToDistance(datasources["STATUS"]["response"]["analog0"]); //var hauteurEau = bruteToDistance(datasources["STATUS"]["response"]["analog0"])


var hauteurCuve=190; //hauteur cuve en cm
var largeurCuve=110; //largeur cuve en cm
var longueurCuve=240; //longueur cuve en cm
var volumeCuve=5000; //volume cuve pleine en litres

var pourcentage = 100 - (100*hauteurEau/190); //var pourcentage = 100 - (100*hauteurEau/hauteurCuve)

//calcul de la consommation à partir de la baisse du niveau
var consommation = ((190-(190-hauteurEau))*110*240)/1000; //consommation en litres var consommation = ((hauteurCuve-hauteurEau)*largeurCuve*longueurCuve)/1000

//calcul volume Eau
var vf=0;
vf=(190-hauteurEau)*110*240; //vf=hauteurEau*largeurCuve*longueurCuve;
vf=(vf/1000).toFixed(0);
return `
<style>

body { 
  background:$bgColor; 
  font: 14px/1 'Open Sans', helvetica, sans-serif; 
  -webkit-font-smoothing: antialiased; 
  color:#fff; 
} 
.box{ 
  height: 80px;
  width: 80px;
  position: absolute;
  top: 50%;
  left: 10px;
  transform: translate(0, -50%);
  background: #666666;
  border-radius:15%;
  overflow: hidden; 
}
   
 .eau{ 
    position: absolute;
    left: 0;
    top: 0;
    width: 80px;
    height: 80px;
transform:translate(0,${100-pourcentage}%);
    background:#76B558;
  } 
</style>
<div class="box"> 
  <div id="eau" class="eau"></div> 
</div> 
<div style="float:left;margin-left:100px;margin-top:15px;font-size:12px;"> 
	<span >Contenance cuve: ${volumeCuve}</span> litres<br>
	<span >consommation : ${consommation} </span> litres<br>
	<span >Hauteur Eau : ${190-hauteurEau}</span> cm<br>
	<span style="font-weight:bold;">Volume Restant : ${vf}  litres</span><br>
    <span >Ratio volume : ${(vf/volumeCuve*100).toFixed(2)}</span> %<br> 
</div> 

`;

Bonjour Taz
Comment avez-vous déterminé la formule de conversion de la sonde ?
sauf erreur, à 3.3V, c’est à dire la valeur 65535, votre formule donne 0.04 soit 4 cm
Pour une valeur 1, votre formule donne 1.23 mètre max alors que le MB1200 est fait pour une distance max 7.65 m (limité à 6 m pour une alim en 3.3V)

Celle ci

oui, entre temps j’avais vu votre message précédent, et j’avais édité le mien .

avez vous un schéma et une réponse pour la détermination de la formule ?

autre point :
dans votre code, vous déterminez la distance comme ceci
image
donc, vous tenez bien compte du type de capteur ToF en renversant la mesure pour obtenir une hauteur de liquide.
Dans ce cas, vous ne devez pas renverser à nouveau la mesure dans le code en dessous :
image

mon avis : repartez du code original, renseignez les dimensions de la cuve, mettez la variable mesureToF=1;
et renseignez la formule de conversion sans passer par votre fonction qui induit une erreur

var hauteurEau=Math.floor(60.38 * Math.pow(datasources["STATUS"]["response"]["analog0"] * 0.5,-0.300));

Autre point, vous utilisez parfois 175, parfois 190 dans votre code. cela crée des erreurs, les proportionnalités ne sont pas conservées.
Si votre capteur est à 175cm du fond de la cuve ou si vous avez un trop plein à cette hauteur, c’est 175 qu’il faut prendre. Si la sonde est au dessus du niveau max de 190, alors prendre 190.

Voici un code avec une hauteur max à 175 :

function bruteToDistance(brute) {
  d = Math.floor(60.38 * Math.pow(brute * 0.5,-0.300));
    if (d < 10 || d > 175) {
        return "";
    }else{
        return d 
    }
}

var hauteurEau= bruteToDistance(datasources["STATUS"]["response"]["analog0"]); 

var hauteurCuve=175; //hauteur cuve en cm
var largeurCuve=110; //largeur cuve en cm
var longueurCuve=240; //longueur cuve en cm
var volumeCuve=4620; //volume cuve pleine en litres
var mesureToF=1;//renseignez 1 si vous utilisez un capteur ultrasons/infrarouges ou laser

//ne pas modifier le code ci-dessous
if (mesureToF==1){hauteurEau=hauteurCuve-hauteurEau;} // si mesure ToF
var pourcentage=100 - (100*hauteurEau/hauteurCuve);

//calcul de la consommation à partir de la baisse du niveau
var consommation=((hauteurCuve-hauteurEau)*largeurCuve*longueurCuve)/1000 //consommation en litres

//calcul volume Fuel
var vf=0;
vf=hauteurEau*largeurCuve*longueurCuve;
vf=(vf/1000).toFixed(0);
return `
<style>
 
.box{ 
  height: 80px;
  width: 80px;
  position: absolute;
  top: 50%;
  left: 10px;
  transform: translate(0, -50%);
  background: #666666;
  border-radius:15%;
  overflow: hidden; 
}
   
 .fuel{ 
    position: absolute;
    left: 0;
    top: 0;
    width: 80px;
    height: 80px;
    transform:translate(0,${pourcentage}%);
    background:#76B558;
  } 
</style>
<div class="box"> 
  <div id="fuel" class="fuel"></div> 
</div> 
<div style="float:left;margin-left:100px;margin-top:15px;font-size:12px;"> 
	<span >Contenance cuve: ${volumeCuve}</span> litres<br>
	<span >consommation : ${consommation} </span> litres<br>
	<span >Hauteur Eau : ${hauteurEau}</span> cm<br>
	<span style="font-weight:bold;">Volume Eau : ${vf}  litres</span><br>
    <span >Ratio volume : ${(vf/volumeCuve*100).toFixed(2)}</span> %<br> 
</div> 

`;

merci pour ta réponse

je ne comprends pas ta demande
« avez vous un schéma et une réponse pour la détermination de la formule ? »

J’ai installé ma sonde à 2 mètres par rapport au fond de ma citerne
Ma citerne fait 190 cm de haut. J’ai installé la sonde dans la « trou » qui permet de passer pour nettoyer la citerne. Elle est doit à 2 m.

En copiant ton programme j’obtiens cela
image

Je viens d’aller mesurer la hauteur d’eau (j’ai du attendre car il pleuvait comme « vache qui pisse »
J’ai environ 1,20 m d’eau (du font de la citerne jusqu’à la surface de l’eau).
Ma jauge manuelle me donne entre 50 et 60% pour le niveau. Ce qui correspond a peu près à ma mesure manuelle

alors la formule de conversion est fausse

d = Math.floor(60.38 * Math.pow(brute * 0.5,-0.300));

pour ma demande, la sortie du capteur étant analogique, comment le capteur est-il alimenté 3.3V ? 5V ?
si 5V, quelle résistance pour le pont diviseur ?
et autre question : d’où vient la formule ?

c’est donc cette formule que je dois modifier…

avec mon code, en mettant hauteurEau=70 à la place de ta formule (70 à ce niveau du code représente la mesure brute ToF)
image

extrait du code :

function bruteToDistance(brute) {
  d = Math.floor(60.38 * Math.pow(brute * 0.5,-0.300));
    if (d < 10 || d > 190) {
        return "";
    }else{
        return d 
    }
}

var hauteurEau= 70;//datasources["STATUS"]["response"]["analog0"]); 
var hauteurCuve=190; //hauteur cuve en cm
var largeurCuve=110; //largeur cuve en cm
var longueurCuve=240; //longueur cuve en cm
var volumeCuve=4620; //volume cuve pleine en litres
var mesureToF=1;//renseignez 1 si vous utilisez un capteur ultrasons/infrarouges ou laser

//ne pas modifier le code ci-dessous
if (mesureToF==1){hauteurEau=hauteurCuve-hauteurEau;} // si mesure ToF

petite question : ta sonde est bien connectée à l’entrée analogique n° 1 ?

merci je vais essayer ce code.
Avec la pluie qui tombe je pense que je serai a 100% pour ce soir :slight_smile:

image

Pour l’instant le graphique correspond a ce que j’ai dans la citerne

Tu bosses pour GCE ?

non, comme toi je suis un utilisateur.
Attention, ta formule nécessite une révision.

Je pensais que tu bossais pour eux car vue toutes tes connaissances sur leurs produits, je pensais que tu faisais parti de leur equipe

quelle révision ?

ta formule est fausse. Pour preuve, dans le code que tu reprends, sans utiliser ta formule et en mettant une mesure en dur à 70, le widget est ok.

donc du dois modifier ta formule d = Math.floor(60.38 * Math.pow(brute * 0.5,-0.300));

et rétablir la valeur analogique dans le widget.
Le code que tu viens de présenter donnera toujours le meme résultat puisque j’ai éliminé les appels à la formule et à l’analogique. C’est pour ça que ça donne ce que tu attends.

tu n’as pas répondu à mes dernières questions :