menu pour réglage pompes doseuses

Bonjour,

Depuis un an j'utilise un arduino uno et un shield pour gérer 4 pompe péristaltique pour le dosage de produit dans mon aquarium. il me faut régulièrement affiner les dosage et pour cela je suis obliger de démonter ma pompe pour la connecter au pc et flasher mon arduino avec les nouveau réglage. J'ai a disposition des écran lcd 2 ou 4 lignes et des bouton poussoir. Je souhaiterais pourvoir ajuster les quantités via un bouton + et - Je sait parametrer et faire defiler des message sur un lcd mais je ne connait pas du tout la programmation pour crée un menu et utiliser des bouton.

Si vous pouviez m'aider, il me faudrait les fonction suivante : un bouton pour changer de pompe et 2 bouton + et -

Merci d'avance

Salut

Ton sujet m'intéresse. A tout hasard, je suis allé voir ICI et LA ;)

Je peux t'aider, mais il faut que tu commences par donner ton code source exact et dans son intégralité. Merci de le poster ici (attention à bien les utiliser les balises code, le ptit bouton avec un # dessus)

Côté hardware, qu'envisages-tu comme écran LCD ? Tu l'as déjà ? J'en vois un sur tes photos, c'est celui d'un autre automate ?

Déja, il te faudra forcement un troisième bouton. Car "logiquement", imagine comment on pourrait faire ce que tu veux faire avec seulement 2 ... Sinon la logique à adopter est assez simple, un peu la flême ce soir, jtexplique demain ;)

salut

alors, Pour batto, oui c'est ce que je disait, 3 bouton, 1 pour changer de pompe, 2 pour le + et -.

Bricoleau, salut amis recifaliste ;) j'ai a disposition un lcd 2 lignes et un 4 lignes. Le 4 lignes est peut être pas mal, il permettrait de faire une ligne par pompe. Oui j'ai 2 automates, un pour la gestion des pompes de dosage et un pour la gestion de l'aqua (lumiere, temperature, osmolation)

Cote hardware je pense juste metre mon shield sur une mega pour avoir des sorti dispo pour l'ecran et bouton.

#include "AFMotor.h"
#include "DS1307.h"
#include "Wire.h"


