Problème intempestif

Bonjour

Je sais, ce n'est pas très clair, je vais essayer de préciser.

J'ai installé une VMC, contrôlée par arduino.
J'ai une batterie de préchauffage de l'air qui évite que mon échangeur ne gèle. J'avais déjà posté dans un précédent topic car je suspectais un problème de relais qui pouvait éventuellement geler, mais comme je l'ai changé et que cela a recommencé ce soir, pour une température à peine négative, ce n'est donc pas le cas.

en fait, la batterie de préchauffage est censée s'allumer à une température précise, et je viens de constater qu'elle s'était allumé alors que cette température n'était pas atteinte. Toutes les boucles et conditions que j'avais placé dans le code n'ont pas permis d'éteindre la batterie, d'où la question : est-ce que mon code a une condition foireuse ou bien est-ce qu'il y a un paramètre qui provoquerai la bascule en position HIGH du relais sans que les conditions soient remplies ? (il a fallu que j'éteigne l'arduino pour que la batterie s'arrête de chauffer).

Je sais bien qu'il faudrait un schéma du montage, mais je vous poste déjà le code, si vous trouvez quelque chose qui pourrait expliquer cela....

Merci.

VMC_V17_liquid1_nouvellesondeext.ino (10.4 KB)

Bonjour,
les imbrications

if else if ne sont pas claires pour moi.

et voici deux autres points à régler.

Il ya un delay(900000) faut faire autrement ça bloque le programme pendant 15mn !!!

il ya deux fois serial.begin

hello
il y a cela aussi à voir/revoir
pinMode(tachfanout, INPUT); //D0
pinMode(tachfanin, INPUT); //D1

Serial.begin(9600); //donc D0 et D1

TONE_PIN 4 //4 pas de declaration

ici tu dis declarer une sortie ?
//tachymètre Output
pinMode(tachfanout, INPUT);
digitalWrite(tachfanout, HIGH); // D0
int sensorValue = analogRead(A0); //A0 pas de declaration

ps: pour suivre ton code, un petit croquis avec les flux d'air et la position des sondes serait bien

tu peux essayer de mettre ces valeurs de -1.5 et -0.5
histoire de ne pas tomber dans un cas de "bascule"due à un manque d'hysteresis

else if (airentreevmc <= -1.50 && airentreevmc != -127.00) //si sonde B < -1
{
if (airext != -127.00){
if (airext > -15 && airentreevmc <= -0.5) //si sonde A >-15 et sonde B < -1
{
//vitesse de ventilation
OCR2B = 32; //Exsufflation 40%

Bonjour

Et merci pour vos réponses !
Grosse journée, pas eu le temps de vous répondre auparavant.

Voici déjà un schéma de la VMC DF. IL y a six thermomètres symbolisés par un point vert. L'identification des sondes correspond à la légende à côté.

Ensuite : la piste de l'hysteresis. Ok, je vois maintenant à quoi correspond l'hyteresis, je viens de chercher un peu.
Mais j'ai du mal à me représenter cette notion sur une courbe de température.
Pourquoi une valeur de température ne prendrait-elle pas le même chemin en augmentant ou en diminuant ?
Lorsque je déclenche la résistance à -1, elle chauffe pendant environ 4 secondes, puis se coupe dès que la sonde entréeVMC arrive à -0,75. Avec l'inertie de la résistance électrique, j'arrive à une température à airentréeVMC de l'ordre de 3°

Si je déclenche à -1,5 la résistance chauffante, puis que je la coupe à -0,5, je vais consommer encore plus et donc la température va avoisiner les 8 degrés en entrée de VMC. Inutile dans mon cas.

Est-ce que l'hysteresis joue un autre rôle dans mon montage ?


Pour mon code, la nuit a porté réflexion : j'ai fait une bêtise hier soir en modifiant le code qui plantait et en le corrigeant, du coup, je n'ai pas pu comparer et y réfléchir à tête reposée. Cependant, je me souviens avoir fait une condition irréalisable car l'une des conditions pour éteindre la batterie ne pouvait être accédée.
Bon quoi qu'il en soit, votre relecture de mon code va me permettre de l'améliorer. J'ai ajouté une condition pour vérifier que la batterie était bien coupée. j'ai supprimé des trucs qui ne servaient à rien pour l'instant à la lecture de ce que vous m'avez remonté.

  • j'ai supprimé les références que j'avais placé pour commencer à afficher la vitesse de rotation des ventilateurs, on y verra déjà plus clair.
  • J'ai purgé le serial.begin
  • pour le délai de 15 minutes, passé une certaine température négative, je coupe la ventilation pendant 15 minutes, puis on reprend le script, puis on recoupe si toujours trop négatif, puis on reprend.J'envisage d'alterner phase de coupure, phase de mise en route afin d'éviter la condensation de l'air chaud dans les gaines
  • par contre, j'ai pas trop compris l'histoire des D0 et des D1. Si ca n'a plus d'importance à la lecture du code corrigé, on peut en reparler par la suite.

Enfin, pour simplifier la lecture du code, voici les conditions expliquées en clair.

if ((airentreevmc >= -1 && airentreevmc != -127.00) || (airsortant >= 7))
{
Si l'air d'entrée de la VMC >= -1 ou l'air sortant >= 7, on coupe la VMC
}

if ((airentreevmc > 13 && airentreevmc != -127.00) || (airentreevmc <=-3 && airentreevmc != -127.00) || (airsortant <= 1 && airsortant != -127.00))
{
Si une de ces valeurs apparait, c'est qu'il se passe quelque chose d'anormal. La batterie est HS (air sortant trop froid, l'échangeur va geler), l'air entrée VMC trop froid, sous la température de déclenchement de la batterie, airentréeVMC vraiment trop chaud : on bip pour alerter
}

if (airsortant <= 2 && airsortant != -127.00)
{
Si l'air sortant est trop froid, alors on coupe la ventilation et la batterie.
}
else if (airentreevmc <= -2 && airentreevmc != -127.00)
{
si la première condition n'est pas remplie, on regarde si la température de l'air de la VMC est <= -2, mais on vérifie aussi que
la sonde ne déconne pas

{if (airfiltres != -127.00) Si la sonde des filtres ne déconne pas
{
if (airfiltres > -12 && airentreevmc <= -2 && airentreevmc != -127.00)
{
Si l'air à l'entrée de la VMC est compris entre -12 et -2, on allume la batterie
}
else if (airfiltres <= -12)
{ Si l'air entrant est trop froid, on coupe la batterie et la ventilation.
}
}
}
}
else if (airentreevmc > -2 || airsortant > 6)
{
on coupe la batterie électrique et les ventilos tournent.
}


Et je ne comprends pas la chose suivante (je l'ai testé dans mon montage hier) :
if (airsortant <= 2 && airsortant != -127.00)
{
Si l'air sortant est trop froid, alors on coupe la ventilation et la batterie.
}
else if (airentreevmc <= -2 && airentreevmc != -127.00)
{
si la première condition n'est pas remplie, on regarde si la température de l'air de la VMC est <= -2, mais on vérifie aussi que
la sonde ne déconne pas

{if (airfiltres != -127.00) Si la sonde des filtres ne déconne pas
{
if (airfiltres > -12 && airentreevmc <= -2 && airentreevmc != -127.00)
{
Si l'air à l'entrée de la VMC est compris entre -12 et -2, on allume la batterie
}
else if (airfiltres <= -12)
{ Si l'air entrant est trop froid, on coupe la batterie et la ventilation.
}
}
}
}

C'est ici que j'enlève le else
if (airentreevmc > -2 || airsortant > 6)
{
on coupe la batterie électrique et les ventilos tournent.
}

ce bout de code a fait que la batterie s'allumait une fraction de seconde, puis s'éteignait, en boucle.
je pige pas pourquoi parce que dans la première partie, la condition était pour un air <= 2, dans la seconde pour un air >2. Ces deux conditions ne peuvent pas être vraies en même temps, non ?

VMC_V19.ino (10.7 KB)

je pige pas pourquoi parce que dans la première partie, la condition était pour un air <= 2, dans la seconde pour un air >2. Ces deux conditions ne peuvent pas être vraies en même temps, non ?

c'est là qu'il faut faire intervenir l’hystérésis

on suppose entrée air à 2°

float hysteresis= 0.75;
float seuil_entrée_air=2;

if (entrée_air<(entrée_air+hystérésis)) { mettre sur on ;} // si 2<(2- 0.75)==> si 2<1.25

else{ if (entrée_air > (seuil_entrée_air - hystéresis)) { mettre sur off ;}// si 2>(2+0.75)==> si 2>2.75

de cette façon un simple bagottage de la température entre 1.99 et 2.01 sera sans incidence

Bonjour,

dans ce sujet, parler d'hystérésis peut faire référence à 2 choses qu'il convient de distinguer
l'hystérésis, c'est pour éviter que ça bagotte en permanence

imagines un "bon" "vieux" radiateur électrique avec thermostat, réglé sur 19°, le fonctionnement est le suivant :

  • si la température descend à 18°, le radiateur se met en marche, la température augmente
  • si la température atteint 20°, le radiateur est coupé, la température diminue, pas trop vite, on espère
    le thermostat a donc un hystérésis de 2° :
  • inconvénient : un certain inconfort, un petit gaspillage
  • avantage : le thermostat n'intervient que quand la température aura évolué de 2°, ce qui prend quelque minutes. Sans cela le thermostat bagotterait en permanence et son bilame ou ses contacts seraient ratiboisés en quelques heures ...

d'où l'intérêt d'un thermostat électronique : le capteur de température et le contacteur (triac à détection de tension = 0) ne s'usent pas. On peut donc fonctionner avec un hystérésis pratiquement nul ...

... mais pas complètement nul car il faut aussi que l’électronique puisse disposer d'un peu de temps. Ici, il ne s'agit plus de minutes, mais de micro ou millisecondes : il ne faut pas surcharger le programme avec une tension d'entrée qui oscille à haute fréquence autour de la valeur de consigne

le point délicat du système, c'est l'inertie thermique de la résistance. L'idéal serait une résistance sans inertie, commandée par un triac ... (ton relais est-il statique ou à contact sec, ne comporte-t-il pas déjà une électronique destinée à introduire un hystérésis ou à gérer l'inertie thermique de la résistance ?)

Yes, ok, je pige bien.

Ici, on a de l'air qui circule. Avec une résistance sans inertie, l'air ne serait pas réchauffé au passage sur la résistance, ce qui équivaudrait à allumer la résistance en permanence.
Comme j'ai une inertie, la résistance chauffe un peu plus que désiré, et l'air qui passe à son contact se réchauffer tant que la température de la résistance le permettra.
Puis sinon, on allume à nouveau la résistance.

Pour la résistance par contre, l'alternance de dilatation/rétractation trop forte ne risque-t-elle pas au contraire d'user prématurément cette dernière ?
Il faudrait que la résistance reste toujours au même point de chauffe, mais pour cela, il faudrait que je programme tout autrement trouvant un moyen de connaitre la température interne de la batterie et en envoyant un train d'impulsions permettant de maintenir la batterie à une certaine température en permanence. Avec le système actuel, c'est un peu difficile à obtenir pour moi.

Mon relais entre le 5V et le 220V est un relais statique qui ne comporte pas cette électronique à ma connaissance.
Sur la résistance, il y a deux protections thermiques (à réarmement auto et manuel) que j'ai du connecter avec un relais mécanique par contre (qui lui serait limite en cas d'ouvertures/fermetures trop fréquentes ?)

Donc oui, limiter les on/off avec ces paramétrages me permettra au moins de ne pas flinguer le relais mécanique et la résistance.

Merci en tous cas.

Question : j'ai modifié mon code (version 19), uniquement les valeurs de température d'extinction de la batterie.
Impossible de placer le code sur la carte, elle freeze à la fin du téléversement et ne reboot pas.
led L et TX allumée en permanence

Si je replace mon avant-dernier code (le 18), ça fonctionne.
Le 19 sur une seconde carte sans aucune connexion, pas de soucis.

J'ai repris le 18, enregistré le 18 sous le 19 qui est maintenant en pj, modifié deux valeurs de température, ça bloque toujours sur le téléversement du 19, mais le téléversement du 18 est toujours ok.

Je ne m'explique pas ce phénomène.
Vous avez une idée ?
Merci.

VMC_V19.ino (10.7 KB)

hello
chez moi, ton prg v19 ci dessus se télécharge et se lance.

si D8 et D9 sont libres, change l'affectation :
//PARTIE TACHYMETRE
const int tachfanout = 8;//0
const int tachfanin = 9;//1

IL faut que je vire cette option sur les tachymètres. C'est déclaré, mais pour l'instant pas branché.
Donc je vais virer ces lignes pour l'instant.

Tx allumé tout le temps, quelqu'un sait ce que cela veut dire ? J'ai pas trouvé de message d'erreur coté PC, je devrais ? Et où puis-je chercher ?

THX

Bonjour,

Ici, on a de l'air qui circule. Avec une résistance sans inertie

l'inertie thermique est un terme utilisé en bâtiment, qui se prête mal à décrire le phénomène lié à cette résistance (à moins qu'elle soit constituée d'une grosse masse de béton).
Ta résistance peut avoir une grande capacité thermique si elle faite d'une grande quantité de matière ayant une grande chaleur spécifique est-ce le cas ?

l'air ne serait pas réchauffé au passage sur la résistance, ce qui équivaudrait à allumer la résistance en permanence

le transfert thermique est lié notamment à la forme de la résistance, il n'a pas en principe de lien avec sa capacité thermique

Comme j'ai une inertie, la résistance chauffe un peu plus que désiré, et l'air qui passe à son contact se réchauffer tant que la température de la résistance le permettra.
Puis sinon, on allume à nouveau la résistance.

peux-tu mieux expliquer ?
cela voudrait-il dire que la pompe (s'il y en a une) ne fonctionne pas en permanence, et qu'on profite des périodes d'arrêt pour emmagasiner de l'énergie thermique dans la résistance ?

Pour la résistance par contre, l'alternance de dilatation/rétractation trop forte ne risque-t-elle pas au contraire d'user prématurément cette dernière ?

jamais observé, sauf pour les lampes mais c'est un cas à part

Il faudrait que la résistance reste toujours au même point de chauffe, mais pour cela, il faudrait que je programme tout autrement trouvant un moyen de connaitre la température interne de la batterie et en envoyant un train d'impulsions permettant de maintenir la batterie à une certaine température en permanence. Avec le système actuel, c'est un peu difficile à obtenir pour moi.

quand je parlais d'idéal, c'était par facilité
fort probable que pour toi l'idéal est de garder le système tel quel, mais il faut bien analyser le fonctionnement avant de partir dans le programme. Cette démarche est souvent négligée.
Par ailleurs on est bientôt en 2018, le pied ça serait de surveiller et de modifier les paramètres à distance, dumoins pendant une période de mise au point

Mon relais entre le 5V et le 220V est un relais statique

Donc oui, limiter les on/off avec ces paramétrages me permettra au moins de ne pas flinguer le relais mécanique

contradiction à clarifier : c'est quoi ce relais ?

Yep, ok, pleins de points à clarifier :

  • La batterie chauffante :
    Elle est du type : Description
    oui, l'inertie n'est pas le bon terme, mais c'était la façon la plus simple d'expliquer ce que je constate.

Je mesure la température de l'air qui arrive après être passée au contact de la résistance électrique. Lorsque la batterie s'allume, l'air met une à deux seconde à arriver plus chaud à l'entrée de la VMC. Lorsque la batterie s'éteint, la température de l'air qui arrive à la VMC se réchauffe encore pendant plusieurs secondes.
Ce phénomène est d'autant plus fort que le temps d'allumage de la batterie est long.
Donc si airext = -1, airentreevmc monte jusqu'à 2
Si airext = -12, airentreevmc monte à 3 - 4, mais redescend vite car le delta de temp est plus grand.

Je décris ça comme de l'inertie, mais ce n'est probablement pas le bon terme alors.

  • alternance dilatation / rétractation : j'avais expliqué mon montage à un professionnel qui produit des batteries. Il m'avait dit que l'allumage de la batterie provoquait une dilatation du fil de résistance et que une trop grande amplitude chaud/froid pouvait à terme casser la batterie et qu'en conséquence, que leur boite mettait un système électronique pour indiquer une température de résistance optimale, puis envoyait des impulsions pour maintenir la résistance à cette température constante.

Chez moi, j'imagine que plus ma gamme de température (allumage, extinction) est rapprochée, plus souvent elle se déclenchera et moins la batterie aura d'amplitude thermique ? Mais je peux me tromper ??

  • Et donc du coup, les relais.

J'ai un relais SSR au niveau de la arduino, qui contrôle le courant envoyé à la batterie de chauff.
J'ai un autre relais mécanique par contre, jusqu'à côté de la batterie. Celui-ci sert à couper le courant lorsque la batterie arrive à 50° (réarmement automatique) ou à 90° (réarmement manuel), et donc se ferme chaque fois que je mets du jus dessus.
C'est sur ce dernier relais que j'ai un doute :peut-il s'user si je l'active à une fréquence trop rapide ?

En tous cas, merci pour les explications.

bonjour

un professionnel qui produit des batteries. Il m'avait dit que l'allumage de la batterie provoquait une dilatation du fil de résistance et que une trop grande amplitude chaud/froid pouvait à terme casser la batterie et qu'en conséquence, que leur boite mettait un système électronique pour indiquer une température de résistance optimale

si la résistance reste à une température donnée, je ne vois fichtrement plus comment on régule en fonction de la température extérieure : peux-tu demander quelques éclaircissements au PRO ?

Je me suis peut-être mal exprimé :
Un exemple : attention, chiffres totalement empiriques, je n'ai pas calculé la température précise de la batterie pour qu'elle puisse réchauffer l'air de X degrés en tenant compte du diamètre et de la vitesse de l'air.

  • Pour réchauffer de l'air à -1 degré, je peux demander à ma batterie de faire monter la résistance de 0° à 20 degrés. Devant l'amplitude thermique, mon fil va chauffer fort et va se dilater, puis se refroidir. La température à l'entrée de la VMC va donc augmenter jusqu'à 3 - 4 degrés, la batterie se coupe et l'air froid va contracter le fil précédemment dilaté

  • Ou alors, je sais calculer en fonction du débit, du diamètre, de la vitesse de ventilation la puissance nécessaire pour amener l'air de la Text à -1° désiré à l'entrée de la VMC et je demande à la batterie de fournir cette puissance en continue, par exemple 9° en permanence. Donc pas de dilatation / rétraction et une puissance adaptée en continu.

J'espère avoir été un peu plus précis.
Bonne soirée.

Bonsoir,
oui, au moins tu n'auras pas de changement brusque de la température de la résistance
par contre tu ne pourras pas éviter une évolution de la température de la résistance en fonction de la température extérieure (d'où ma protestation)

je pense que ce matériel ne doit pas être donné, et qu'une telle résistance doit être irréparable
en plus des difficultés prévisibles d'accès à la batterie, c'est donc la santé de la résistance qui doit être la 1ère préoccupation. Pour autant, nous ne négligerons pas ton petit confort :slight_smile: