Go Down

Topic: controler et piloter le ph piscine (Read 136 times) previous topic - next topic

thecyril

Bonjour à tous,

je suis un projet pour contrôler et piloter le pH de ma piscine.

donc, mon projet :

mesurer le PH
quand celui ci atteint une valeur basse définie, déclencher deux relais, un qui active une pompe de brassage, un autre qui active une pompe doseuse.
un fois la valeur maxi atteinte, couper les relais.


J'ai donc commandé la sonde PH et le shield qui va avec (Liquid PH0-14 Value Detect Sensor Module + PH Electrode Probe BNC for Arduino).

Et une nouvelle carte arduino UNO.

Pour l'heure j'ai déjà un système en place mais qui utilise un système de contrôle ph extérieur (je m'en sers comme un bouton, HIGH ; LOW).

Je voudrais donc faire une solution 100% arduino.

voici mon code actuel qui fonctionne :

Code: [Select]
// constentes et variables :
const int Ph_metre = 6;     // Ph_metre sur pin 6
const int RELAY1_pompe_brassage =  4;      // pompe brassage, relais 1  sur pin 4
const int RELAY2_pompe_doseuse =  5;      // pompe doseuse, relais 2 sur pin 5

int etat_Ph_metre = 0;         // variable pour la lecture de l'Etat du Ph_metre

void setup() {
  // Pin 4, 5 et 6 sont des sorties
  pinMode(RELAY1_pompe_brassage, OUTPUT); //  pin 4 est une sortie
pinMode(RELAY2_pompe_doseuse, OUTPUT); //  pin 5 est une sortie
 
  // Ph_metre est une entrée
  pinMode(Ph_metre, INPUT);
}

void loop() {
  // Lit l'état du Ph metre
  etat_Ph_metre = digitalRead(Ph_metre);
  // vérifie si le PH_metre est enclanché.
  // si oui etat_Ph_metre est LOW :
  if (etat_Ph_metre == LOW){
    // allumer les relais :
     
  digitalWrite (RELAY1_pompe_brassage, LOW);   // relais 1 = activation pompe de brassage
  digitalWrite (RELAY2_pompe_doseuse, LOW);   // relais 2 = activation pompe doseuse
 
 
  } else {
    // sinon éteindre ne rien faire
    digitalWrite(RELAY1_pompe_brassage, HIGH) ;
    digitalWrite(RELAY2_pompe_doseuse, HIGH);
  }
}


donc l'idée est de remplacer le ph metre "tout fait" par le "kit" arduino.

pour la mesure du PH, je pensais utiliser ce code (tout fait par le vendeur du kit) :

Code: [Select]
#define SensorPin 0          //pH meter Analog output to Arduino Analog Input 0
unsigned long int avgValue;  //Store the average value of the sensor feedback
float b;
int buf[10],temp;

void setup()
{
  pinMode(13,OUTPUT); 
  Serial.begin(9600); 
  Serial.println("Ready");    //Test the serial monitor
}
void loop()
{
  for(int i=0;i<10;i++)       //Get 10 sample value from the sensor for smooth the value
  {
    buf[i]=analogRead(SensorPin);
    delay(10);
  }
  for(int i=0;i<9;i++)        //sort the analog from small to large
  {
    for(int j=i+1;j<10;j++)
    {
      if(buf[i]>buf[j])
      {
        temp=buf[i];
        buf[i]=buf[j];
        buf[j]=temp;
      }
    }
  }
  avgValue=0;
  for(int i=2;i<8;i++)                      //take the average value of 6 center sample
    avgValue+=buf[i];
  float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
  phValue=3.5*phValue;                      //convert the millivolt into pH value
  Serial.print("    pH:"); 
  Serial.print(phValue,2);
  Serial.println(" ");
  digitalWrite(13, HIGH);       
  delay(800);
  digitalWrite(13, LOW);

}



j'ai donc deux soucis, le premier comment intégrer le code de mesure du PH dans le miens et faire que la valeur lue commande le déclanchement , et ensuite le calibrage de la sonde (peut-etre ajouter un potentiomètre, genre ca : Diymore KY-040 360 degrés codeur rotatif Modul).

merci d'avance pour votre aide, je dois pas être loin de comprendre ce qu'il me manque, mais un petit coup de neurones m'est nécessaire .

Barsa972

Bonjour,

Pour répondre à ton premier souci ;
- crée à partir du code du fournisseur de la sonde une fonction ph() qui retourne la valeur mesurée et que tu pourras appeler dans la boucle (ton code sera plus intelligible comme ça). Il faudra supprimer les lignes de communication avec le serial monitor et utiliser l'instruction return pour renvoyer la valeur du pH
- modifie la condition de déclenchement des relais en fonction de cette valeur, par exemple avec la condition ph() <= 7
En ce qui concerne la "calibration", je crois que tu n'as pas une bonne idée de la signification de ce terme. Ta sonde fait une mesure, un point c'est tout. Elle est calibrée en usine pour que la valeur soit la plus exacte possible et c'est tout. Il n'y a pas de raison de forcer la mesure à être différente. Si tu veux forcer l'ouverture des relais, tu n'as pas besoin de te préoccuper de la sonde.

biggil

Une sonde pH, ça se calibre. Et pas tous les 10 ans !
On utilise pour cela des solutions-tampons qui ont un pH stable et connu (souvent pH=7 et pH=4)
Certaines sondes doivent être calibrées sur 2 points (2 pH différents), d'autres sur 1 seul point.
On trempe l'électrode dans la solution, et on tourne une petite vis pour afficher le bonne valeur.

Un sonde pH est un objet très fragile, il faut la calibrer assez souvent, et la durée de vie de l'électrode n'est pas terrible...
Ca fait longtemps que j'ai tout viré, et que j'utilise un indicateur coloré (liquide qui change de couleur selon le pH). Oui, OK, ce n'est pas automatisable, mais avec ça j'ai finalement beaucoup moins d'ennuis...
Aide toi, le compilateur t'aidera

Barsa972

#3
Mar 26, 2020, 02:30 pm Last Edit: Mar 26, 2020, 02:31 pm by Barsa972
Parfaitement d'accord avec toi biggil mais ce que je voulais faire comprendre c'est qu'il n'y a pas de calibration automatique. Pour calibrer cette sonde il faudrait un circuit secondaire permettant la lecture des données après démontage de la sonde, nettoyage à l'eau distillée et trempage dans les solutions tampon. Il faudrait déterminer un coefficient d'ajustement à intégrer dans le programme du contrôleur de pompe. Rien n'empêche alors d'utiliser un potentiomètre pour ajuster ce coefficient dans le programme du contrôleur de pompes, si c'est ce dont tu parlais thecyril.
Reste qu'il faut prendre les choses par étapes. Mieux vaut commencer par tester le programme simple sans se préoccuper de la calibration puis implémenter ça dans un second temps.
Et sur le fond, il est vrai que tout cela est plus un exercice intellectuel parce que ce genre de mesure sera probablement peu robuste et le contrôle du pH par conséquent totalement inopérant.
Par ailleurs, il faudrait faire attention à ce que les relais sur lesquels sont branchées les pompes soient conçus pour supporter le courant d'appel au démarrage de celles-ci.

biggil

Je comprends que tu désires automatiser aussi l'acte de calibration, avec 2nd circuit (+ 3eme?), rinçage...
Je trouve ça excessif, moi je ferais la calibration à le main une fois par mois, en surveillant si ça dérive ou pas... le mieux est l'ennemi du bien  :)

Pour le relais, tu fais bien d'y prêter attention (j'aurais pu  mettre le feu chez moi!).
J'ai ouvert à ce sujet un fil sur ce forum, on m'y a conseillé de prendre un relais statique, ce que j'ai fait. Jusqu'ici tout va bien.
Aide toi, le compilateur t'aidera

Barsa972

je parlais pas d'automatiser la calibration  mais simplement de permettre la lecture du contrôleur de la sonde avec un autre arduino et un lcd. On pourrait le faire avec le même que celui qui contrôle les pompes mais ce serait plus pratique de faire la calibration tranquillou sur une table que dans un local technique de piscine.

thecyril

#6
Mar 29, 2020, 04:36 pm Last Edit: Mar 29, 2020, 04:45 pm by thecyril
bonjour,

désolé de cette absence, on tente de me poser la fibre et...c'est pas un franc succès.

effectivement pour la qualité de la sonde ph, pas de soucis, je les prends au taff (spécifiquement conçue pour de la lecture continue et en milieu agressif) c'est de la vrai sonde PH calibrage en plusieurs points et je compte effectivement me servir d'une potar pour faire ce calibrage manuellement.

maintenant oui je voudrais me concentrer sur le corps du programme.

merci de votre participation.

Go Up