domotisation cuve 1000L

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

domotisation cuve 1000L

Message par dd91 » 19 sept. 2018, 12:53

Bonjour a tous

Voila j'ai commencé a domotiser ma cuve de 1000L, dans l’idée c'est de pouvoir connaitre la hauteur d'eau a distance et aussi la température de l'eau

niveau bricolage pas de soucis pour moi j'ai fait la partie matérielle que je vais vous partager ici en revanche je n'y connais rien a la programmation (c'est bien dommage car je suis vite bloqué et c'est la que je vais avoir besoins de vous).

donc on commence par une présentation de l'installation fini
20180911_175913.jpg
20180911_175913.jpg (82.18 Kio) Vu 2482 fois
20180911_173843.jpg
20180911_173843.jpg (181.38 Kio) Vu 2482 fois
20180911_163608.jpg
20180911_163608.jpg (138.07 Kio) Vu 2482 fois
Le système de récupération d'eau au niveau du bouchon de cuve avec filtre et vanne hors gel (petite précision sur les gouttière il y a déjà une grille anti feuille et une crapaudine dans le manchon de récupération soit 3 niveau de filtration).
Le tuyau qui monte c'est le système d’évacuation de l'air pour que se remplisse correctement.
20180911_163638.jpg
20180911_163638.jpg (46.59 Kio) Vu 2482 fois
maintenant la partie invisible du projet

j'ai utilisé des Té de plomberie avec du tube de 40 pour faire les jonctions et des bouchons de plomberie l'ensemble collé est espacé de 9cm ce qui est environ la graduation de ma cuve
20180511_142529.jpg
20180511_142529.jpg (69.78 Kio) Vu 2482 fois
20180511_144922.jpg
20180511_144922.jpg (164.04 Kio) Vu 2482 fois
Ensuite on installe les capteurs a 90° dans chaque bouchon, j'ai du limer les écrous car il ne passait pas et j'ai fini par siliconer le contour pour éviter les fuites
20180522_161543.jpg
20180522_161543.jpg (54.15 Kio) Vu 2482 fois
20180522_170807.jpg
20180522_170807.jpg (52.82 Kio) Vu 2482 fois
thumbnail_20180522_173021.jpg
thumbnail_20180522_173021.jpg (37.59 Kio) Vu 2482 fois
Ensuite le câblage de chaque capteur qui correspond à une fiche du DB15 et bien sur une broche commune

j'ai rajouté aussi (on ne le voit pas sur la photo) une sonde de température étanche dsb15 qui descend dans le tube en pvc pour connaitre la température approximative de l'eau
20180608_190536.jpg
20180608_190536.jpg (148.53 Kio) Vu 2482 fois
20180608_233026.jpg
20180608_233026.jpg (80.2 Kio) Vu 2482 fois
voila le montage fini prêt a rentrer dans la cuve, pour le réglage des capteurs j'ai scotcher un pointeur laser sur l'un des capteurs et j'ai réglé par rapport au graduation de la cuve (toujours de l’approximatif)
20180608_190121.jpg
20180608_190121.jpg (83.99 Kio) Vu 2482 fois
20180608_190133.jpg
20180608_190133.jpg (325.41 Kio) Vu 2482 fois
voila pour la présentation matériel, maintenant c'est la ou je vais avoir besoin de vous je souhaiterai modifier un capteur existant (capteur sonore de manière à gérer la hauteur style 1 capteur = 10% et une sécurité si l'un des capteurs est hs que l'on est l'affichage du suivant quand même (exemple le capteur 20% ne fonctionne pas on affichera toujours 10% mais quand le troisième monte on aura bien les 30%)

je pense que ça ne doit pas être bien complexe de modifier ce capteur https://www.mysensors.org/build/distance si défois il y a quelqu'un qui s'y connais :)

merci à tous par avance

DD91

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


domdom
Messages : 62
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: domotisation cuve 1000L

Message par domdom » 20 sept. 2018, 08:51

Bonjour,

Impressionnant ton installation !

Je dois pouvoir t'aider, mais peux-tu préciser la référence de la sonde de température (dsb15, je ne connais pas) ?

Pour ta mesure de niveau d'eau, je ne suis pas sûr d'avoir compris comment fonctionnent tes capteurs. Tu as 10 capteurs tout ou rien reliés à 10 entrées de ton arduino, c'est bien ça ?

Bonne journée

Le ptit Nicolas
Messages : 89
Enregistré le : 24 janv. 2017, 14:21
Localisation : 31
Contact :

Re: domotisation cuve 1000L

Message par Le ptit Nicolas » 20 sept. 2018, 09:23

Whaoouu, sacrée installation !

Je ne veux pas te décevoir, mais ca n'aurait pas été plus simple avec un capteur de distance à ultrason : JSN-SR04T
J'ai le même besoin que toi pour une citerne d'eau enterrée

Quelques pistes :
Sonde de mesure de cuve d’eau de pluie à base d’ESP8266
capteur de niveau d'eau
Niveau cuve a fioul

J'ai commencé un prototype avec easyesp sur un Wermos + JSN-SR04T. Il reste encore des Pins de libre sur le Wemos pour rajouter des capteurs (comme une sonde de température étanche DS18B20). L'ensemble de ces capteurs sont déjà définis dans Easyesp.
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Les Shadocks

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 20 sept. 2018, 12:28

bonjour a vous deux

effectivement c'est une installation faite comme je le souhaitait, mais peut être pas parfaite non plus :)

le ptit nicolas effectivement un capteur a ultrason aurait été plus simple mais je ne suis pas un grand fan et ca demande quand même des réglage et ce n'est pas forcement étanche comme système les capteurs reste quand même un système fiable (pour mon avis perso).

domdom effectivement dsb15 n'existe pas (j'avais essayé de me rappelé de tête mais ce n'est pas ça) c'est plutôt ce capteur https://www.ebay.fr/itm/Capteur-De-Temp ... 51edf4b744

pour le branchement des capteurs on as une borne commune a tous et 10 arrivées sur une arduino

bonne journée a vous

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


domdom
Messages : 62
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: domotisation cuve 1000L

Message par domdom » 20 sept. 2018, 15:11

Bonjour,

La mesure par ultrason est en effet une excellente idée, mais j'ai également un peu peur de l'humidité sur ce type de capteur.

Quoiqu'il en soit, maintenant que tu as câblé tes capteurs, ce serait dommage de s'arrêter là.

Tu trouveras ci-dessous le code pour la solution que tu demandes. J'ai écrit ça comme ça dans un éditeur de texte, je n'ai rien sous la main pour vérifier que le code compile, à toi de tester, corriger les éventuelles fautes de frappes et valider.

Pour la partie ds18b20, j'ai recopié le code trouvé ici : https://www.mysensors.org/build/temp
Tu peux connecter l'alimentation du ds18b20 directement au VCC de ton montage, ou à une broche de l'arduino pour économiser la batterie de ton montage (dans ce cas, le ds18b20 n'est alimenté que lorsqu'il est utilisé)

Si je peux me permettre une remarque personnelle, je n'aime pas mettre trop d'intelligence dans mes cartes mysensors. Qui dit intelligence dit bugs, qui dit bugs dit mise à jour, et qui dit mise à jour dit galère pour accéder au capteur qui est généralement installé dans un endroit pas toujours très accessible.Du coup, à ta place, pour le niveau d'eau, j'aurais tendance à remonter une valeur codée sur 10 bits, avec un bit pour chaque entrée. Et je ferais le décodage dans un script domoticz, ce qui est plus facile car la mise au point se fait sur un programme que tu peux modifier aisément, et tu peut également ainsi détecter, toujours au niveau domoticz, qu'un capteur est HS.
J'ai codé cette possibilité dans le code mesurerNiveauEauSimple();

Avant de tester le code, il faut que tu modifies ou vérifies :
- les valeurs des différents define BROCHE_xxxxx en fonction de ton câblage.
- la valeur du define ETAT_CAPTEUR_AU_REPOS

Bon courage

domdom

Code : Tout sélectionner

#define MY_DEBUG 
#define MY_DEBUG_VERBOSE_SIGNING 
#define MY_NODE_LOCK_FEATURE 

// Enable and select radio type attached
#define MY_RADIO_NRF24 
//#define MY_RADIO_NRF5_ESB 
//#define MY_RADIO_RFM69 
//#define MY_RADIO_RFM95 

#include <MySensors.h>
#include <OneWire.h> 
#include <DallasTemperature.h> 



/************* Definitions liées à la fonction mysensors ***********************************/
#define DUREE_VEILLE_EN_SECONDES	3600

#define TEMPERATURE_CHILD_ID		1
#define NIVEAU_CHILD_ID			2

MyMessage msg_niveau(NIVEAU_CHILD_ID, V_VOLUME);		
MyMessage msg_temperature(TEMPERATURE_CHILD_ID, V_TEMP);


/************* Definitions liées à la fonction mesure de température ***********************************/
#define BROCHE_BUS_ONE_WIRE		12		// broche sur laquelle la broche data du DS18b20 est connectée sur l'arduino
#define BROCHE_ALIMENTATION_ONE_WIRE	13		// broche sur laquelle la broche VCC du DS18b20 est connectée sur l'arduino
#define MAX_ATTACHED_DS18B20 	1

OneWire oneWire(BROCHE_BUS_ONE_WIRE); 	
DallasTemperature sensors(&oneWire); 


/************* Definitions liées à la fonction mesure de niveau d'eau ***********************************/
#define BROCHE_NIVEAU_0		1			// broche sur laquelle le capteur le plus bas est connecté sur l'arduino
#define BROCHE_NIVEAU_1		4
#define BROCHE_NIVEAU_2		3
#define BROCHE_NIVEAU_3		7
#define BROCHE_NIVEAU_4		5
#define BROCHE_NIVEAU_5		6
#define BROCHE_NIVEAU_6		2
#define BROCHE_NIVEAU_7		8
#define BROCHE_NIVEAU_8		9
#define BROCHE_NIVEAU_9		10			// broche sur laquelle le capteur le plus haut est connecté sur l'arduino


unsigned char entreesNiveauEau[] = {			// tableau contenant la liste des entrées des capteurs de niveau
	BROCHE_NIVEAU_0, 
	BROCHE_NIVEAU_1, 
	BROCHE_NIVEAU_2, 
	BROCHE_NIVEAU_3, 
	BROCHE_NIVEAU_4, 
	BROCHE_NIVEAU_5, 
	BROCHE_NIVEAU_6, 
	BROCHE_NIVEAU_7, 
	BROCHE_NIVEAU_8, 
	BROCHE_NIVEAU_9 
};

#define ETAT_CAPTEUR_AU_REPOS		HIGH		// niveau logique sur la broche reliée au capteur de niveau lorsque celui-ci ne détecte pas d'eau



unsigned char mesurerNiveauEau() {
	unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
	unsigned char niveau = 0;

	for (int i=0; i<nbEntrees; i++) {								// pour chaque capteur
		if (digitalRead(entreesNiveauEau|i]) == ETAT_CAPTEUR_AU_REPOS) {			// si le capteur ne détecte pas d'eau
			if (i < (nbEntrees + 1)) {							// si on n'est pas sur le dernier capteur
				if (digitalRead(entreesNiveauEau|i]) == ETAT_CAPTEUR_AU_REPOS) {	// si le capteur suivant ne détecte pas d'eau
					break;								// on sort de la boucle if
				}
			}
		}
		niveau++;
	}
	return niveau;
}


unsigned char mesurerNiveauEauSimple() {
	unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);
	unsigned char niveau = 0;

	for (int i=0; i<nbEntrees; i++) {								// pour chaque capteur
		niveau = niveau * 2;									// décalage bit à bit de un bit vers la gauche
		if (digitalRead(entreesNiveauEau|i]) != ETAT_CAPTEUR_AU_REPOS) {			// si le capteur ne détecte pas d'eau
			niveau = niveau+1;								// positionne le bit le plus à droite à 1
		}
	}
	return niveau;
}



void setup(void){

  // configuration liée à la mesure de température
 DeviceAddress sensorDeviceAddress; 	

pinMode(BROCHE_ALIMENTATION_ONE_WIRE, OUTPUT);								// configure la broche en sortie pour pouvoir alimenter le ds18b20
  digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, HIGH);        						// alimente le ds18b20
  sleep(100);												// attend 100ms pour permettre au ds18b20 de démarrer tranquillement (temps mis au pif, en cas de problème, vérifier dans le datasheet)

 sensors.begin(); 											// Activation des capteurs
 sensors.getAddress(sensorDeviceAddress, 0); 								// Récupère l'adresse du premier capteur du bus
 sensors.setResolution(sensorDeviceAddress, 12); 							// Configure la résoluton de la mesure 

  // configuration liée à la mesure de niveau 
	unsigned char nbEntrees = sizeof(entreesNiveauEau) / sizeof(entreesNiveauEau[0]);

	for (int i=0; i<nbEntrees; i++) {								// pour chaque capteur
		pinMode(entreesNiveauEau|i],  INPUT_PULLUP);						// configure la broche en entrée avec un pullup

	}
}



void presentation()
{
    // Emission du nom du module
    sendSketchInfo("Etat de la cuve d'eau", "1.0");

    // Presentation des fonctions
     present(CHILD_ID, S_WATER, "Niveau d'eau");
     present(CHILD_ID, S_TEMP, "Température d'eau");

}


void loop(void){

 float temperature;

  digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, HIGH);        						// alimente le ds18b20
  sleep(100);												// attend 100ms pour permettre au ds18b20 de démarrer tranquillement (temps mis au pif, en cas de problème, vérifier dans le datasheet)

 sensors.requestTemperatures(); 									// Déclenche la lecture des capteurs 1wire
 temperature = sensors.getTempCByIndex(0);								// Récupère la température en celsius du premier capteur
 Serial.print("La température est: ");									// Affichage dans la liaison de debug
 Serial.print(temperature); 								
 Serial.println(" C°");
 send(msg_niveau.set(temperature);									// envoi de la valeur sur le résuea mysensors


 unsigned char niveauEau = mesurerNiveauEau();								// récupère le niveau d'eau
 Serial.print("Le niveau est : ");					
 Serial.print(niveauEau); 	
 Serial.println(" C°");
 send(msg_niveau.set(niveauEau);

  digitalWrite(BROCHE_ALIMENTATION_ONE_WIRE, LOW);        						// coupe l'alimentation du ds18b20 pour économiser la batterie
 Sleep(DUREE_VEILLE_EN_SECONDES * 1000);


}

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 21 sept. 2018, 09:02

bonjour

et ben dit donc je suis assez impressionné il m'aurait fallu 10 ans pour faire un code pareil :)

je vais tester le programme sur une arduino. pour les capteurs c'est un off au repos et il passe a 1 lorsque il est monté donc il faut remplacer high par low non?

je tete et je te tiens au courant

merci en tout cas

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 21 sept. 2018, 09:13

je me retrouve avec ce type d'erreur:

Arduino : 1.6.12 (Windows 7), Carte : "Arduino/Genuino Uno"

ATTENTION : Faux .ci dossier dans la bibliothèque 'MySensors'
ATTENTION : Faux .mystools dossier dans la bibliothèque 'MySensors'
C:\Users\Mon dossier\Documents\Arduino\capteur_cuve\capteur_cuve.ino:12:22: fatal error: OneWire.h: No such file or directory

#include <OneWire.h>

^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 21 sept. 2018, 09:16

j'ai supprimer le mysensor master que j'avais télécharger car meme les capteurs standard avait des erreurs de compilation et ca me donne ca

Arduino : 1.6.12 (Windows 7), Carte : "Arduino/Genuino Uno"

Le nom du croquis doit être changé. Les noms de croquis doivent consister
de caractères ASCII et de chiffres (mais ne peuvent commencer par un chiffre).
Ils doivent aussi être plus courts que 64 caractères.

C:\Users\moi~1\AppData\Local\Temp\arduino_modified_sketch_589106\cuve_capteur.ino:11:23: fatal error: MySensors.h: No such file or directory

#include <MySensors.h>

^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

domdom
Messages : 62
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: domotisation cuve 1000L

Message par domdom » 21 sept. 2018, 09:41

Il faut que tu installes la librairie OneWire que tu peux trouver ici : https://github.com/PaulStoffregen/OneWire

En effet, il faut que tu mettes ETAT_CAPTEUR_AU_REPOS à LOW.

dd91
Messages : 96
Enregistré le : 18 nov. 2014, 13:06

Re: domotisation cuve 1000L

Message par dd91 » 22 sept. 2018, 16:28

bonjour

j'ai installé one wire et j'ai toujours le même message d'erreur

Arduino : 1.6.12 (Windows 7), Carte : "Arduino/Genuino Uno"

C:\Users\Moi\Documents\Arduino\capteur_cuve\capteur_cuve.ino:11:23: fatal error: MySensors.h: No such file or directory

#include <MySensors.h>

^

compilation terminated.

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre