programme qui retourne dans void setup pendant le void loop

Bonjour je viens de créer un programme de dosage avec un capteur de force HX711; j'ai 3 pompe doseuse avec electrovanne qui alimente un bac situé sur mon capteur de force; quand je test le programme avec uniquement ma partie commande (pas de pompes et d'electrovannes sur mes relais ) le programme se déroule correctement ; par contre quand j'alimente ma puissance , lors du premier dosage quand j'atteint ma consigne pour couper la pompe, je peux apercevoir sur mon moniteur de série que le programme et repartie de 0 (sur le void setup, je ne savais pas que c'était possible).
voici le défaut que je constate sur mon moniteur série :
ecture: 0.036 kg facteur_calibration: -850000.00
compteur = 0
lecture: 0.047 kg facteur_calibration: -850000.00
compteur = 0
lecture: 0.050 kg facteur_calibration: -850000.00 (consigne a atteindre)
compteur = 0
Enlever tout les poids de la balance
apres le début de lecture, placer les poids sur la balance
Appuyez sur + ou a pour augmenter le facteur d’étalonnage
Appuyez sur - ou z pour diminuer le facteur d'étalonnage
lecture: 0.000 kg facteur_calibration: -850000.00
la partie en rouge s'affiche NORMALEMENT uniquement dans le void setup
et voici le programme ,or la des que ma consigne de masse est atteinte le programme "plante" et repart sur le void setup.

merci d'avance !

par contre quand j'alimente ma puissance , lors du premier dosage quand j'atteint ma consigne pour couper la pompe, je peux apercevoir sur mon moniteur de série que le programme et repartie de 0 (sur le void setup, je ne savais pas que c'était possible).

ben c'est que vous avez sans doute tiré trop de jus... et l'arduino a rebooté... ou alors vous n'avez pas de diode de roue libre et vous avez un pic de tension dans les dents...

comment c'est alimenté?


corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

edit réalisé*
pour l'alimentation la carte et les pompes:electrovannes sont alimentés par un transfo 230 alternatif / 12V continu 10A ; j'ai également retiré l'alimentation de la carte arduino par le transformateur et effectué le test en alimentant la carte avec mon mac. étant donné qu'il n'y a aucun lien entre la commande et la puissance (relais) je pense que vous avez raison sur le fait que je n'ai pas de diode de roue libre sur mes pompes et electrovannes. mais étant donnés que ces circuits sont indépendants de ma carte, comment se fait il qu'ils puissent interferer?

EDIT : est il possible que mon transformateur génère des perturbations electriques?

oui, mais JML voulais parler de la diode roue libre des relais,

mettez votre shema , plus pratique pour chercher l'origine du problème.
vous utilisez quoi comme relais?

https://www.cdiscount.com/bricolage/electricite/5v-actif-bas-1-canal-module-de-relais-carte-pour-a/f-1661416-sod4894560157702.html?idOffre=227663111#mpos=7|mp

j'ai ce relais pour la 1eme pompe et celui la pour les 2 autres :

https://www.cdiscount.com/bricolage/electricite/module-de-relais-2-canaux-5v-avec-optocoupleur-car/f-16614-auc2009272828587.html

vous voulez un plan du schéma de la partie puissance ou commande?

Les relais génèrent beaucoup de parasite à la fermeture. J'ai déjà été confronté plusieurs fois à ce problème.

Est-ce que vous pouvez refaire l'essai dans les condition suivante:

  • Brancher la carte Arduino sur une alimentation séparée du transo (USB du Mac par exemple)
  • laisser branché le module avec optocoupleurs mais débrancher le "module relais est 5V bas actif"

Le problème est-il toujours présent ?

quand je test le programme avec uniquement ma partie commande (pas de pompes et d'electrovannes sur mes relais ) le programme se déroule correctement ; par contre quand j'alimente ma puissance , lors du premier dosage quand j'atteint ma consigne pour couper la pompe, je peux apercevoir sur mon moniteur de série que le programme et repartie de 0 (sur le void setup, je ne savais pas que c'était possible).

Je pencherais plutôt pour un problème de parasite secteur (charge inductive).
Voir ici : Charge inductive et parasites - Tutoriels et cours - Arduino Forum
Je préconiserais une varistance S10K275 en parallèle sur la charge.

joebillybob:
vous voulez un plan du schéma de la partie puissance ou commande?

les deux mon cher , ca evitera d' y revenir .

je pencherai pour une alim trop faiblarde lors du pic de demarrage des pompes qui doivent consommer bien plus que les electrovannes .

a y etre ajouter les caracteristiques electriques des E V et celles des pompes svp .

Sauf si ce sont des pompes et électrovannes 230V.
Donc : schéma indispensable ou au minimum : comment sont alimentées les pompes et électrovannes.

merci a tous d'avoir pris le temp de me répondre, avec vos réponses + en lisant quelques topics sur des forums j'ai fini par installer des diodes 1N4148 en parallèle sur l'ensemble de mes bobines ( pompes et electrovannes) depuis plus aucun soucis ! plus de reset intempestif de la carte arduino :slight_smile:

Tu aurais pu préciser qu'il s'agissait de pompes et vannes basse tension et non pas 230V.

Pourquoi avoir éditer le message et supprimé votre code ?

"Oct 12, 2019, 06:45 pm Last Edit: Oct 16, 2019, 06:32 pm by joebillybob"

#include "HX711.h"
#define DOUT  3
#define CLK  2
float calibration_factor = -850000;
int compteur=3;
int etatbouton ;
int bouton = 4;
HX711 scale;
void setup() {

 pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
    pinMode(6, OUTPUT);
  digitalWrite(6, HIGH);
    pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);
  pinMode(4,INPUT);

 
 
  Serial.begin(9600);
  Serial.println("Enlever tout les poids de la balance");
  Serial.println("apres le début de lecture, placer les poids sur la balance");
  Serial.println("Appuyez sur + ou a pour augmenter le facteur d'étalonnage");
  Serial.println("Appuyez sur - ou z pour diminuer le facteur d'étalonnage");

  scale.begin(DOUT, CLK);
  scale.set_scale();
  delay(500) ;
  scale.tare(); //effectue un reset de la balance
 
}

void loop()
{
  scale.set_scale(calibration_factor); //ajuster la mesure avec le facteur de calibration
  Serial.print("lecture: ");
  Serial.print(scale.get_units(), 3); //unité ( dixieme, centieme...)
  Serial.print(" kg");
  Serial.print(" facteur_calibration: ");
  Serial.print(calibration_factor);
  Serial.println();
  Serial.print("compteur = ");
  Serial.println(compteur);
 

  if (Serial.available())
  {
    char temp = Serial.read();
    if (temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if (temp == '-' || temp == 'z')
      calibration_factor -= 10;
  }

  etatbouton = digitalRead(bouton);
  if (etatbouton == HIGH) // Rappel : bouton = 3
  { scale.tare();
    compteur = 0;
    digitalWrite(5, LOW);
     }
  if (scale.get_units() > 0.050 && compteur == 0)
  {
    digitalWrite(5, HIGH);
    delay(2000) ;
    compteur = 1;
    scale.tare();
  }

if (compteur == 1)
{   
   
    digitalWrite(6, LOW);
    }
if (scale.get_units() > 0.050 && compteur == 1)
  {
    digitalWrite(6, HIGH);
    delay(2000) ;
    scale.tare();
    compteur = 2;
  }
if (compteur == 2)
{
    digitalWrite(7, LOW);
    }
if (scale.get_units() > 0.050 && compteur == 2)
  {
    digitalWrite(7, HIGH);
    delay(2000) ;
    scale.tare();
    compteur = 3;
  }
}

@+