AF_DCMotor motor1(1, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor3(3, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor4(4, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

int seconde;
int minut;

int CA;
int KH;
int SEL;
int MG;


void setup() {


motor1.setSpeed(200); // set the speed to 200/255
motor2.setSpeed(200); // set the speed to 200/255
motor3.setSpeed(200); // set the speed to 200/255
motor4.setSpeed(200); // set the speed to 200/255
}

void loop() {

minut = RTC.get(DS1307_MIN,true);
seconde = RTC.get(DS1307_SEC,true);



CA = (20000/24); // ici, ajuster votre quantite ( 20 seconde de distribution / 24 doses (1 fois par heures) 
KH = (25000/24); // ici, ajuster votre quantite ( 25 seconde de distribution / 24 doses (1 fois par heures)
SEL = ((CA + KH)/ 2); // ici, ajuster votre quantite ( moyenne du ca et kh distribué / 24 doses (1 fois par heures)
MG = (5000/24); // ici, ajuster votre quantite ( 5 seconde de distribution / 24 doses (1 fois par heures)


if ((minut == 00) && (seconde == 01)){
motor4.run(FORWARD); // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
delay(CA);
motor4.run(RELEASE); 
delay(450); 
}


if ((minut == 15) && (seconde == 01)){
motor3.run(FORWARD); // CA/KH 2 ( KH )+ OLIGO 3
delay(KH);
motor3.run(RELEASE);
delay(450);
}



if ((minut == 30) && (seconde == 01)){
motor2.run(FORWARD); // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
delay(SEL);
motor2.run(RELEASE);
delay(450);
}


if ((minut == 45) && (seconde == 01)){
motor1.run(FORWARD); // MG ( MAGNESIUM 2% )
delay(MG);
motor1.run(RELEASE);
delay(450);
}


delay(600);
}

djbouns:
alors,
Pour batto, oui c’est ce que je disait, 3 bouton, 1 pour changer de pompe, 2 pour le + et -.

Oups lu trop vite dsl ^^’

Alors pour gérer des menu" intelligemment" je fait comme ça (alors je précise c’est la méthode pour faire des menu à rallonge et complexe, mais qui peut le plus …).

  1. tout d’abord créer des constantes pour y voir plus clair genre (on verra plus précisement à quoi elles servent dans la suite)
#define MENU1 0
#define MENU2 1

#define PLUS 8 // pin de tes boutons, à modifier evidemment suivant ta config
#define MOINS 9
#define POMPE 10
  1. des variables qui permettront de savoir où on en est :
byte MenuActif, BoutonAppuye;
  1. créer des fonctions dans la loop pour gagner en lisibilité et ne pas hésiter à rajouter des onglets sous l’IDE, ça permet d’éviter de se taper un code code de 6 km en un seul pavé.
void loop() {

GestionPompe(); // tu mets tout ce qui concerne la régulation des pompes
GestionBouton();
GestionAffichage();

}

void GestionBouton() {

if(digitalRead(PLUS)==1 || digitalRead(POMPE)==1 || digitalRead(MOINS)==1) {

if(digitalRead(PLUS)==1 ) BoutonAppuye=PLUS;
if(digitalRead(POMPE)==1 ) BoutonAppuye=POMPE;
if(digitalRead(MOINS)==1 ) BoutonAppuye=MOINS;

switch(MenuActif) {

case MENU1:

switch(BoutonAppuye) {

case PLUS:

break;

case MOINS:

break;

case POMPE:

break;

}

break;

case MENU2:

switch(BoutonAppuye) {

case PLUS:

break;

case MOINS:

break;

case POMPE:

break;

}
break;

}

while(digitalRead(PLUS)==1 || digitalRead(POMPE)==1 || digitalRead(MOINS)==1); // on attend le relâchement
delay(50); // anti-rebond

}

}

void GestionAffichage() {

switch(MenuActif) {

case MENU1:

break;

case MENU2:

break;

}

}

Si tu arrives à tout comprendre, tu vois qu’on gère chaque cas, par exemple qu’est-ce qu’il se passe si on appuie sur + alors qu’on est dans le menu 2 …

Après on peut “étoffer” car on a pas forcément les même besoins suivant les menus : par exemple on a pas forcement envie d’attendre le relachement du bouton (si on fait une mise à l’heure par exemple). Dans ce cas, on ajoute à la dernière boucle while de gestionbouton() une condition avec un boolean qu’il faudra préciser à chaque cas.

pour l’affichage j’ai pas mis grand chose, mais on peut le gérer de plusieurs façon : soit introduire une variable “refresh” par exemple qui déclenche GestionAffichage() si on appuie sur un bouton. Ou bien un rafraîchissement régulier à 24 images/s par exemple en utilisant les interruptions temporelles.

esque se code, une fois "introduit" a celui que jutilise fonctioneras ? parsque jutilise des délais dans mon code alors si japuis sur le bouton pendant le delais sa va aps marcher non ?

Bah déjà ton delay(600) ne sert à rien, donc les seuls delay() restants sont ceux qui arrivent à une heure précise et une seule fois. Donc déjà sans trop se casser la tête, ça veut dire qu'à moins que l'utilisateur appui pile pendant les injections, aucun delay() ne pourra perturber le fonctionnement des menus. Après on pourrait optimiser ton code pour se passer des delay().

Exemple :

byte MoteurActif,Action,Step;
int Timing[4];
Unsigned long PreviousTime;

void setup() {

Timing[0]=(20000/24);
Timing[1]=(25000/24);
Timing[2]=((CA + KH)/ 2);
Timing[3]=(5000/24); 

}

void loop() {

GestionMoteur();

}

void GestionMoteur() {

if(Action!=1) {

if ((minut == 00) && (seconde == 01)){

Action=1;
MoteurActif=0;

} else if (.....) {// à compléter avec tes conditions tu auras compris la logique
} else {

switch(Step) {

case 0:
RunMoteur(MoteurActif,FORWARD);
Step++;
PreviousTime=millis()+Timing[MoteurActif];
break;

case 1:
if(millis>=PreviousTime) Step ++;
break;

case 2:
RunMoteur(MoteurActif,RELEASE);
Step++;
PreviousTime=millis()+450;
break;

case 3:
if(millis>=PreviousTime) {
Action=0;
Step=0;
}

break;


}

}

}

void RunMoteur(int Number, int Direction) {

switch(Number) {

case 0:
motor1.run(Direction);
break;

case 1:
motor2.run(Direction);
break;

.......

}

}

djbouns : quel est ton niveau de maîtrise du C/C++ ? Es-tu à l'aise pour comprendre le code ci-dessus ?

D'abord, tant qu'à retoucher le code de ton arduino, est-ce que la logique de commande actuelle des pompes doseuses te convient, ou bien des aménagements seraient souhaitables ? D'après ton source, cette logique est : - fonctionnement de chacune des quatre pompes une fois par heure, 24h/24h, en décalé de 15 minutes entre elles. - la consigne (=le dosage) est donnée sous la forme d'une durée de fonctionnement de chaque pompe par tranche de 24 heures - donc chaque heure, chaque pompe tourne pendant cette durée / 24

Ensuite il faut que tu décides la partie hardware.

Tu envisages de passer sur une mega : cela me semble largement disproportionné pour si peu.

Par exemple, pour environ 10€ tu peux acheter (ebay, chine) un LCD 4 lignes x 20 caractères à interface I2C, qui ne nécessite aucune sortie supplémentaire sur ton arduino car le branchement se fera exactement sur les mêmes fils que ta plaque DS1307.

D'ailleurs au passage il me semble que même ton DS1307 est un peu luxueux. Tu ne l'utilises que pour mesurer les intervalles de temps entre les mises en route des pompes. Je pense que la même chose aurait aussi pu être effectuée sans DS1307, juste avec la fonction millis() embarquée dans ton arduino, avec un résultat tout à fait correct pour l'usage que tu en as. La seule différence, c'est que si tu éteins puis rallume ton automate, le DS1307 aura conservé l'heure, alors que millis() sera remise à zéro. Donc un comportement légèrement différent sur ce cas particulier, mais d'un point de vue aquariophile cela n'a aucune importance. C'est par pour le prix d'un DS1307, mais ça fait toujours un composant de moins qui te foutra la grouille le jour où il sera HS.

Donc une solution possible serait tout simplement de remplacer ton DS1307 par un écran LCD I2C.

NB pour les non aquariophiles : un aquarium tel que présenté dans le premier lien, représente souvent beaucoup d'argent et de temps investi. Il fonctionne 24h/24h, et en cas de pépin on peut tout perdre en une seule journée. Donc on n'a pas droit à l'erreur quand on bricole un arduino pour piloter le bouzin. Il vaut mieux faire simple au niveau hardware et sans faille au niveau code. Par exemple ici, un bug dans le code qui ferait que la pompe doseuse tourne en permanence, pourrait être catastrophique (selon le produit supplémenté)

Après il y a les boutons poussoirs. Deux me semblent possibles (logique de fonctionnement classique en mode/set) mais un peu moins pratique : tu devras appuyer autant de fois sur set qu'il y a de secondes dans la durée souhaitée. Trois est plus confort, mais nécessite trois sorties de l'arduino, si possible avec interruptions. Qu'est-ce qu'il te reste de dispo avec ton shield moteur ?

On trouve aussi des écrans LCD livrés avec boutons poussoirs associés, mais je n'en n'ai pas vu en I2C. Je pense qu'il faut se le bricoler soi-même avec un PCB intermédiaire et deux PCF8574.

En encore plus basique et moins pratique, tu peux te passer d'un écran LCD et faire clignoter tes leds autant de fois que de secondes programmées. A toi de compter jusqu'à 25.

A l'inverse, en maxi classe, tu peux mettre un petit écran tactile.

Fais ton choix camarade, le code suivra

PS : j'aime pas le sel, mais tolère quand même les récifaleux :P

Bonjour,

bricoleau: On trouve aussi des écrans LCD livrés avec boutons poussoirs associés, mais je n'en n'ai pas vu en I2C. Je pense qu'il faut se le bricoler soi-même avec un PCB intermédiaire et deux PCF8574.

En voici un : http://www.gotronic.fr/art-afficheur-serie-lcd03-2250.htm @+

En LCD + i2c + boutons, il y a ça: http://www.adafruit.com/products/772

3Sigma: En LCD + i2c + boutons, il y a ça: http://www.adafruit.com/products/772

Nickel : avec ça, aucune sortie supplémentaire n'est nécessaire sur ton arduino. Tu peux le brancher en parallèle du circuit DS1307

Oué enfin vu ce qui est branché, c’est pas les pins qui manquent : 4 pins pour les moteur + 3 pour les boutons + 2 pour i2c = 9 => il en reste encore 10 de libre …

Pour batto, Je ne connait rien en c++ --cc-+ :P J'ai appris le programmation pour mon aqua en ... 6 mois ;) Je ne me suis pas lancer dans le menu parsque les début était déjà compliquer. A présent, cela devient une nécessiter mais c'est toujours du chinois quand sa sort de mes code actuel.

Pour répondre a bricoleau, j'ai déjà une mega qui dort dans un carton ainsi que 2 lcd, 2 et 4 lignes. concernant le nombre de sortie, si tu regarde bien mon poste : http://www.recifal-france.fr/boitier-balling-maison-de-80-t13110.html Le shield prend tout les ports d'une uno. De plus, je doit faire mon nouveau montage et n'avoir cas transférer mon shield et mes moteurs pour la mise en route car, comme tu le disait, je ne peut pas me passer de ma supplémentation au risque de tout perdre.

Pas de problème pour supprimer mon horloge surtout que j'ai des interférence avec les moteur qui décale l'horloge petit a petit.

je pensait a monter mon lcd 4 lignes pour avoir les lignes suivante : ca : **ml kh : *ml Sel/Nacl : *ml mg: **ml

avec juste une petite > devant la pompe concerner par le réglage en cour.

Le code que j'ai mis se matin n'est pas le dernier code que j'utilise donc je le colle ci dessous:

#include "AFMotor.h"
#include "DS1307.h"
#include "Wire.h"


AF_DCMotor motor1(1, MOTOR12_64KHZ); 
AF_DCMotor motor2(2, MOTOR12_64KHZ); 
AF_DCMotor motor3(3, MOTOR12_64KHZ); 
AF_DCMotor motor4(4, MOTOR12_64KHZ); 

int seconde;
int minut;
int heure;
int jour;
int temps;

int CA;
int KH;
int SEL;
int MG;
int TIME;

void setup() {
  
/*
  RTC.stop();
  RTC.set(DS1307_SEC,20);           //réglage secondes
  RTC.set(DS1307_MIN,23);              //réglage minutes
  RTC.set(DS1307_HR,20);               //réglage heures
  RTC.set(DS1307_DOW,1);               //réglage jour de la semaine
  RTC.set(DS1307_DATE,29);             //réglage date
  RTC.set(DS1307_MTH,7);               //réglage mois
  RTC.set(DS1307_YR,13);                 //réglage année
  RTC.start();
  */
  
  Serial.begin(9600);           // set up Serial library at 9600 bps

 motor1.setSpeed(150);     // VITESSE MG
 motor2.setSpeed(130);     // VITESSE SEL
 motor3.setSpeed(150);     // VITESSE KH
 motor4.setSpeed(150);     // VITESSE CA
}

void loop() {
  
  heure = RTC.get(DS1307_HR,true);  
  minut = RTC.get(DS1307_MIN,true);
  seconde = RTC.get(DS1307_SEC,true);
  temps = (heure*100) + minut;
  
  
CA = (40000/6); // 36000/32500/32000/31000/30500/30000
KH = (53000/6); // /56000/53500/52000/55000/50000/40000/30000
SEL = ((CA + KH)/ 2);
MG = (33000/6); // 30000/25000/10000/5000
TIME = (((CA + KH + SEL)/500)/24);




 if ((temps == 0000) && (seconde == 01)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(CA);
  motor4.run(RELEASE);
delay(500);  
 }
 if ((temps == 400) && (seconde == 01)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(CA);
  motor4.run(RELEASE);
delay(500);  
 }
 if ((temps == 800) && (seconde == 01)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(CA);
  motor4.run(RELEASE);
delay(500);  
 }
 if ((temps == 1200) && (seconde == 01)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(CA);
  motor4.run(RELEASE);
delay(500);  
 }
 if ((temps == 1600) && (seconde == 01)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(CA);
  motor4.run(RELEASE);
delay(500);  
 }
 if ((temps == 2000) && (seconde == 01)){
  motor4.run(FORWARD);      // CA/KH 1 (CALCIUM) + OLIGO 1 et 2 
  delay(CA);
  motor4.run(RELEASE);
delay(500);  
 }


  
 if ((temps == 100) && (seconde == 01)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
  delay(KH);
  motor3.run(RELEASE);
  delay(500);
  }
  if ((temps == 500) && (seconde == 01)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
  delay(KH);
  motor3.run(RELEASE);
  delay(500);
  }
   if ((temps == 900) && (seconde == 01)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
  delay(KH);
  motor3.run(RELEASE);
  delay(500);
  }
   if ((temps == 1300) && (seconde == 01)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
  delay(KH);
  motor3.run(RELEASE);
  delay(500);
  }
   if ((temps == 1700) && (seconde == 01)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
  delay(KH);
  motor3.run(RELEASE);
  delay(500);
  }
   if ((temps == 2100) && (seconde == 01)){
  motor3.run(FORWARD);      // CA/KH 2 ( KH )+ OLIGO 3
  delay(KH);
  motor3.run(RELEASE);
  delay(500);
  }
  
  
  


 if ((temps == 200) && (seconde == 01)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
  delay(SEL);
  motor2.run(RELEASE);
  delay(500);
 }
 if ((temps == 600) && (seconde == 01)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
  delay(SEL);
  motor2.run(RELEASE);
  delay(500);
 }
 if ((temps == 1000) && (seconde == 01)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
  delay(SEL);
  motor2.run(RELEASE);
  delay(500);
 }
 if ((temps == 1400) && (seconde == 01)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
  delay(SEL);
  motor2.run(RELEASE);
  delay(500);
 }
 if ((temps == 1800) && (seconde == 01)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
  delay(SEL);
  motor2.run(RELEASE);
  delay(500);
 }
 if ((temps == 2200) && (seconde == 01)){
  motor2.run(FORWARD);      // CA/KH 3 ( SEL SANS CHLORURE DE SODIUM ) 
  delay(SEL);
  motor2.run(RELEASE);
  delay(500);
 }



if ((temps == 300) && (seconde == 01)){
  motor1.run(FORWARD);      // MG 2%
  delay(MG);
  motor1.run(RELEASE);
  delay(500);
 }
 if ((temps == 700) && (seconde == 01)){
  motor1.run(FORWARD);      // MG 2%
  delay(MG);
  motor1.run(RELEASE);
  delay(500);
 }
 if ((temps == 1100) && (seconde == 01)){
  motor1.run(FORWARD);      // MG 2%
  delay(MG);
  motor1.run(RELEASE);
  delay(500);
 }
 if ((temps == 1500) && (seconde == 01)){
  motor1.run(FORWARD);      // MG 2%
  delay(MG);
  motor1.run(RELEASE);
  delay(500);
 }
 if ((temps == 1900) && (seconde == 01)){
  motor1.run(FORWARD);      // MG 2%
  delay(MG);
  motor1.run(RELEASE);
  delay(500);
 }
 if ((temps == 2300) && (seconde == 01)){
  motor1.run(FORWARD);     // MG 2%
  delay(MG);
  motor1.run(RELEASE);
  delay(500);
 }



 if ((minut == 58) && (seconde == 01)){
  RTC.set(DS1307_SEC, RTC.get(DS1307_SEC, true) + TIME);
 }


delay(600);
}

Les dernière ligne sont pour rattraper se retard du au interférence moteur.

Alors si vous pouviez m'indiquer comment et ou ajouter dans mon code pour avoir ce menu svp $)

Au faite bricoleau ... tu devrais te mettre au sel ... je n'echangerais pas mes 18ans d'eau douce pour ces 18mois de recifal :P

Ok je regarde le code

Quel est le débit d'une pompe péristaltique ?

Pourquoi est-ce que la pompe SEL a un vitesse différente des autres ?

  motor1.setSpeed(150);     // VITESSE MG
 motor2.setSpeed(130);     // VITESSE SEL
 motor3.setSpeed(150);     // VITESSE KH
 motor4.setSpeed(150);     // VITESSE CA

...alors que sa durée est la moyenne de CA et KH ?

CA = (40000/6); // 36000/32500/32000/31000/30500/30000
KH = (53000/6); // /56000/53500/52000/55000/50000/40000/30000
SEL = ((CA + KH)/ 2);

Est-ce que pour la pompe SEL tu veux un réglage indépendant, ou bien elle doit rester calculée automatiquement par rapport à CA & KH ?

Salut bricoleau

La vitesse des pompes est différent pour les etaloner (la pompe a sel tourne plus vite que les autre) La quantité de sel doit être le moyenne du kh et ca car sinon il y a un déséquilibre ionique.

djbouns: Alors si vous pouviez m'indiquer comment et ou ajouter dans mon code pour avoir ce menu svp $)

Je t'ai pondu tout le code, y'a juste à boucher les trous ...

pour b@tto : visiblement notre ami n'est pas complètement au point en programmation. En temps normal, on l'inviterait à investir un peu plus de temps pour monter un compétence sur le sujet, mais là je me propose de l'aider un peu plus car le cas m'intéresse aussi. Cela veut dire que je vais prendre le temps de lui pondre une première version de code complètement opérationnelle, charge à lui ensuite de faire le nécessaire pour se l'approprier (ou pas).

pour djbouns : tu donnes comme exemple d'affichage "CA *** ml" J'en déduis donc que tu souhaites afficher le volume à distribuer quotidiennement, exprimé en ml. Et que le réglage se fera avec les boutons, en faisant + ou - 1 ml C'est possible, et certainement le plus élégant. Mais il faut que tu m'éclaires de manière plus détaillée sur comment on passe de la notion de temps de fonctionnement d'une pompe à la notion de volume distributé en ml (avec des valeurs, des ordres de grandeur)

Question bête : quel est l'ordre de grandeur d'un volume distribué quotidiennement, par exemple pour le CA ? 5ml, 10ml, 50 ml ?

Tu parles d'un étalonnage de pompe. Je te propose d'inclure dans le soft une procédure d'étalonnage, utilisant les boutons et l'affichage LCD. Par exemple : 1) mettre l'entrée de la pompe dans une réserve de liquide quelconque (eau) 2) mettre la sortie dans un contenant gradué, permettant de mesurer le volume (par exemple 10 ml) 3) appuyer sur un bouton pour lancer la pompe 4) surveiller le remplissage du contenant gradué 5) arrivé à 10 ml en sortie, appuyer sur un bouton qui stoppe la pompe à partir de là, le soft aura toutes les infos pour maîtriser les volumes distribués.

Le volume peut être maîtrisé soit en jouant sur la vitesse de la pompe, soit en jouant sur sa durée de fonctionnement. Je te propose qu'on fasse marcher les pompes à leur vitesse préconisée (qui est ??? pour une bonne précision et/ou longévité), en jouant ensuite sur la durée de fonctionnement.

par exemple :

CA = (40000/6);

Ta pompe CA tourne 40 secondes par jour, fractionnées en 6 fois. Cela correspond à combien de ml, sachant que la vitesse de ta pompe est 150 ?

Dans ton code initial, chaque pompe se déclenchait toutes les heures. Dans ton dernier code, chaque pompe se déclenchait toutes les 4 heures.

Que fait-ton ? a) maintien d'une quantité fixe de déclenchements par jour, la même pour toutes les pompes, et non modifiable sans recompil b) nombre de déclenchements modifiable via boutons et LCD, une seule valeur pour toutes les pompes c) nombre de déclenchements modifiable via boutons et LCD, individualisé par pompe

Merci de rayer les mentions inutiles :P

Bonsoir,

Merci batto, comme la très bien dit bricoleau, je n'y connait pas grand chose. Je suis tout de meme capable de modifier mes 2 codes tout seul (1 pour gestion des pompes et 1 pour la gestion de l'aqua) Cependant, pour pouvoir ajouter ton code au miens, il faudrait déjà que je comprenne chaque ligne et ce n'est pas le cas ...

Bricoleau, Pour repondre a tes questions, "quel est l'ordre de grandeur d'un volume distribué quotidiennement" Pour le ca mg kh le nombre de ML corespond a la moitier du temps. exemple 40 seconde = 20ml.

"Je te propose qu'on fasse marcher les pompes à leur vitesse préconisée" Les pompe sont normalement faite pour tourner en 12v. (équivaut a 220) Mais en 12v la vitesse en trop grande et le réglage et donc moins précis, sans parler du bruit qui est asser important. Regler a 150, le goutte a goutte est parfait et pas trop de bruit.

"procédure d'étalonnage" Tres pratique, je n'avait même pas envisager cette possibilité. (je ne veut pas embêter mon monde non plus lol) Pour plus de précision, n'est t'il pas possible de faire l'inverse ? Faire tourner les pompe 1 minute et indiquer le volume distribuer ?

"Dans ton code initial, chaque pompe se déclenchait toutes les heures. Dans ton dernier code, chaque pompe se déclenchait toutes les 4 heures." effectivement un délais d'une heure est préférable pour ne pas avoir de précipitation. (1er code = erreur de debutant lol)

"Que fait-ton ? a) maintien d'une quantité fixe de déclenchements par jour, la même pour toutes les pompes, et non modifiable sans recompil b) nombre de déclenchements modifiable via boutons et LCD, une seule valeur pour toutes les pompes c) nombre de déclenchements modifiable via boutons et LCD, individualisé par pompe" Il faut garder le nombre de distribution actuel et cela ne doit pas être modifiable (cela éviteras de faire des bêtises) TU A CRU QUE TU ALLAIT M'AVOIR AVEC TON "Merci de rayer les mentions inutiles "

]:) ]:D ]:) ]:D ]:) ]:D ]:) ]:D

:P :P :P :P :P :P :P :P

Merci de t'interesser de prêt a mon cas.

Si je peut te conseiller pour ton Aqua ....

Au faite, tu a trouver mon bac et tu dit ne pas etre recifaliste :astonished: tu a fait des recherche sur moi ou quoi ? Moi j'ai chercher "bricoleau" mais j'ai pas trouvé d'aquarium :sweat_smile: :stuck_out_tongue_closed_eyes: J'aimerais bien le voir moi aussi.

Encore merci