[TUTORIEL] Connaitre la capacité restante de sa cuve eau de pluie

id Title sidebar_label
Capacité Restante d’une Cuve Capacité Restante d’une Cuve Capacité Restant d’une Cuve

Projet :Capacité Restante d’une Cuve

Bonjour la communauté,

Je vous présente mon projet qui est maintenant fonctionnel pour mesurer la quantité d’eau restante dans ma cuve.

J’ai eu l’idée de ce projet car ma cuve de récupération d’eau de pluie alimente mon arrosage extérieur, ma machine à laver ainsi que mes WC et il m’était impossible de savoir hormis le fait d’aller voir dehors dans la cuve si il restait de l’eau ou non.

Gladys me permet de basculer en eau de ville si nécessaire plus facilement via une notification qui m’indique que la cuve est presque vide.

Pour ce projet si cela vous intéresse vous aurez besoin :

1x Wemos D1 mini (coût 2,63€ sur aliexpress) points fort : petit et wifi

1 Capteur ultrasons JSN-SR04T point fort : étanche (coût 5,25€ sur aliexpress)

1x Cable rallonge de 3,5m nécessaire pour les distances > à 2,5m si vous souhaitez le raccorder dans la maison ou dans un garage en usb (coût 4,08€ sur aliexpress)

1 ou 2 boitiers étanches en fonction du mode d’installation choisi (coût 2,40€ en magasin de bricolage)

Total : 17,36€

Pré-requis :

  • Logiciel Arduino
  • Intégration MQTT dans Gladys

1ère Etape : Branchement du capteur JSN-SR04T au Wemos D1 mini

Schéma :

Capture d’écran 2021-03-08 à 10 24 00

GND : GND

VCC : 5V

Echo : Pin D6

Trigger: Pin D7

2ème étape : L’intégration de MQTT dans Gladys

Suivre la procédure d’installation dans Gladys et une fois la configuration terminée, il faut créer un nouvel appareil MQTT avec les éléments ci-dessous

Capture d’écran 2021-03-14 à 20 32 43

Capture d’écran 2021-03-14 à 20 30 50

Puis “sauvegarder”

Pour finir vous pouvez créer le bandeau en page d’accueil afin de voir le résultat à la fin du projet

Sur le Dashboard, cliquez sur “éditer” → “appareils de la pièce” → “jardin”

Capture d’écran 2021-03-14 à 20 35 08

3ème étape : Le code Arduino à télécharger dans le wemos (code maison à affiner ou améliorer )

Pour cela, vous aurez besoin de télécharger et d’installer l’ide Arduino sur leur site (disponible ici)

Le WEMOS D1 mini n’est pas reconnu officiellement par l’’ide Arduino. Vous devez donc télécharger le driver CH340/CH341 afin qu’il soit reconnu et que vous puissiez télécharger du code dessus. (Disponible ici)

Branchez votre Wemos D1 mini puis installer le driver, ensuite lancez le logiciel arduino puis allez dans “préférences” et ajoutez la ligne ci-dessous dans l’url de gestionnaires de cartes supplémentaires

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Capture d’écran 2021-03-08 à 09 31 07

Ensuite, allez dans “outils” → “type de cartes” → “le gestionnaire de carte” et recherchez “esp8266” puis cliquez sur “installer”

Capture d’écran 2021-03-08 à 09 39 29

Pour finir vous pouvez choisir votre carte dans “outils” → “type de cartes” et choisir "ESP8266board " puis “LOLIN(Wemos) D1 R2 & mini”

Et voilà votre carte Wemos est prête à recevoir du code :slight_smile:

Maintenant, vous devez télécharger les bibliothèques nécessaires au fonctionnement du code.

Il faut se rendre dans l’onglet “outils” → “gérer les bibliothèques”

Nous aurons besoin de :

  • ESP8266Wifi
  • PubSubClient

Vous pouvez à présent copier/coller le code ci-dessous en pensant à bien remplir vos informations sur la partie MQTT , WIFI et surtout de modifier la valeur de la profondeur de votre cuve dans “float c = 2000”

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

/* WIFI */

#define wifi_ssid "*********" // votre ssid wifi
#define wifi_password "**************" // votre mot de passe wifi

/* MQTT */

#define mqtt_server "192.168.0.8"
#define mqtt_user "gladys"            // username
#define mqtt_password "************" // mot de passe MQTT
#define gladys_topic "gladys/master/device/mqtt:jardin:capteur-ultrason/feature/mqtt: jardin:capteur-ultrason:quantite/state"
#define mqtt_cuve "mqtt:jardin:capteur-ultrason"     //Topic capteur cuve

/* Buffer qui permet de décoder les messages MQTT reçus */

char message_buff[100];

long lastMsg = 0;   //Horodatage du dernier message publié sur MQTT
long lastRecu = 0;
bool debug = false;  //Affiche sur la console si True

/* Constantes pour les broches */

const byte TRIGGER_PIN = 7; // Broche TRIGGER
const byte ECHO_PIN = 6;    // Broche ECHO

/* Constantes pour le timeout */

const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

/* Vitesse du son dans l'air en mm/us */

const float SOUND_SPEED = 340.0 / 1000;

//Création des objets

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {

  /* Initialise le port serie */

  Serial.begin(9600);     //Facultatif pour le debug

  /* Initialise les broches */

  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
  pinMode(ECHO_PIN, INPUT);

  setup_wifi();           //On se connecte au réseau wifi
  client.setServer(mqtt_server, 1883);    //Configuration de la connexion au serveur MQTT
}

//Connexion au réseau WiFi
void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connexion a ");
  Serial.println(wifi_ssid);

  WiFi.begin(wifi_ssid, wifi_password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("Connexion WiFi etablie ");
  Serial.print("=> Addresse IP : ");
  Serial.print(WiFi.localIP());
}

//Reconnexion
void reconnect() {
  //Boucle jusqu'à obtenur une reconnexion
  while (!client.connected()) {
    Serial.print("Connexion au serveur MQTT...");
    if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
      Serial.println("OK");
    } else {
      Serial.print("KO, erreur : ");
      Serial.print(client.state());
      Serial.println(" On attend 5 secondes avant de recommencer");
      delay(5000);
    }
  }
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  long now = millis();

  /*Envoi d'un message par minute*/

  if (now - lastMsg > 1000 * 60) {
    lastMsg = now;

    /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */

    digitalWrite(TRIGGER_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGGER_PIN, LOW);

    /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */

    long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);

    /* 3. Calcul la distance à partir du temps mesuré */

    int distance_mm = measure / 2.0 * SOUND_SPEED;
    float c = 2000 - distance_mm; // TRES IMORTANT Remplacer 2000 par la hauteur de votre cuve
    c = c / 2000;
    c = c * 100;

    //Inutile d'aller plus loin si le capteur ne renvoi rien
    if ( isnan(c)) {
      Serial.println("Echec de lecture ! Verifiez votre capteur HRC-04");
      return;
    }

    if ( debug ) {
      Serial.print("Cuve : ");
      Serial.print(c);
    }
    client.publish(gladys_topic, String(c).c_str(), true);   //Publie le % de la cuve sur le topic dans gladys
  }
}

Une fois le code téléversé, vous pouvez brancher les cables avec le schéma du dessus et effectuer un test avec l’ide arduino et le moniteur de série pour voir le résultat. Si cela fonctionne correctement vous pouvez alors installer votre matériel dans des boites étanches pour protéger votre capteur et votre wemos.

Vous pouvez créer différentes scènes et notamment vous prévenir si la cuve est presque vide ou vous envoyer 1fois/jour la capacité restante par exemple.

Capture d’écran 2021-03-14 à 20 37 20

1ère Scène : Notification cuve vide

Capture d’écran 2021-03-14 à 20 38 52

Capture d’écran 2021-03-14 à 20 39 18

2ème scène : Rapport Journalier Cuve

Capture d’écran 2021-03-14 à 20 41 04

Capture d’écran 2021-03-14 à 20 41 33

Capture d’écran 2021-03-14 à 20 41 56

Vous pouvez installer l’application télégram pour recevoir maintenant vos notifications.

Quelques photos de mon installation

4 Likes

Génial pour ce tuto merci de l’avoir posté ici :slight_smile:

Dans ton code, à quoi sert cette ligne?

Je pense que c’est un relicat du script dont tu t’es inspiré :slight_smile:

Salut, tu as une image qui ne s’affiche pas dans ton tuto, la 2 ème image du schéma wemos.

Sacré tuto :+1:, bien vu !

Oui en effet. je l’ai supprimé. :wink:

Erreur de ma part, il s’agissait de la même image :grin:

1 Like

Sinon pour les images je te recommanderais de les héberger sur le forum (tu peux les uploader directement dans le tuto), plutôt que de te baser sur Github. Si tu delete ton repo, ce tutoriel n’affichera plus les images ^^