Go Down

Topic: Programme d’arrêt d'urgence (Read 167 times) previous topic - next topic

airess

Bonjour a tous, je viens vers vous avec l'espoir de trouver une solution sur laquelle je bloque depuis 2 jours.

Je vous explique rapidement, je suis en train de faire une serre autonome et j'utilise un vérin linéaire pour ouvrir ou fermer celle-ci en fonction de la température intérieur et extérieur.

J'utilise 4 relais actuellement. 2 pour le sens de monter et 2 pour la descente.
Le soucis est que je n'arrive pas a programmer un programme d'urgence qui empercherait d'activer les 4 relais en même temps.
Bien sur une solution électrique serais plus simple mais je n'ai pas le matériel pour.

Je me permet de mettre en exemple de code pour mieux illustrer.

Code: [Select]

void regulation_temperature()
{
if (temperature_interieur<température_exterieur)
{monter}
if (temperature_interieur>température_exterieur)
{descendre}
}
void monter ()
{
if (capteur_haut == LOW)
{
digitalWrite(moteur_haut, HIGH);
digitalWrite(moteur_haut2, HIGH);
}
else
{
digitalWrite(moteur_haut, LOW);
digitalWrite(moteur_haut2, LOW);
}
}

void descendre ()
{
if (capteur_bas == LOW)
{
digitalWrite(moteur_bas, HIGH);
digitalWrite(moteur_bas2, HIGH);
}
else
{
digitalWrite(moteur_bas, LOW);
digitalWrite(moteur_bas2, LOW);
}
}



et donc j'aurais bien vue un void_urgence avec si monter et descendre actif alors on arrêt tout et on met les 4 relais moteur en LOW ou désactiver les void monter et void descendre

J'espère avoir été clair et je vous remercie d'avance.

dbrion06

C'est hors sujet, mais si vous ne mettez pas d'hysteresis, vos relais vont battre tout le temps, faire du bruit et s'user.

Code: [Select]

const int seuil = 1;
void regulation_temperature() {
if (temperature_interieur< (température_exterieur - seuil) )
{monter}
if (temperature_interieur> (température_exterieur + seuil) )
{descendre}
}

ne fera rien (ni monter, ni descendre) si on les deux temperatures sont assez voisines...

airess

#2
Apr 18, 2019, 02:51 pm Last Edit: Apr 18, 2019, 04:14 pm by airess
Merci de l'information, c'est déjà pris en compte dans le programme ainsi que divers possibilité selon consigne haute,basse ect... C'était juste pour pas surcharger le post. Par contre je me note votre écriture d'hystérésis qui est moins lourde que celle que j'utilise.
Encore merci.

airess

#3
Apr 18, 2019, 06:10 pm Last Edit: Apr 18, 2019, 06:11 pm by airess
Existe-il un commande pour annuler un void?

fdufnews

#4
Apr 18, 2019, 10:13 pm Last Edit: Apr 18, 2019, 10:15 pm by fdufnews
Existe-il un commande pour annuler un void?
void = vide qu'entends-tu par là??

Quand une fonction ne retourne pas de valeur ou n'attends pas d'argument en entrée on utilise le mot clé void
Code: [Select]
void maFonction(void){}

J'utilise 4 relais actuellement. 2 pour le sens de monter et 2 pour la descente.
Le soucis est que je n'arrive pas a programmer un programme d'urgence qui empercherait d'activer les 4 relais en même temps.
donc j'aurais bien vue un void_urgence avec si monter et descendre actif alors on arrêt tout et on met les 4 relais moteur en LOW ou désactiver les void monter et void descendre
C'est toi qui écrit le programme. Si tu ne codes pas quelque part d'activer monter et descendre en même temps, la situation ne devrait pas se produire. C'est une paramètre que tu dois prendre en compte lorsque tu fais la conception de ton programme.

Ensuite rien ne t'empêche lorsque tu entres dans la fonction monter de désactiver par précaution les relais de descente et de faire l'inverse lorsque tu entres dans descente.

J-M-L

#5
Apr 19, 2019, 05:04 am Last Edit: Apr 19, 2019, 05:06 am by J-M-L
S'il n'y a qu'un seul arduino qui donne des ordres aux relais, comme vous contrôlez le code et qu'il ne fait qu'une seule chose à la fois, c'est assez simple de vous assurer que vous désactivez bien les 2 relais qui doivent être au repos avant d'activer les autres - et une fois le vérin en position les désactiver aussi si pas besoin de maintenir une alim).

Les « void » ( ça ne veut rien dire, on appelle ça des fonctions) ne vont pas s'exécuter en parallèle - tout est séquentiel.
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up