đŸŠđŸ»â€â™€ïž Piscine, X-Pool et IPX800 V5

Bonjour,
voici un widget HTML développé pour mon futur capteur de niveau VL6180X.
vl6180x

<style>
.box2{
    position:absolute;
    padding:5px;
    height: 110px;
    width: 40px;
     top: 5px;
    left: 15px;
    background: #E0E9ED;
    border-radius:2%;
    overflow: hidden;
}

.led{
    width: 40px;
    height: 9px;
    margin-top:2px;

}
</style>

<script>
//définition bargraph
var couleursOFF=['85C1E9','85C1E9','85C1E9','5DADE2','5DADE2','3498DB','3498DB','3498DB','2E86C1','2874A6'];
var couleursON=['f00','AFC0C7','AFC0C7','AFC0C7','AFC0C7','AFC0C7','AFC0C7','AFC0C7','AFC0C7','AFC0C7'];
//Positionnement capteur VL6180X
var Delta=40; //distance en mm entre niveau mini et niveau maxi
var offset=30; //hauteur du capteur en mm au dessus du niveau maxi
//autres variables publiques
var Superficie=26; //superficie du bassin en mÂČ
var Hauteur; //distance lue entre le capteur et le niveau d'eau
var idAna=262334; // id de l'entrée analogique (ou variable) liée au capteur

window.GCE_Refresh.push(function(data) {
switch (data['_id'])
{
case idAna: // analogique 1 =) 262144. 327691=débitmÚtre
    Hauteur=data.value;
    drawBargraph(Hauteur);
    break;
}
})


function init() {
GCE_API.getANA(idAna)
.then((ret) => {
console.log("OK ", ret)
Hauteur=ret.value;
drawBargraph(Hauteur);
}).catch((err) => {
console.error("KO ", err)
});
}

function drawBargraph(value) {
//Hauteur=34; //pour test seulement
let rang=((Hauteur-offset)/(Delta/10)).toFixed(2);
console.log("rang:",rang);
console.log("hauteur:",Hauteur);

//rang=3;
document.getElementById("l1").style.backgroundColor = "#" + ( rang >= 10 ? couleursON[0] : couleursOFF[0]);
document.getElementById("l2").style.backgroundColor = "#" + ( rang >= 9 ? couleursON[1] : couleursOFF[1]);
document.getElementById("l3").style.backgroundColor = "#" + ( rang >= 8 ? couleursON[2] : couleursOFF[2]);
document.getElementById("l4").style.backgroundColor = "#" + ( rang >= 7 ? couleursON[3] : couleursOFF[3]);
document.getElementById("l5").style.backgroundColor = "#" + ( rang >= 6 ? couleursON[4] : couleursOFF[4]);
document.getElementById("l6").style.backgroundColor = "#" + ( rang >= 5 ? couleursON[5] : couleursOFF[5]);
document.getElementById("l7").style.backgroundColor = "#" + ( rang >= 4 ? couleursON[6] : couleursOFF[6]);
document.getElementById("l8").style.backgroundColor = "#" + ( rang >= 3 ? couleursON[7] : couleursOFF[7]);
document.getElementById("l9").style.backgroundColor = "#" + ( rang >= 2 ? couleursON[8] : couleursOFF[8]);
document.getElementById("l10").style.backgroundColor = "#" + ( rang >=1 ? couleursON[9] : couleursOFF[9]);
document.getElementById("manque1").innerHTML=Hauteur-offset;
document.getElementById("manque2").innerHTML=(Hauteur-offset)*Superficie;
document.getElementById("sensor").innerHTML = ( Hauteur >= offset  ? 'OK' : 'KO');
document.getElementById("sensor").style.color = ( Hauteur >= offset  ? '#117A65' : '#f00');
}
init()
</script>

<div class="box2">
<div id="l10" class="led" style="top:205px;"></div>
<div id="l9" class="led" style="top:167px;"></div>
<div id="l8" class="led" style="top:149px;"></div>
<div id="l7" class="led" style="top:131px;"></div>
<div id="l6" class="led" style="top:95px;"></div>
<div id="l5" class="led" style="top:77px;"></div>
<div id="l4" class="led" style="top:59px;"></div>
<div id="l3" class="led" style="top:41px;"></div>
<div id="l2" class="led" style="top:23px;"></div>
<div id="l1" class="led" style="top:0px;"></div>
</div>

<div style="position:absolute;top:20px;margin-left:20px;font-size:12px;">
	<u><p style="font-size:14px;font-weight:bold;">NIVEAU D'EAU SKIMMER</p></u>
	<br>
<!--	<span >Level : </span><span id="manque0"></span>&nbsp;<br> -->
<span >Manque mm: </span><span id="manque1"></span><br>
<span >Manque litres : </span><span id="manque2"></span><br>
<span >capteur : </span><span id="sensor">...</span><br>
</div>

Le capteur de télémétrie à laser (Time Of Flight) choisi est un modÚle VL6180x TOF050C avec une zone aveugle (blind zone) de 30 mm pour une plage de mesure 30mm à 500 mm qui communique sur le bus I2C.
La longueur d’onde du laser est de 850 nm (infrarouge). Il est de classe 1, donc sans danger si les conditions de mise en Ɠuvre sont respectĂ©es.
image

J’ai prĂ©vu de l’installer dans le skimmer (avec boitier Ă©tanche), 30 mm au dessus du trop-plein du bassin. L’utilisation du bus I2C sur une dizaine de mĂštres demande des prĂ©cautions.
Pour le moment il n’est pas installĂ© et je ne peux pas encore faire de retour d’expĂ©rience, je vous tiendrai au courant au printemps et vous ferai part du montage adoptĂ© (esp32, DAC, 
)

Fonctionnement prévu:
Une baisse de niveau supérieure à 40 mm démarrera le remplissage automatique.
Une lecture inférieure à 30 mm (et donc un niveau qui serait au dessus du trop-plein) notifiera une anomalie.
Pour le moment l’animation du widget est obtenue grĂące Ă  un objet Fader liĂ© Ă  la variable analogique. Plus tard, l’entrĂ©e analogique 1 (id 262144) liĂ©e au capteur sera mise en place dans le code.

2 « J'aime »

Bonjour fgtoul,

effectivement Ă  l’origine I2C Ă©tait prĂ©vu pour des bus courts (en gĂ©nĂ©ral Ă  l’intĂ©rieur d’une mĂȘme carte).

4 solutions :

  • rapprocher le ”C du capteur :wink:
  • utiliser du cĂąble faible capacitance
  • utiliser des buffers de bus type PCA 9515A
  • baisser la frĂ©quence d’horloge

Une fois de plus j’attends la suite de ce dĂ©veloppement avec gourmandise :drooling_face:

Bonne journée

cela limiterait l’usage de l’esp32 au seul capteur VL6180 et vu que je ne veux pas de liaison wifi entre esp32 et ipx800, ça obligerait une liaison analogique d’une dizaine de mùtres avec les problùmes que l’on connait.

jusqu’à 1m je veux bien, mais pas au-delà.

effectivement, ils existent sous forme de shield prĂȘt Ă  l’emploi sous la dĂ©nomination « rĂ©pĂ©teur I2C Â», mais il en faudrait 1 tous les 2 mĂštres.
perso j’ai optĂ© pour un terminateur actif : LTC4311
Il stabilise le bus sur une trentaine de mĂštres avec des rĂ©sistances Pull-UP, sans baisser la frĂ©quence d’horloge et sur des cĂąbles jusqu’à 4000pF.

La transcription de la valeur numĂ©rique (I2C) en analogique par le DAC permet une liaison filaire avec l’IPX800 (tension lue sur entrĂ©e analogique).
Je ne sais pas si j’ajouterai le DAC 16 bits (AD5693) pour une prĂ©cision plus grande ou si j’utiliserai un DAC 12 bits (MCP4725) ou encore le DAC 8 bits de l’ESP32.

Je verrai au moment de l’installation,

2 « J'aime »

tu peux aussi directement entrer en I2C dans l’ESP

Bonne journée

oui, c’est bien ça. mais c’est un 8 bits je crois, pas un 10 bits comme je l’ai Ă©crit (puis corrigĂ©), j’ai donc peur de perdre en prĂ©cision. J’ai Ă©ditĂ© le post prĂ©cĂ©dent et ajoutĂ© le schĂ©ma alternatif.

EDIT : il est vrai que les distances à mesurer sont trùs courtes et 8 bits devraient suffire car ça nous fait un step de 0.825 V par mm lu ( hauteur[0, 40] → DAC [0, 3.3] )

Montage prévu :

offset, Delta et Hauteur sont les 3 variables utilisées dans le widget HTML.

1 « J'aime »

Bonjour,
aujourd’hui un petit ajout simple : tempĂ©ratures MINI et MAXI du jour sur le Liveview.
Pour les dĂ©butants, voici le diagramme qui permet de dĂ©terminer le mini et le maxi concernant la tempĂ©rature de l’eau.

En traits pleins, les liens sont Ă  crĂ©er sur l’IPX800 V5.
En pointillés, les flÚches symbolisent les relations entre les tuiles du moteur de scénario et les variables correspondantes.

Fonctionnement : tous les jours Ă  00:00, la mesure de tempĂ©rature de l’eau est injectĂ©e dans les variables MINI et MAXI.
Tout au long de la journée ces 2 variables sont comparées à la température mesurée.
Si la tempĂ©rature de l’eau est infĂ©rieure Ă  MINI, le comparateur correspondant passe Ă  ON, la rĂšgle applique la tempĂ©rature mesurĂ©e Ă  la variable MINI.
Inversement, si la tempĂ©rature de l’eau est supĂ©rieure Ă  MAXI, le comparateur correspondant passe Ă  ON, la rĂšgle applique la tempĂ©rature mesurĂ©e Ă  la variable MAXI.

Pour la tempĂ©rature de l’air, le fonctionnement est identique.
Affichage sur liveboard :
image

4 « J'aime »

Bonjour Ă  tous,

J’ai plusieurs fois rencontrĂ© le problĂšme avec les objets Tempos figĂ©es en cours de dĂ©compte. Sur conseil de GCE, j’ai finalement remplacĂ© ma tempo principale de filtration avec un objet Chrono, ce dernier Ă©tant plus robuste que les objets Tempo.
Cela m’a contraint à revoir un peu la programmation pour continuer à avoir l’affichage du temps restant de filtration.

Voici le diagramme correspondant Ă  la mise en place du chrono en lieu et place de la tempo :

J’ai mis Ă  jour le diagramme global de fonctionnement des diffĂ©rents modes de filtration (hors asservissements PĂ C, Traitement, 
):


FILTR DIAGRAM.zip (3,3 Mo)

3 « J'aime »

Bonjour,

Je reviens sur tout vos montages pour piscine.Excellent soit dit en passant !

Utilisez-vous un transformation d’isolement / sĂ©curitĂ© en amont de vos montages.
Que dit les différents norme.

Merci pour vos retours

Cordialement

1 « J'aime »

Bonjour tous30,

la mise en Ɠuvre d’un transfo d’isolement 230V <> 230V en amont de l’installation est particuliĂšre. Comme il ne peut plus avoir de protection diffĂ©rentielle en aval du transfo, il faut un systĂšme qui prĂ©vient en cas de dĂ©faut, type Vigilohm. Cela implique que, en cas de signalement de dĂ©faut, l’installation doit ĂȘtre dĂ©connectĂ©e jusqu’à rĂ©solution du dĂ©faut. Autant dire que ce n’est pas adaptĂ© Ă  une installation domestique.

Par contre vous pouvez utiliser de petits transfos d’isolement pour des appareillages prĂ©cis. C’est le cas, par exemple, du transfo 230V > 12 V des spots immergĂ©s.
Il est peu envisageable de faire de mĂȘme pour une prise, par exemple, le coĂ»t d’un transfo pouvant soutenir la puissance demandĂ©e Ă©tant rĂ©dhibitoire.
Vous devez respecter la norme (qui est trĂšs proche de celle d’une salle de bains), en particulier les volumes et la protection diffĂ©rentielle (30 mA demandĂ©s, 10 mA conseillĂ©s).

image

Volume 0 :
Aucun appareillage ou appareil d’utilisation n’est autorisĂ©. A l’exception de ceux alimentĂ©s en trĂšs basse tension (TBTS) soit 12 volts alternatif ou 30 volts continu.
Volume 1 :
Appareillage et appareil d’utilisation ne sont pas admis sauf dans le cas d’une alimentation Ă©lectrique trĂšs basse tension (TBTS).
Volumes 0 et 1 : seuls les appareils fixes peuvent ĂȘtre installĂ©s.
Volume 2 :
Les appareillages et appareils d’utilisation sont acceptĂ©s s’ils sont alimentĂ©s en TBTS ou protĂ©gĂ©s par un disjoncteur diffĂ©rentiel 30 mA ou un transformateur de sĂ©paration. Les luminaires sont de classe 2.

Les canalisations d’eau doivent ĂȘtre Ă©lectriquement isolantes ou reliĂ©es Ă  la liaison Ă©quipotentielle du bassin (qui est propre au bassin, ce ne peut pas ĂȘtre celle du domicile).

Par principe le tableau Ă©lectrique (et les Ă©quipements du Pool House) ne doivent ĂȘtre accessibles que avec une clef ou un outil.

Bonne journée

3 « J'aime »

Bonjour grocrabe,

Merci pour votre retour et l’info sur :

Les canalisations d’eau doivent ĂȘtre Ă©lectriquement isolantes ou reliĂ©es Ă  la liaison Ă©quipotentielle du bassin (qui est propre au bassin, ce ne peut pas ĂȘtre celle du domicile).

Cela s’applique aussi au piscine hors sol.

Je vais installer des sondes (REDOX et PH) et je cherche une solution pour isoler au mieux l’élec et l’eau


Bonne journée

Bonjour,
depuis le printemps que j’avais remplacĂ© mes tempos par des chronos, j’avais des bogues avec un chrono qui un jour sur 3 ne dĂ©marrait pas. Du coup il y avait un problĂšme dans les calculs de temps de filtration et la pompe ne s’arrĂȘtait pas et pouvait tourner H24 jusqu’à ce que je m’en rende compte. J’avais laissĂ© de cĂŽtĂ© par manque de temps.

En reprenant ma configuration le WE dernier, je pense avoir identifié le problÚme :blush:
Comme mentionnĂ© dans un autre post, il est crucial de ne pas relier les entrĂ©es Enable et Start Ă  la mĂȘme ressource.

Cette rĂšgle s’applique non seulement Ă  l’objet DĂ©lai, mais Ă©galement Ă  la plupart des objets de la V5.
Dans ma programmation, j’avais respectĂ© cette contrainte. Cependant, les deux IO en entrĂ©e d’un objet Chrono Ă©taient Ă©troitement liĂ©es, l’état de l’une dĂ©pendant de l’autre via le moteur de scĂ©nario. Je pensais que le temps de traitement par le moteur de scĂ©nario serait suffisant pour que l’entrĂ©e START soit systĂ©matiquement activĂ©e aprĂšs l’entrĂ©e RĂ©init. Cependant, il arrivait parfois que les deux IO s’activent simultanĂ©ment (ou que le laps de temps soit trop court). Dans ce cas, le chrono ne dĂ©marre pas, je vous le confirme.

Pour rĂ©soudre ce problĂšme, j’ai insĂ©rĂ© un objet DĂ©lai de 3 secondes entre l’IO et l’entrĂ©e START afin de m’assurer que la synchronicitĂ© ne soit plus possible.
Diagramme AVANT :

Diagramme APRÈS

La sortie du Délai est repassée OFF par une rÚgle en fin de filtration.
C’est stable depuis 4 jours, je continue de surveiller.

Bonne journée

3 « J'aime »

Bonjour fgtoul,

merci pour cette info importante.

Je sais que la V5 est trÚs rapide mais je me demandais comment les 2 commandes pouvaient arriver simultanément

Une rĂ©ponse pourrait ĂȘtre qu’elles n’arrivent pas simultanĂ©ment mais que la protection anti-rebond sur les entrĂ©es allonge l’impulsion au point que les 2 puissent se chevaucher.

Si c’est ça tu pourrais descendre ta tempo.
A tester si tu as du temps le WE prochain :wink: (en mĂȘme temps si ça marche avec 3 sec, pourquoi changer :laughing:).

Bonne journée

je ne suis pas à 3 secondes prÚs sur une 1/2 journée de filtration :smiley:
et pourquoi 3s ? parce que c’est le temps par dĂ©faut, flemme de le changer :rofl:

Aucun ratĂ© sur les dĂ©marrages/arrĂȘts de la pompe depuis l’ajout du dĂ©lai le 21/09. ProblĂšmes rĂ©solus.
Je suis plus serein pour l’hivernage qui arrive à grands pas.

c’est ça d’habiter dans le sud
 j’ai hivernĂ© il y a 3 semaines !! :laughing: :cold_face: :cold_face:

Bonne journée

bah, l’eau est encore Ă  17.5 ce matin, je pense que l’arrĂȘt des traitements Ă  12°C ce sera dans 3 semaines, pas avant, puis la rĂ©duction au minimum de la filtration (hivernage actif) dans 1 mois et demi environ (eau Ă  moins de 10°C).

C’est ça le ch’nord !!! :stuck_out_tongue_winking_eye:
Le pire c’est qu’on s’y habitue :sunrise_over_mountains:

1 « J'aime »