Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

DIY, une sonde de Chlore pour piscine

coco38
Timide
Messages : 31
Inscription : 16 mai 2016, 00:00
Localisation : région toulousaine

Re: DIY, une sonde de Chlore pour piscine

Message par coco38 » 07 juin 2018, 17:09

Sattaz,

Je n'ai pas fait de carte typon, car je ne suis pas équipé. J'ai fait avec une plaque à bandes, comme sur le modèle Fritzing.
Je mettrais le code ce week-end.

Pour la sonde, j'ai un doute il parle de potentiel : 245-270mV. J'espère que ce n'est pas sa plage de fonctionnement.

Je vais tenter celle là:
https://fr.aliexpress.com/item/Durable- ... autifyAB=0

Jérôme

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 07 juin 2018, 22:21

coco38 a écrit :
07 juin 2018, 17:09
Sattaz,

Je n'ai pas fait de carte typon, car je ne suis pas équipé. J'ai fait avec une plaque à bandes, comme sur le modèle Fritzing.
Je mettrais le code ce week-end.

Pour la sonde, j'ai un doute il parle de potentiel : 245-270mV. J'espère que ce n'est pas sa plage de fonctionnement.

Je vais tenter celle là:
https://fr.aliexpress.com/item/Durable- ... autifyAB=0

Jérôme
Ok pour le code ce week-end 👍
Regarde sur la première page de ce sujet, la sonde ORP que j’ai acheté est celle référencée par Graniet.

Je viens de recevoir mon Z-UNO, j'ai uploader le bootloader depuis Arduino et j'ai fais l'inclusion dans Jeedom.
Les 'valeurs' qui s'affichent ne sont pas les même que ce que tu as toi Coco38:
Z-UNO_Valeurs.jpg
Z-UNO_Valeurs.jpg (60.53 Kio) Consulté 465 fois
C'est normal?

Sébastien

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 11 juin 2018, 00:17

Coco38,

J'ai vu que tu as mis ton code sur le Git et je t'en remercie!
J'ai eu un petit souci lorsque j'ai importé la librairie LCD, il y a des caractères spéciaux qui se sont glissés au début des fichier .cpp & .h ... j'ai dû les enlever pour que ça compile.

Par contre le problème des 'valeurs' dans Jeedom reste inchangé ... je ne vois que 7 lignes comme démontré dans mon image du post précédent.

Une idée?

Merci,

Sébastien

coco38
Timide
Messages : 31
Inscription : 16 mai 2016, 00:00
Localisation : région toulousaine

Re: DIY, une sonde de Chlore pour piscine

Message par coco38 » 11 juin 2018, 10:00

Salut,

Je suis surpris par les caractère spéciaux. J'utilise Windows, si ce n'est pas ton cas, ça peut peut-être venir de ça...
Je n'ai pas regardé mais peut-être que cette librairie existe maintenant dans la bibliothèque Zuno. A L'époque ce n'était pas le cas, donc j'avais dû porter celle d'Arduino sur Zuno.

Pour les valeurs, c'est normal, tu as celles de base. C'est le programme qui déclare les valeurs supplémentaires. Mais ça nécessite une exclusion/inclusion pour les prendre en compte.

Jérôme

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 11 juin 2018, 11:44

coco38 a écrit :
11 juin 2018, 10:00
Salut,

Je suis surpris par les caractère spéciaux. J'utilise Windows, si ce n'est pas ton cas, ça peut peut-être venir de ça...
Je n'ai pas regardé mais peut-être que cette librairie existe maintenant dans la bibliothèque Zuno. A L'époque ce n'était pas le cas, donc j'avais dû porter celle d'Arduino sur Zuno.

Pour les valeurs, c'est normal, tu as celles de base. C'est le programme qui déclare les valeurs supplémentaires. Mais ça nécessite une exclusion/inclusion pour les prendre en compte.

Jérôme
Non, la librairie LCD n'existe pas par défaut ... j'ai maintenant chargé la tienne, tout baigne!
Et oui je suis sous Windows ... bref c'est pas un grand problème ... juste le temps de trouver.

Pour les 'Valeurs': Ahhh ok ....
Ben j'aurais pu faire joujou longtemps avant de comprendre le truc de l'inclusion après avoir chargé le programme dans le ZUNO :-)
Je vais voir ça ce soir!

Autre petites infos manquantes pour un débutant comme moi:
Sur l'image 'Carte_Design' on ne voit pas où se connectent les sondes PH et ORP, les sondes de températures et aussi ce qui est connecté aux relais ...
On ne voit pas non plus où il faut alimenter le circuit, et avec quelle tension / ampérage.
Tu vas me dire, regarde le code ... euh oui mais c'est pas dans mes capacités ...

EDIT, je pense avoir compris:

Code : Tout sélectionner

//Entrée Ana
#define PIN_ORP         A0    // Pin de la sonde ORP
#define PIN_PH          A1    // Pin de la sonde PH

//Température
#define PIN_TEMP_LOCAL  11 // Pin du capteur DS18B20 : Température du local 
#define PIN_TEMP_EAU    12 // Pin du capteur DS18B20 : Température de l'eau

//Entrée TOR
#define PIN_MODE_MANU   14    // Pin du mode Manu
#define PIN_MODE_AUTO   15    // Pin du mode Auto
#define PIN_HORAIRE     16    // Pin du selecteur horaire
#define PIN_LUMIERE     17    // Pin du bouton lumiere

//Sortie relais
#define PIN_ECL_PISCINE   19  // Pin de l'éclairage de la piscine
#define PIN_POMP_PISCINE  20  // Pin de la pompe de la piscine
#define PIN_ELECTROLYSE   21  // Pin de l'electrolyseur
-> Donc si je prends la sonde ORP, je connecte 1 fil sur la pin A0 du ZUNO et l'autre va à la masse? (pareil pour tout le reste ...)

Autre chose par rapport aux constantes:
Si je comprends bien, ces constantes sont les setpoints/paramètres pour le programme.
Il serait vraiment super de pouvoir les envoyer depuis Jeedom, ainsi on aurait un paramétrage depuis l'interface!
Et donc ajouter une horloge pour la pompe directement dans le programme avec des options de plage horaires définissables ou auto en fonction de la température de l'eau.

Code : Tout sélectionner

//tension de reference (Vcc) du Zuno
#define VOLT_REFERENCE  3.05  // Tension de référence
 
//température
#define TEMP_GEL_MIN  -0.5  // Température de démarrage du mode antigel
#define TEMP_GEL_MAX   1.0  // Température d'arrêt du mode antigel
 
//ORP/Reox
#define ORP_MIN     650   // Tension (mV) de démarrage de la production de chlore
#define ORP_MAX     750   // Tension (mV) d'arrêt de la production de chlore

#define TempoMesure 300000  //attente entre chaque mesure
-> Possible?

Merci beaucoup pour ta patience, grâce à toi je vais réaliser mon automatisme piscine!!!

PS: tu as commandé une sonde ORP chez Aliexpress ... comment se fait-il que ton installation soit terminée et affiche des valeurs? :-)

Encore merci pour ton aide très précieuse!

Sébastien

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 11 juin 2018, 20:37

Coco38,

J'avance de mon coté ... tant bien que mal :-)

1) J'ai retiré la partie pour commander la lumière.
La compilation ne donne pas d'erreur et le ZUNO semble fonctionner (la LED blanche s'allume toutes les 30 minutes)
Peux-tu jetter un p'tit coup d'oeil à mes modifs ... just histoire de confirmer que je n'ai pas fait de boulettes?

Code : Tout sélectionner

#include <ZUNO_OneWire.h>
#include <ZUNO_LCD_I2C.h>
#include <ZUNO_DS18B20.h>

/*******************************************
 * AFFECTATION DES PINS
 ******************************************/
//TEST
#define PIN_LED 13
#define PIN_BUTTON 18

//Entrée Ana
#define PIN_ORP         A0    // Pin de la sonde ORP
#define PIN_PH          A1    // Pin de la sonde PH

//Température
#define PIN_TEMP_LOCAL  11 // Pin du capteur DS18B20 : Température du local 
#define PIN_TEMP_EAU    12 // Pin du capteur DS18B20 : Température de l'eau

//Entrée TOR
#define PIN_MODE_MANU   14    // Pin du mode Manu
#define PIN_MODE_AUTO   15    // Pin du mode Auto
#define PIN_HORAIRE     16    // Pin du selecteur horaire

//Sortie relais
#define PIN_ECL_PISCINE   19  // Pin de l'éclairage de la piscine
#define PIN_POMP_PISCINE  20  // Pin de la pompe de la piscine
#define PIN_ELECTROLYSE   21  // Pin de l'electrolyseur

/*******************************************
 * CONSTANTES
 ******************************************/
//tension de reference (Vcc) du Zuno
#define VOLT_REFERENCE  3.05  // Tension de référence
 
//température
#define TEMP_GEL_MIN  -0.5  // Température de démarrage du mode antigel
#define TEMP_GEL_MAX   1.0  // Température d'arrêt du mode antigel
 
//ORP/Reox
#define ORP_MIN     650   // Tension (mV) de démarrage de la production de chlore
#define ORP_MAX     750   // Tension (mV) d'arrêt de la production de chlore

#define TempoMesure 300000  //attente entre chaque mesure
/******************************************
 * VARIABLES GLOBALES
 ******************************************/
//TEST
byte LedState;

//temporisation
unsigned long PrecMillis = 0;

//ecran lcd
LiquidCrystal_I2C lcd(0x27, 20, 4);

//mode de fonctionnement
byte modePompe = 0; // 0:arret / 1:marche forcée / 2:auto
byte modePompePrec = 0;

//mesure de temperature
//Local
OneWire owTempLoc(PIN_TEMP_LOCAL);
DS18B20Sensor CapteurTempLoc(&owTempLoc);
int TemperatureLoc=0;
//Eau
OneWire owTempEau(PIN_TEMP_EAU);

DS18B20Sensor CapteurTempEau(&owTempEau);
int TemperatureEau=0;

//mesures
int valORP=0;
float valPH=0.0;

//sorties relais
//pompe
bool fctGel = false;
bool pinHoraire = false;
bool pinHorairePrec = false;
bool etatPompe = false;

//Chlore
bool etatChloreProd = false;

/******************************************
 * CANAUX ZWAVE
 * 1 : cmde de la pompe
 * 2 : mode AUTO (2) / MANU (1) / ARRET (0)
 * 3 : etat de la demande horaire
 * 4 : etat de la demande hors gel
 * 5 : température du local
 * 6 : température de l'eau
 * 7 : niveau ORP/Redox
 * 8 : niveau PH
 * 9 : etat production de Chlore
 ******************************************/

ZUNO_SETUP_CHANNELS(
  //Etat & commande de la pompe
  ZUNO_SWITCH_BINARY(getPompe, setPompe),
  //Mode selectionne
  ZUNO_SENSOR_MULTILEVEL_GENERAL_PURPOSE(getMode),
  //Etat & commande de la pompe
  ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_GENERAL_PURPOSE, getHoraire),
  //Etat du mode hors-gel
  ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_GENERAL_PURPOSE, getGel),
  //Temperature du local
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,SENSOR_MULTILEVEL_SCALE_CELSIUS, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, getTempLocal),
  //Temperature de l'eau
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,SENSOR_MULTILEVEL_SCALE_CELSIUS, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, getTempEau),
  //ORP/Redox
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_VOLTAGE,SENSOR_MULTILEVEL_SCALE_VOLT, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS, getORP),
  //Ph
  ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_VOLTAGE,SENSOR_MULTILEVEL_SCALE_VOLT, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, getPH),
  //Etat de la production de chlore
  ZUNO_SENSOR_BINARY_GENERAL_PURPOSE(getChloreProd));

/******************************************
 * INITIALISATION
 ******************************************/
void setup() {
  //initialisation port serie
  Serial.begin(9600);
  Serial.println("Start...");

  Serial.println("Initialisation des sorties relais");
  pinMode(PIN_ECL_PISCINE, OUTPUT);
  pinMode(PIN_POMP_PISCINE, OUTPUT);
  pinMode(PIN_ELECTROLYSE, OUTPUT);

  Serial.println("Initialisation des entrees");
  pinMode(PIN_MODE_MANU, INPUT_PULLUP);
  pinMode(PIN_MODE_AUTO, INPUT_PULLUP);
  pinMode(PIN_HORAIRE, INPUT_PULLUP);
        
  //initialisation écran lcd
  Serial.println("Initialisation de l'ecran LCD");
  delay(300);
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("T");lcd.print((char)223);lcd.print(" Local:");
  lcd.setCursor(13,0);
  lcd.print("Eau:");
  lcd.setCursor(0,1);
  lcd.print("Redox:       Ph:");
  lcd.setCursor(0,2);
  lcd.print("Mode:ARRET");  
  lcd.setCursor(0,3);
  lcd.print("Pompe:OFF Chlore:OFF"); 
  delay(100);
  
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUTTON, INPUT_PULLUP);

  digitalWrite(PIN_LED, LOW);
  LedState=0;

  //initialisation des relais
  Serial.println("Initialisation des sorties relais");
  digitalWrite(PIN_ECL_PISCINE, HIGH);
  digitalWrite(PIN_POMP_PISCINE, HIGH);
  digitalWrite(PIN_ELECTROLYSE, HIGH);  

  PrecMillis = millis();
}

void loop() {

  lectureEntrees();
  
  if ((digitalRead(PIN_BUTTON)==0) || ((millis() - PrecMillis) >= TempoMesure)) {

    PrecMillis = millis();
    
    Serial.println("Button pressed");
    if(LedState==0){
      digitalWrite(PIN_LED, HIGH);
      LedState = 1;
      Serial.println("Led On");
    }
    else{
      digitalWrite(PIN_LED, LOW);
      LedState = 0;
      Serial.println("Led Off");    
    }

    //mesure de la température du local
    lectureTempLocal();    

    //si la pompe fonctionne, on fait les mesures de l'eau (ORP, PH, Temperature)
    if(etatPompe){

      lectureTempEau();
      lectureORP();
      lecturePH();
    }

    zunoSendReport(1);
    zunoSendReport(2);
    zunoSendReport(3);
    zunoSendReport(4);
    zunoSendReport(9);
  }

  //Mise à jour du fonctionnement de la pompe
  FctPompe();
  
  //pilotage du relais de la pompe
  if(etatPompe){
    digitalWrite(PIN_POMP_PISCINE,LOW);    
  }
  else{
    digitalWrite(PIN_POMP_PISCINE,HIGH); 
  }

  FctProdChlore();
  
  //pilotage du relais de la production de chlore
  if(etatChloreProd){
    digitalWrite(PIN_ELECTROLYSE, LOW);
  }
  else {
    digitalWrite(PIN_ELECTROLYSE, HIGH);    
  }
  delay(100);
}

/****************************************************************************
 * FONCTION : récupère la température de l'eau du capteur DS18B20
 *  sans objet
 ****************************************************************************/
void lectureTempEau(){
  byte adresse[8];
  float temperature;
      
  //si le capteur est trouvé
  if(CapteurTempEau.scanAloneSensor(adresse)) {
      
      Serial.print("Adresse du capteur de temperature de l'eau ");
      for(int j = 0; j < 8; j++) {
        Serial.print(adresse[j], HEX);
        Serial.print(" ");
      }  
      Serial.println();  

      lcd.setCursor (17, 0);
      lcd.print("   "); // Clean lcd old digits
        
      //si la lecture est correcte
      temperature = CapteurTempEau.getTemperature(adresse);

      if((int)CapteurTempEau.getTemperature(adresse) != BAD_TEMP) {
        Serial.print("Temperature: ");
        Serial.println(temperature); 

        TemperatureEau = temperature;
        zunoSendReport(6);
    
        lcd.setCursor (17, 0);
        lcd.print((int)temperature);
        lcd.print((char)223); 
      }
      else {
        Serial.println("Temperature de l'eau erronee");
  
        lcd.setCursor (17, 0);
        lcd.print("TMP");
      }
    }
    else {
      Serial.println("Capteur de temperature de l'eau non trouve!");

      lcd.setCursor (17, 0);
      lcd.print("CAP");
    }

}

/****************************************************************************
 * FONCTION : récupère la température du local du capteur DS18B20
 *  sans objet
 ****************************************************************************/
void lectureTempLocal(){
  byte adresse[8];
  float temperature;
      
  //si le capteur est trouvé
  if(CapteurTempLoc.scanAloneSensor(adresse)) {
      
      Serial.print("Adresse du capteur de temperature du local ");
      for(int j = 0; j < 8; j++) {
        Serial.print(adresse[j], HEX);
        Serial.print(" ");
      }  
      Serial.println();  

      lcd.setCursor (9, 0);
      lcd.print("   "); // Clean lcd old digits
        
      //si la lecture est correcte
      temperature = CapteurTempLoc.getTemperature(adresse);

      if((int)CapteurTempLoc.getTemperature(adresse) != BAD_TEMP) {
        Serial.print("Temperature: ");
        Serial.println(temperature); 

        TemperatureLoc = temperature;
        zunoSendReport(5);
    
        lcd.setCursor (9, 0);
        lcd.print((int)temperature);
        lcd.print((char)223); 
      }
      else {
        Serial.println("Temperature du local erronee");
  
        lcd.setCursor (9, 0);
        lcd.print("TMP");
      }
    }
    else {
      Serial.println("Capteur de temperature du local non trouve!");

      lcd.setCursor (9, 0);
      lcd.print("CAP");
    }

}

/****************************************************************************
 * FONCTION : active la pompe de la piscine en cas de gel
 *  sans objet
 ****************************************************************************/
void FctPompe(){
  bool etatPompePrec = etatPompe;
  bool fctGelPrec = fctGel;
  
  //si la température du local < TEMP MIN => Gel
  if(TemperatureLoc < TEMP_GEL_MIN){
    fctGel = true;
  }
  if(TemperatureLoc > TEMP_GEL_MAX){
    fctGel = false;
  }

  //selon le MODE selectionné
  switch(modePompe){
    //ARRET
    case 0:
      etatPompe = false;
      break;
    //MARCHE FORCEE
    case 1:
      etatPompe = true;
      break;
    //AUTO
    case 2:
      //si le mode Auto vient d'être activé => on prend l'état de la demande horaire
      if(modePompe && !modePompePrec){
        etatPompe = pinHoraire;
      }

      //si le mode hors gel est activé => marche de la pompe en priorité
      if(fctGel){
        etatPompe = true;
      }
      else{
        //demande d'arrêt de la pompe SI
        //Arret_Horaire OU (Fin du mode Hors Gel ET pas de Demande_Horaire
        if((!pinHoraire && pinHorairePrec) || (!fctGel && fctGelPrec && !pinHoraire)){
          etatPompe = false;          
        }
        //demande de démarrage de la pompe SI
        //Arret_Horaire OU (Fin du mode Hors Gel ET pas de Demande_Horaire        
        if(pinHoraire && !pinHorairePrec) {
          etatPompe = true;
        }
      }
      break;
    default:
      etatPompe = false;
  }

  //si l'état de la pompe à changer, on signale au controleur zwave et on met à jour l'affichage LCD
  if(etatPompe != etatPompePrec){
    zunoSendReport(1);
    Serial.print("Passage de la pompe : "); Serial.println(etatPompe);
    
    lcd.setCursor (6, 3);
    if(etatPompe ==  false){
      lcd.print("OFF");
    }
    else {
      lcd.print("ON ");      
    }
  }

  //si le mode à changer, on signale au controleur zwave
  if(modePompe != modePompePrec){
    zunoSendReport(2);
    Serial.print("Passage en mode : "); Serial.println(modePompe);

    lcd.setCursor (5, 2);
    switch(modePompe){
      case 0:
        lcd.print("ARRET ");
        break;
      case 1:
        lcd.print("MARCHE");
        break;
      case 2:
        lcd.print("AUTO  ");
        break;
    }
  }  

  //si le mode hors gel à changer, on signale au controleur zwave
  if(fctGel != fctGelPrec){
    zunoSendReport(4);
    Serial.print("hors gel : "); Serial.println(fctGel);    
  }
  
  //Memorise l'état des entrées
  pinHorairePrec = pinHoraire;
  modePompePrec = modePompe;
}

/****************************************************************************
 * FONCTION : regule le chlore de la piscine
 *  sans objet
 ****************************************************************************/
void FctProdChlore(){
    bool etatChloreProdPrec;

    etatChloreProdPrec = etatChloreProd;
    // si le niveau de chlore est trop bas, 
    // ET la pompe fonctionne 
    // ET la température de l'eau est supérieur à 15°C
    // => on demarre la production de chlore
    if((valORP < ORP_MIN) && (etatPompe) && (TemperatureEau > 15.0)){
      etatChloreProd = true;
    }
    // si le niveau de chlore est trop haut
    // OU la pompe ne fonctionne pas 
    // OU la température de l'eau est inférieur à 15°C
    // => on arrete la production de chlore
    if((valORP > ORP_MAX)||(!etatPompe) || ((TemperatureEau < 15.0))){
      etatChloreProd = false;      
    }

    //si le etat de la production de chlore a changé, on signale au controleur zwave et on met à jour l'affichage LCD
    if(etatChloreProd != etatChloreProdPrec){
      zunoSendReport(9);
      Serial.print("Electrolyseur: "); Serial.println(etatChloreProd);    
      
      lcd.setCursor (17, 3);
      if(etatChloreProd ==  false){
        lcd.print("OFF");
      }
      else {
        lcd.print("ON ");      
      }
    }
  
}

/****************************************************************************
 * FONCTION : lit les entrées et les stock dans des variables
 *  sans objet
 ****************************************************************************/
void lectureEntrees(){
  bool modeAuto;
  bool modeManu;
  
  pinHoraire = !digitalRead(PIN_HORAIRE);
  modeManu = !digitalRead(PIN_MODE_MANU);
  modeAuto = !digitalRead(PIN_MODE_AUTO);
  modePompe = (byte)((modeAuto <<1)|(modeManu));

  //si la demande horaire a changé
  if(pinHoraire != pinHorairePrec){
      zunoSendReport(3); 
  }

}

/****************************************************************************
 * FONCTION : lit la sonde ORP/Redox
 *  sans objet
 ****************************************************************************/
void lectureORP(){
    float value;
    
    value = (float)analogRead(PIN_ORP)*VOLT_REFERENCE;
    value = value / 1024 * 5.5 / 3.3;
    valORP = (2.5-value)*1000/1.037;

    Serial.print("ORP: ");Serial.println(valORP);
    
    lcd.setCursor (6, 1);
    lcd.print(valORP);
    zunoSendReport(7);

}

/****************************************************************************
 * FONCTION : lit lit la sonde PH
 *  sans objet
 ****************************************************************************/
void lecturePH(){
    float value;
    
    value = (float)analogRead(PIN_PH)*VOLT_REFERENCE;
    value = value / 1024 * 5.5 / 3.3;
    valPH = 7-((2.5-value)/(0.257179+0.000941468*TemperatureEau));

    Serial.print("PH: ");Serial.println(valPH);
    
    lcd.setCursor (16, 1);
    lcd.print(valPH,1);
    zunoSendReport(8);
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : POMPE
 ******************************************/
void setPompe(byte value) {
  if((modePompe == 2) && (!fctGel)){
    
    if (value > 0) {               // if greater then zero
      etatPompe = true;
    } 
    else {                         // if equals zero
      etatPompe = false;
    }
  }
}

byte getPompe() {
  return (byte)etatPompe;
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : MODE
 ******************************************/
byte getMode() {
  return (modePompe);
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : DEMANDE HORAIRE
 ******************************************/
byte getHoraire() {
  return (byte)pinHoraire;
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : MODE ANTIGEL
 ******************************************/
byte getGel() {
  return (byte)fctGel;
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : TEMPERATURE LOCAL
 ******************************************/
int getTempLocal(){
  return (TemperatureLoc*10);
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : TEMPERATURE EAU
 ******************************************/
int getTempEau(){
  return (TemperatureEau*10);
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : ORP/REDOX
 ******************************************/
int getORP(){
  return (valORP);
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : PH
 ******************************************/
int getPH(){
  return (int)(valPH*10);
}

/******************************************
 * FONCTIONS CANAUX ZWAVE : CHLORE PRODUCTION
 ******************************************/
byte getChloreProd(){
  return (byte)(etatChloreProd);
}
2) J'ai créé les commandes en fonction de tes copies d'écrans, car pour être honnête, je ne comprends pas du tout la relation entre les champs 'Instance, Classe, Index' dans Jeedom et les liens dans ton programme.
Par exemple, il manque la commande du 'MODE' dans tes copies d'écrans ... je voulais faire le grand et l'ajouter mais je ne comprends pas.

3) Les affichages dans la tuile, comment as-tu mis le symbole style 'cercle/recyclage' pour la pompe? Moi Jeedom ne me présente pas ce symbole et je ne le trouve pas dans le market.
Aussi pour l'affichage 'Hors-Gel, Electrolyse', ce sont des retour binaire ... comment as-tu affiché ON ou OFF ou encore AUTO?
Tuile.jpg
Tuile.jpg (18.6 Kio) Consulté 412 fois
(Elle est moche ma tuile ... :-) )

Merci pour ton support!

Sébastien

artpol
Timide
Messages : 125
Inscription : 01 janv. 2017, 20:31

Re: DIY, une sonde de Chlore pour piscine

Message par artpol » 11 juin 2018, 22:02

n.granier a écrit :
02 avr. 2018, 11:30
Oui, je suis un FAN d'ESP, le problème c'est d'avoir une entrée analogique 0-5V, l'ESP c'est 0-3V.
Ensuite le local technique est trop loin de la box, donc solution : ethernet +CPL (je n'aime pas les répéteurs WIFI...)
Adaptateur ORP 1130 de phidgets
Sonde Redox https://fr.aliexpress.com/item/ORP-oxid ... 0.0.dQu0ei

La sonde ORP genere un signal -2V / +2V
L'adaptateur le transforme en 0/5V.
Pour avoir l'ORP il faut :
ORP (V)=(2.5−Voltage)/1.037
Ensuite je fais la convention ORP vers Cl (j'ai une regulation PH donc toujours à 7.4)

ORPfreeclORPvpH.jpg
bonjour,

Quelle est la relation entre ta formule ORP (V)=(2.5−Voltage)/1.037 et le tableau ?

ci-dessous ma tuile, je voudrai obtenir comme toi le CL masi tu passe par quelle formule ?

[img][
Capture.PNG
Capture.PNG (73.48 Kio) Consulté 401 fois
/img]

coco38
Timide
Messages : 31
Inscription : 16 mai 2016, 00:00
Localisation : région toulousaine

Re: DIY, une sonde de Chlore pour piscine

Message par coco38 » 12 juin 2018, 10:10

Bonjour,

Il y a beaucoup de questions, je vais essayer d'y répondre à toute rapidement:
  1. Effectivement, il n'y a pas les affectations des relais et des capteurs sur le Carte_Design.jpg, donc il faut regarder dans le programme, j'essaierai de renvoyer un image avec des commentaires.
  • La carte est alimentée par un alimentation AC/DC 5V de 7.5W (mais 5W suffisent amplement). Perso, j'ai acheté une TDK-Lambda DSP10-5, mais d'autres références feront l'affaire. Elle est visible dans mon coffret (sous les fils :oops: ).
  • Le câblage des sondes de température (1-Wire) ou des mesures de Ph ou ORP/Redox, se font sur 3 fils : Vcc, GND et mesure. Il faut regarder les photos pour voir le cablage. Pour aider, le code couleur des fils sur ma carte est:
    • Rouge : 5V
    • Oronge : 3V/3.3V
    • Noir : GND
    • Blanc : entrée TOR
    • Gris : Sortie TOR
    • Jaune : Entrée analogique
  • Les paramètres sont bien "en dur", donc le programme. La modification des paramètres dans Jeedom est une amélioration à faire, mais nécessite un peu de temps, que je n'ai malheureusement pas...
  • Je n'ai toujours pas ma sonde ORP/Redox, mais sa plage de fonctionnement est -2V/+2V, donc sans sonde et avec des perturbations, j'ai une valeur.
  • Sous Jeedom, pour les ON/OFF et le MODE, ce sont des widget que j'ai fait. Je pense qu'il y a moyen d'en trouver d'autres, sinon je mettrai le code à temps perdu. Pour la pompe (recyclage) et la lumière, ce sont des widget que j'ai trouvé dans le market.
artpol a écrit :
11 juin 2018, 22:02
Quelle est la relation entre ta formule ORP (V)=(2.5−Voltage)/1.037 et le tableau ?

ci-dessous ma tuile, je voudrai obtenir comme toi le CL masi tu passe par quelle formule ?
ORP et Redox sont la même chose. Si tu veux la formule, tu peux chercher dans la doc des Phidgets Ph/ORP 1130, ou dans le blog cité ci-dessus.

Jérôme

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 12 juin 2018, 12:35

Merci Jérôme pour tes réponses!

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 13 juin 2018, 19:36

Salut!

Jérôme, désolé de t'embêter encore mais il me semble qu'une de mes questions n'a pas eu de réponse et comme je souhaite pleinement comprendre comment tout fonctionne, pourrais-tu svp répondre à ceci (c'était ma question 2 :-) ):
J'ai créé les commandes en fonction de tes copies d'écrans, car pour être honnête, je ne comprends pas du tout la relation entre les champs 'Instance, Classe, Index' dans Jeedom et les liens dans ton programme.
Par exemple, il manque la commande du 'MODE' dans tes copies d'écrans ... je voulais faire le grand et l'ajouter mais je ne comprends pas.
Je viens de recevoir mes premières pièces de Chine ...
IMG_6977.JPG
IMG_6977.JPG (405.12 Kio) Consulté 354 fois
Sniff, je ne peux pas tester la sonde car il me manque les résistances ... bahhhh :mrgreen:

Merci,

Sébastien

artpol
Timide
Messages : 125
Inscription : 01 janv. 2017, 20:31

Re: DIY, une sonde de Chlore pour piscine

Message par artpol » 15 juin 2018, 04:19

qu'est ce que vous conseillez pour l'alimentation ? Le jack 2.1mm en 5,7,9 voir 12V ? par la prise USB ?

Je vous pose cette question car j’obtiens des valeurs et stabilités différentes selon la source
redox.PNG
redox.PNG (120.78 Kio) Consulté 337 fois

Almy
Timide
Messages : 343
Inscription : 23 juin 2015, 23:43

Re: DIY, une sonde de Chlore pour piscine

Message par Almy » 15 juin 2018, 15:01

Je pensais partir sur un 9V sur jack 2.1mm mais visiblement j'ai une incompatibilité avec le shield. Il ne transmet plus les data.
En revanche pas de pb avec l'USB sur prise 5V 2A (type chargeur ipad).

Donc USB
Débutant Bordelais motivé sans compétences en info et élec mais prêt a relever le défit de la domotique.

MERCI À VOUS TOUS (JEEDOM et forum) pour votre aide sans laquelle je ne serais pas là où j'en suis.

coco38
Timide
Messages : 31
Inscription : 16 mai 2016, 00:00
Localisation : région toulousaine

Re: DIY, une sonde de Chlore pour piscine

Message par coco38 » 16 juin 2018, 21:55

Sattaz a écrit :
13 juin 2018, 19:36

Par exemple, il manque la commande du 'MODE' dans tes copies d'écrans ... je voulais faire le grand et l'ajouter mais je ne comprends pas.
Pour le Mode, j'ai :
  • Instance : 1
  • Class : 49
  • Index : 2
Pour info, le 0 correspond à l'arret, 1 à marche forcée et 2 à Auto (fonctionnement horaire)

Par contre, je ne sais pas si ce sera les mêmes valeurs chez toi (a part la Class). Si ce n'est pas le cas, il faut cliquer sur le module dans Jeedom (page Zwave), puis cliquer sur "Configuration", aller sur l'onglet "valeurs". Dans cette page il y a toutes les informations remontées.

Jérôme

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 17 juin 2018, 15:42

Merci Jérôme pour tes réponses.
En gros l'attribution des instances c'est du piff .. l'index représente la valeur mesurée.
OK, donc une fois le circuit réalisé, je vais identifier les 'valeurs' en fonction de ce qui est transmit par le programme.
J'attends toujours mes composant de Chine ... (j'ai la sonde PH et ORP!)

Merci,

Sébastien

coco38
Timide
Messages : 31
Inscription : 16 mai 2016, 00:00
Localisation : région toulousaine

Re: DIY, une sonde de Chlore pour piscine

Message par coco38 » 17 juin 2018, 18:07

Euh non, les instances et les index c'est pas au "piff". Seulement, je ne suis pas sûr que tu auras les mêmes valeurs après l'inclusion (à voir).
Si c'est pareil, tant mieux. Sinon, il faudra faire bouger les valeurs pour savoir qui correspond à quoi...

Jérôme

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 21 juin 2018, 22:03

coco38 a écrit :
17 juin 2018, 18:07
Euh non, les instances et les index c'est pas au "piff". Seulement, je ne suis pas sûr que tu auras les mêmes valeurs après l'inclusion (à voir).
Si c'est pareil, tant mieux. Sinon, il faudra faire bouger les valeurs pour savoir qui correspond à quoi...

Jérôme
Merci Jérôme!

J'ai eu du matériel de Chine, j'ai pu commencer mes tests ... et bien évidement j'ai quelques problèmes et je sollicite à nouveau ton aide :roll:

J'ai pris pas mal de temps à comprendre comment résoudre un premier problème: rien ne s'affichait sur l'écran LCD!
En fait, dans ton code tu écris ceci:

Code : Tout sélectionner

LiquidCrystal_I2C lcd(0x27, 20, 4);
Manque de bol, mon écran n'a pas la même adresse ... et j'ai pas compris tout de suite ...
J'ai modifié avec la bonne adresse et hop j'ai eu un affichage!

Code : Tout sélectionner

LiquidCrystal_I2C lcd(0x3F, 20, 4);
Là j'étais déjà bien content car après avoir connecté une sonde de température j'ai vu la valeur s'afficher sur le LCD, génial!

Ensuite je me suis empressé de connecter mes adaptateur ORP/PH ainsi que les sondes.
J'ai bien fait attention de positionner le petit interrupteur de l'adaptateur sur PH ou ORP en fonction de la sonde connectée.
J'ai juste commenté un bout de code pour forcer la lecture des sondes si la pompe est à l'arrêt.
Mais en mettant sous tension, j'ai eu des valeurs complètement fausses ...
IMG_6990.JPG
IMG_6990.JPG (139.65 Kio) Consulté 246 fois
- Faut-il faire des réglages / étalonnage? comment?
- La résistance entre le fil de l'entrée analogique de la sonde et la borne A0 ou A1 c'est bien 2.2K ohm correct?

Une fois ce problème réglé, je pense que je pourrais me débrouiller :-)

Ma bricole de la soirée:
IMG_6991.JPG
IMG_6991.JPG (353.01 Kio) Consulté 246 fois
Merci !

Sébastien

Lalsacien
Timide
Messages : 15
Inscription : 26 avr. 2018, 16:57
Localisation : Strasbourg (67)

Re: DIY, une sonde de Chlore pour piscine

Message par Lalsacien » 22 juin 2018, 11:37

Bonjour,

Bravo pour cette réalisation ! Je vais suivre avec attention votre montage étant fortement intéressé.
Je vais commandé du matériel :)

Lalsacien

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 23 juin 2018, 17:10

Salut,

En fait j'avais oublié de mettre la résistance de 3,3K Ohms et là le Ph semble donner des valeur plus juste ...
J'ai en effet 5,45 de Ph mesuré dans un verre d'eau ... il reste toujours à étalonner mais je ne sais pas comment faire.

Aussi pour l'ORP, je n'arrive pas à obtenir des bonnes valeurs ... maintenant que j'ai rajouté la résistance de 3,3K Ohms, j'ai des valeurs mesurées de 50000!!!
J'ai acheté la sonde ORP qui est donné en lien sur la première page de ce topic par monsieur Granier ... mais la mienne est de couleur jaune/orange et ne ressemble donc pas à celle qu'il a mis en photo.
Je ne sais plus quoi faire, HELP !

J'apprécierai un peu d'aide, je suis presque au bout.

Merci,

Sébastien

coco38
Timide
Messages : 31
Inscription : 16 mai 2016, 00:00
Localisation : région toulousaine

Re: DIY, une sonde de Chlore pour piscine

Message par coco38 » 25 juin 2018, 11:11

Salut,

Désolé, mais je suis pas mal occupé ces derniers jours et je fait aussi la mise aux points du système à temps perdu.

Pour les ponts diviseurs, sur les mesures Redox et Ph, il faut mettre la résistance de 3.3k et 2.2k en série, avec:
  • la resistance 3.3k entre le GND et l'entrée A0 ou A1
  • la resistance 2.2k entre la mesure issue du Phidget 1130 (fil blanc) et l'entrée A0 ou A1
Il semble qu'il y ait effectivement un décalage sur les mesures. L'idéal serait d'avoir des solutions tampons (Ph=7 ou Redox=650mV), mais c'est pas forcement donné. Perso j'ai un régulateur de Ph qui me donne une valeur, et pour le Redox, je vais jouer avec des solutions de test pour me caler dans la plage quand ma piscine sera bien "chlorée". C'est un peu longué, surtout que la cellule de l'électrolyseur est quasi morte... :(

Pour corriger le décalage, j'ai ajouté 2 potentiomètres sur les entrées A2 et A3, et j'ai ajouté un peu de code. Désormais on peut recaler les mesures juste en tournant les potentiomètres. Par contre, tu devrais avoir des valeurs entre 300mV et 1000mV. Le mieux est de faire un test sans sonde, tu dois avoir 0.

Comme l'avait spécifié n.granier, lors du montage en réel sur l'automatisme de la piscine, il faut mettre le GND sur la terre de la piscine (obligatoire avec les électrolyseurs). Ce n'est pas très "règles de l'art", mais ça permet de stabiliser des mesures (variations de 150mV sinon).

Jérôme

Sattaz
Timide
Messages : 110
Inscription : 22 nov. 2015, 20:34

Re: DIY, une sonde de Chlore pour piscine

Message par Sattaz » 25 juin 2018, 11:37

Merci pour tes réponses Jérôme!

Peux-tu mettre à jour ton Git avec les changements que tu as ajoutés?
N'oublie pas de mettre les références des potentiomètres aussi :-)

Je suis en déplacement là, je ne reviens que la semaine prochaine, donc je ne t'embêterai pas avant, ha :-)

Merci beaucoup pour ton support!

Sébastien

Répondre

Revenir vers « Do-It-Yourself ("Faire-soi-même") »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité