Construisez un lecteur de volume de réservoir pour moins de 30 $ en utilisant ESP32

L'Internet des objets a introduit de nombreuses applications d'appareils autrefois complexes dans les foyers de nombreux brasseurs et vignerons artisanaux. Les applications avec capteurs de niveau sont utilisées depuis des décennies dans les grandes raffineries, les usines de traitement des eaux et les usines chimiques. Avec la baisse des prix des capteurs, les industriels et les bricoleurs peuvent désormais surveiller le volume de n’importe quel réservoir, baril ou bidon.

Les capteurs disponibles sur le marché libre peuvent détecter presque tout et sont classés en conséquence. Le capteur utilisé pour mesurer l'humidité est appelé capteur d'humidité, la pression est appelée capteur de pression , la distance est appelée capteurs de position, etc. De la même manière, le capteur utilisé pour mesurer les niveaux de liquide est appelé capteur de niveau .

Les capteurs de niveau sont utilisés pour mesurer le niveau des substances s'écoulant librement . Ces substances comprennent des liquides comme l'eau, l'huile, les boues, etc. ainsi que des solides sous forme de granulés/poudre (solides qui peuvent s'écouler). Ces substances ont tendance à se déposer dans les réservoirs des conteneurs en raison de la gravité et à maintenir leur niveau au repos.

Dans ce guide, vous apprendrez à construire votre propre capteur de niveau, de température et . Des instructions sont également incluses pour que les données nouvellement collectées soient utilisées via Ubidots , une plate-forme d'activation d'applications.

Exigences

Câblage et boîtier

Le capteur HC-SR04 (Ultrasonic Sensor) fonctionne avec une logique 5V. Veuillez suivre le tableau et le schéma ci-dessous pour effectuer les connexions correctes entre l'ESP32 et le capteur à ultrasons :

Veuillez suivre le tableau ci-dessous pour effectuer les connexions correctes entre l'ESP32 et le DHT11 (capteur de température et d'humidité) :

J'ai construit un petit prototype avec un réservoir à l'échelle pour montrer les fonctions du capteur, mais un prototype final avec son boîtier devrait ressembler à ceci :

Comme vous pouvez le voir, le capteur à ultrasons doit être en haut du réservoir, nous allons donc pouvoir mesurer la distance entre la partie supérieure du réservoir et le point final de la substance :

Placez les capteurs de température et d'humidité pour surveiller un environnement.

Pour programmer votre appareil connecté, connectez-vous à l'IDE Arduino.

Avant de commencer avec l'ESP32, configurez votre carte avec l'IDE Arduino. Si vous n'êtes pas familier avec la configuration d'un tableau, veuillez vous référer à l'article ci-dessous et suivez étape par étape jusqu'à ce que vous ayez compilé le tableau :

Une fois votre carte compilée, installez les librairies nécessaires au fonctionnement des capteurs : « PubSubClient » et « DHT : »

  1. Accédez à Sketch/Program -> Include Library -> Library Manager et installez la PubSubClient . Pour trouver simplement la bonne bibliothèque, recherchez PubSubClient dans la barre de recherche.
  2. Accédez au référentiel de la bibliothèque pour télécharger la bibliothèque DHT . Pour télécharger la bibliothèque, cliquez sur le bouton vert appelé « Cloner ou télécharger » et sélectionnez « Télécharger ZIP ».
  3. Maintenant, de retour dans l'IDE Arduino, cliquez sur Sketch -> Include Library -> Add .ZIP Library
  4. Sélectionnez le fichier .ZIP de DHT puis « Accepter » ou « Choisir »

Fermez l'IDE Arduino et ouvrez-le à nouveau. Le redémarrage est requis ; veuillez ne pas sauter cette étape.

Il est maintenant temps de commencer à coder 🙂

Copiez le code ci-dessous et collez-le dans l'IDE Arduino.

Ensuite, attribuez les paramètres : nom et mot de passe Wi-Fi, ainsi que votre TOKEN Ubidots unique. Si vous ne savez pas comment localiser votre TOKEN Ubidots , veuillez vous référer à cet article ci-dessous.

/*************************************************** ************************************************ * Ce L'exemple envoie des données codées en dur à Ubidots à l'aide d'un ESP32. Le code envoie une valeur de distance * entre un appareil et son point final opposé à Ubidots , puis la valeur sera gérée dans * Ubidots pour calculer le volume d'un réservoir avec les caractéristiques de votre réservoir. * *Cet exemple est donné tel quel sans aucune garantie. * * Réalisé par María Carlina Hernández. ************************************************** ***********************************************/ /* ************************************** * Inclure les bibliothèques ******** ********************************/ #inclure<WiFi.h> #inclure<PubSubClient.h> #inclure<DHT.h> /**************************************** * Définir les constantes ****** **********************************/ espace de noms { const char * WIFISSID = "Assign_your_wifi_SSID_here"; // Mettez votre WifiSSID ici const char * PASSWORD = "Assign_your_wifi_SSID_here"; // Mettez votre mot de passe wifi ici const char * TOKEN = "Assign_your_ Ubidots _token_here"; // Mettez votre TOKEN const char d' Ubidots * MQTT_CLIENT_NAME = "Assign_MQTT_client_here"; // Nom du client MQTT, veuillez entrer votre propre chaîne ASCII de 8 à 12 caractères alphanumériques ; const char * VARIABLE_LABEL_1 = "distance"; // Attribution du label de variable const char * VARIABLE_LABEL_2 = "humidity"; // Attribution du label de variable const char * VARIABLE_LABEL_3 = "temperature"; // Attribution du label de variable const char * DEVICE_LABEL = "esp32"; // Attribuer l'étiquette du périphérique const char * MQTT_BROKER = "things. ubidots .com"; const int DHTPIN = 33 ; // Pin où est connecté le DHT11 const int DHTTYPE = DHT11; // Type de DHT const int trigPin = 16; // Broche de déclenchement du HC-SR04 const int echoPin = 17; // Pin d'écho du HC-SR04 } /* Déclarations du capteur */ longue durée; distance de flottement ; /* Espace pour stocker la requête */ char payload[300]; sujet de caractères[150] ; /* Espace pour stocker les valeurs à envoyer */ char str_sensor[10]; char str_TempSensor[10]; char str_HumSensor[10]; /****************************************** * Fonctions auxiliaires ****** **********************************/ WiFiClient ubidots ; Client PubSubClient ( ubidots ) ; DHT dht(DHTPIN, DHTTYPE); void callback (sujet char*, charge utile octet*, longueur int non signée) { char p[longueur + 1]; memcpy(p, charge utile, longueur); p[longueur] = NULL; Message de chaîne(p); Serial.write (charge utile, longueur); Serial.println(sujet); } void reconnect() { // Boucle jusqu'à ce que nous soyons reconnectés while (!client.connected()) { Serial.println("Tentative de connexion MQTT..."); // Tentative de connexion if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) { Serial.println("Connected"); } else { Serial.print("Échec, rc="); Serial.print(client.state()); Serial.println(" réessayez dans 2 secondes "); // Attendez 2 secondes avant de réessayer delay(2000); } } } /****************************************** * Fonctions du capteur *** *************************************/ float readDistance() { digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, FAIBLE); durée = (pulseIn(echoPin, HIGH)); distance = float(durée/29/2); distance de retour ; } /****************************************** * Fonctions principales ***** ***********************************/ void setup() { Serial.begin(115200); WiFi.begin(WIFISSID, MOT DE PASSE); /* Initialisation du DHT11 */ dht.begin(); /* Attribue les PIN comme INPUT/OUTPUT */ pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.println(); Serial.print("Attendez le WiFi..."); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); retard (500); } Serial.println(""); Serial.println("Connecté au Wi-Fi"); Serial.println("Adresse IP : "); Serial.println(WiFi.localIP()); client.setServer(MQTT_BROKER, 1883); client.setCallback(rappel); } void loop() { if (!client.connected()) { reconnect(); } /* Lecture de la température et de l'humidité */ floathumidity = dht.readHumidity(); température flottante = dht.readTemperature(); /* appelle la fonction readDistance() */ distance = readDistance(); /* 4 est la largeur minimale, 2 est la précision ; la valeur float est copiée sur str_sensor*/ dtostrf(distance, 4, 2, str_sensor) ; dtostrf(humidité, 4, 2, str_HumSensor); dtostrf(température, 4, 2, str_TempSensor); /* Construction de la requête Ubidots */ sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(charge utile, "%s", ""); // Nettoie la charge utile sprintf(payload, "{"%s": %s,", VARIABLE_LABEL_1, str_sensor); // Ajoute le label de variable sprintf(payload, "%s"%s": %s,", payload, VARIABLE_LABEL_2, str_HumSensor); // Ajoute le label de variable sprintf(payload, "%s"%s": %s}", payload, VARIABLE_LABEL_3, str_TempSensor); // Ajoute le label de variable //sprintf(payload, "%s {"value": %s}}", payload, str_sensor); /* Imprimer la lecture du capteur sur le moniteur série */ Serial.println("Publication des valeurs sur Ubidots Cloud"); Serial.print("Distance = "); Serial.println(distance); Serial.print("Humidité = "); Serial.println (humidité); Serial.print("Température = "); Serial.println (température); /* Publier la requête sur Ubidots */ client.publish(topic, payload); client.loop(); retard (1000); }

Une fois que vous avez collé votre code et attribué le wifi approprié, vérifiez dans l'IDE Arduino. Pour vérifier, dans le coin supérieur gauche de notre IDE Arduino, vous verrez les icônes ci-dessous. Choisissez l’icône Coche pour vérifier n’importe quel code.

Une fois vérifié, vous recevrez un message « Compilation terminée » dans l'IDE Arduino.

Ensuite, téléchargez le code dans votre ESP32. Choisissez l'icône de flèche droite à côté de l'icône de coche pour télécharger.

Une fois téléchargé, vous recevrez un message « Téléchargement terminé » dans l'IDE Arduino.

Grâce à cela, le capteur envoie désormais les données au système Ubidots Could!

Gestion des données dans Ubidots

Si votre appareil est correctement connecté, vous verrez un nouvel appareil créé dans la section de votre appareil dans votre Ubidots . Le nom de l'appareil sera « esp32 », également à l'intérieur de l'appareil, vous verrez les variables distance, humidité et température :

Si vous souhaitez modifier les noms de votre appareil et de vos variables pour des noms plus conviviaux, veuillez consulter cet article :

Ensuite, pour calculer le volume de substances s'écoulant librement dans le réservoir, nous devons créer une variable dérivée pour calculer une valeur de volume.

La variable dérivée nous permet de construire des opérations en utilisant les variables par défaut, donc dans ce cas, nous allons appliquer la formule de volume

  • Pi = Le rapport entre la circonférence d'un cercle et son diamètre (constant)
  • r = Le rayon du réservoir
  • h = La hauteur du réservoir

Cliquez sur « Ajouter une variable » et sélectionnez « Synthétique » :

Comme vous pouvez le voir dans la nouvelle fenêtre, vous devez joindre la formule dans le champ suivant :

Une fois que vous avez joint la formule avec les caractéristiques de votre réservoir, sélectionnez la variable « distance ». "

Une fois votre formule renseignée, la lecture de votre volume commencera dans votre application Ubidots .

Résultats

Votre capteur est maintenant prêt à fonctionner ! Ci-dessous vous pouvez voir la fonction du capteur de niveau à différents volumes :

Pour en savoir plus sur Ubidots , consultez ces didacticiels vidéo .

Bon piratage 🙂