DIY, une sonde de Chlore pour piscine
Re: DIY, une sonde de Chlore pour piscine
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
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
Re: DIY, une sonde de Chlore pour piscine
Ok pour le code ce week-endcoco38 a écrit : ↑07 juin 2018, 17:09Sattaz,
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
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: C'est normal?
Sébastien
Sébastien
Re: DIY, une sonde de Chlore pour piscine
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
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
Sébastien
Re: DIY, une sonde de Chlore pour piscine
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
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
Re: DIY, une sonde de Chlore pour piscine
Non, la librairie LCD n'existe pas par défaut ... j'ai maintenant chargé la tienne, tout baigne!coco38 a écrit : ↑11 juin 2018, 10:00Salut,
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
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
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
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
Sébastien
Re: DIY, une sonde de Chlore pour piscine
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?
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? (Elle est moche ma tuile ... )
Merci pour ton support!
Sébastien
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);
}
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? (Elle est moche ma tuile ... )
Merci pour ton support!
Sébastien
Sébastien
Re: DIY, une sonde de Chlore pour piscine
bonjour,n.granier a écrit : ↑02 avr. 2018, 11:30Oui, 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
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][ /img]
Re: DIY, une sonde de Chlore pour piscine
Bonjour,
Il y a beaucoup de questions, je vais essayer d'y répondre à toute rapidement:
Jérôme
Il y a beaucoup de questions, je vais essayer d'y répondre à toute rapidement:
- 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 ).
- 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...
- Pour faire au plus simple, j'utilise l'horloge que j'ai sur mon coffret. Sinon il faut s'inspirer du blog http://clement.storck.me/blog/2014/08/c ... a-piscine/, qui ajuste le temps de fonctionnement de la pompe automatiquement.
- 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.
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
Re: DIY, une sonde de Chlore pour piscine
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 ):
Merci,
Sébastien
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 ):
Je viens de recevoir mes premières pièces de Chine ... Sniff, je ne peux pas tester la sonde car il me manque les résistances ... bahhhhJ'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.
Merci,
Sébastien
Sébastien
Re: DIY, une sonde de Chlore pour piscine
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
Je vous pose cette question car j’obtiens des valeurs et stabilités différentes selon la source
Re: DIY, une sonde de Chlore pour piscine
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
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éfi de la domotique.
MERCI À VOUS TOUS (JEEDOM et forum) pour votre aide sans laquelle je ne serais pas là où j'en suis.
MERCI À VOUS TOUS (JEEDOM et forum) pour votre aide sans laquelle je ne serais pas là où j'en suis.
Re: DIY, une sonde de Chlore pour piscine
Pour le Mode, j'ai :
- Instance : 1
- Class : 49
- Index : 2
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
Re: DIY, une sonde de Chlore pour piscine
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
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
Sébastien
Re: DIY, une sonde de Chlore pour piscine
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
Si c'est pareil, tant mieux. Sinon, il faudra faire bouger les valeurs pour savoir qui correspond à quoi...
Jérôme
Re: DIY, une sonde de Chlore pour piscine
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
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);
J'ai modifié avec la bonne adresse et hop j'ai eu un affichage!
Code : Tout sélectionner
LiquidCrystal_I2C lcd(0x3F, 20, 4);
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 ...
- 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:
Merci !
Sébastien
Sébastien
Re: DIY, une sonde de Chlore pour piscine
Bonjour,
Bravo pour cette réalisation ! Je vais suivre avec attention votre montage étant fortement intéressé.
Je vais commandé du matériel
Lalsacien
Bravo pour cette réalisation ! Je vais suivre avec attention votre montage étant fortement intéressé.
Je vais commandé du matériel
Lalsacien
Re: DIY, une sonde de Chlore pour piscine
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
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
Sébastien
Re: DIY, une sonde de Chlore pour piscine
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:
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
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
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
Re: DIY, une sonde de Chlore pour piscine
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
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
Sébastien
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités