Contrôler la réserve de sel d’un adoucisseur

Comme expliqué précédemment, une série de nouveaux projets vont voir le jour dont le premier: contrôler la réserve de sel d’un adoucisseur d’eau.

Plusieurs étapes sont à faire:

  • Préparation de la carte Wemos D1 (flashage du code)
  • Connexion du composant SR-H04 à la carte Wemos D1
  • Installation du plugin jMQTT
  • Configuration de l’équipement MQTT
  • Configuration d’un équipement virtuel

Flashage de la carte Wemos D1

Il faut tout d’abord installer l’IDE Arduino afin de pouvoir transmettre le code à la carte. Je ne vais pas expliquer ici comment le faire vu qu’il existe plusieurs articles dont en voici un exemple.

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


// Update these with values suitable for your network.
const char* ssid = "SSID"; //Replace with your SSID
const char* password = "MOTDEPASSEWIFI"; //Replace with your WIFI password
const char* mqtt_server = "IPDUBROKER"; //Replace with the I.P of the computer
const char* mqtt_username = "login"; //Replace with the username you used in the setup of MQTT on your computer
const char* mqtt_password = "mdp";//Replace with the MQTT password you used when you set up MQTT on your computer
const char* clientID = "sel";
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient);
long lastMsg = 100;

// defines variables
#define trigPin D1 // Initialize pin9 for HC-SR04 Trigger
#define echoPin D2 // Initialize pin8 for HC-SR04 Echo

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Connect to MQTT Broker
  // client.connect returns a boolean value to let us know if the connection was successful.
  // If the connection is failing, make sure you are using the correct MQTT Username and Password (Setup Earlier in the Instructable)
  if (client.connect(clientID, mqtt_username, mqtt_password)) {
    Serial.println("Connected to MQTT Broker!");
  }
  else {
    Serial.println("Connection to MQTT Broker failed...");
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("arduinoClient_distance_sensor")) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
 
void setup()
{
  Serial.begin(115200);
  setup_wifi(); 
  client.setServer(mqtt_server, 1883); 
  pinMode(trigPin, OUTPUT);//Define Trigger pin as output
  pinMode(echoPin, INPUT);//Define Echo pin as input
}

void loop()
{
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  //Read the distane and publish it to the computer
  long now = millis();
   long duration, distance; // variable to hold the duration and distance value for HC-SR04
  if (now - lastMsg > 100) {
    lastMsg = now;
    digitalWrite(trigPin, LOW); // Write trigger pin is as low
    delayMicroseconds(2); // Delay for 2microseconds
    digitalWrite(trigPin, HIGH); //Write trigger pin is as high
    delayMicroseconds(10);// Delay for 10microseconds
    digitalWrite(trigPin, LOW); //Write trigger pin is as low
    duration = pulseIn(echoPin, HIGH);//Read the echo pin
    distance = (duration / 2) / 29.1; // calculate the distance
    client.publish("sel", String(distance).c_str());
    Serial.print("Distance: ");
    Serial.println(distance);
    delay(60000);
  }
}

Connexion du SR-H04 à la carte Wemos

Voici le schéma à suivre

Le schéma montre qu’il faut connecter D6 sur Trig et D7 sur Echo. Pour ma part, j’ai fait D1 sur Trig et D2 sur Echo.

Installation du plugin jMQTT dans Jeedom

Ici, je ne vais pas détailler non plus comment effectuer l’installation mais je précise simplement que j’ai installé Mosquitto n’ayant pas encore de broker sur mon réseau. J’ajoute ce dernier en laissant la configuration par défaut où j’ajoute simplement un login et un mot de passe qui est dans le code chargé dans la carte Wemos D1 en première étape.

Configuration de l’équipement MQTT

J’ajoute ensuite un équipement MQTT comme suit:

Je créé la commande (même si normalement elle doit être automatiquement créée lorsque la carte aura envoyé la première valeur)

Si tout est bien configuré et que la carte Wemos D1 transmet bien les informations, la commande devrait recevoir la valeur mesurée par le SR-HC04.

Configuration d’un équipement virtuel

Comme le système mesure la distance entre le sommet de la cuve et le niveau de sel, il faut calculer la différence entre la hauteur totale et la hauteur mesurée pour savoir ce qu’il reste. J’avais deux solutions:

  • Créer une commande supplémentaire dans l’équipement MQTT
  • Créer un virtuel qui contiendra une commande qui donnera le résultat du calcul.

J’opté pour créer un virtuel donc voici la composition. J’en ai profité pour également faire une gestion de mon stock de sacs de sel afin d’effectuer des statistiques.

La commande Consommation ajoute un sac dans la commande Sacs utilisés ([Garage][Adoucisseur][Sacs utilisés]#+1) et la commande Approvisionnement ajoute un sac dans le stock ([Garage][Adoucisseur][stock]#+1).

Le niveau est un simple calcul soustrayant la hauteur de la cuve moins la hauteur calculée par le SR-HC04.

Voici ce que donne la tuile.

Il ne reste plus qu’à faire un scenario qui fera un message (mail, notification ou autre) quand la valeur est inférieure à la hauteur que vous aurez définie comme étant critique.

Publié le 8 novembre 2022
Mis à jour le 1 juillet 2024

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *