Partage
  • Partager sur Facebook
  • Partager sur Twitter

niveau d'eau dans une cuve avec capteur ultrasons

    4 mars 2019 à 12:20:01

    Bonjour,

    J'aimerai mesurer le niveau d'eau dans ma cuve de récupération d'eau de pluie à l'aide d'un capteur à ultrasons avec arduino et ensuite convertir cette mesure en Litres ou en pourcentage d'eau disponible dans la cuve .

    Pourriez vous m'aider svp ?

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2019 à 15:27:35

      Bonjour,

      Votre question ne concerne pas le C++, vous aurez plus de chance d'obtenir des réponses sur un autre forum (électronique ?)

      Pour réaliser cette mesure vous allez devoir choisir un capteur ultrason et lire attentivement sa doc pour savoir comment l'utiliser et récupérer son signal de sortie. Puis il va falloir trouver l'entrée de l'arduino capable de le recevoir ou faire un montage électronique pour l'adapter. Puis en lisant la doc de l'arduino vous trouverais comment récupérer une valeur numérique correspondant à cette entrée que vous pourrez interprêter.

      Voilà pour la partie acquisition de la donnée, typiquement ça ressemble à quelque chose du style capteur alimenté en 12V qui envoi un signal de 0 à 5V dans une proportion linéaire de la distance mesurée de 2 mm à 20 cm, tu le branche à un Convertisseur Analogique-Numérique 16 bits et tu récupères au travers un registre dans ton programme la valeur entre 0x0000 (= 0V donc = 2mm) et 0xFFFF (= 5V donc = 20 cm)

      Mais maintenant il faut interpréter cette valeur. Le capteur ultrason mesure une distance, il faut caractériser ta cuve pour avoir une correspondance entre la distance mesurée par le capteur et le volume contenu par la cuve car ce n'est pas linéeaire. Pour ça, soit tu connais les dimensions de ta cuve et tu poses le tout sur papier, tu fais de la géométrie et t'en tire une équation, soit tu effectues des séries de relevés et tu fais des interpolations

      -
      Edité par romantik 5 mars 2019 à 15:40:56

      • Partager sur Facebook
      • Partager sur Twitter
      Dream on, Dream on, Dream until your dream comes true
        6 mars 2019 à 9:58:57

        Bonjour ,

        Merci , des infos très bien expliqué !

        Je peux vous montrer ma programmation côté arduino ? Que vous me dites si ça a l’air cohérent ?

        Pour la simulation je fais ça avec arduino et oui je connais les dimensions de la cuve 😋

        Cordialement

        • Partager sur Facebook
        • Partager sur Twitter
          6 mars 2019 à 10:19:34

          Si tu veux partager ton code, je t'en prie.

          J'ai pas fait d'arduino donc je ne serais pas très précis, mais je connais le C++ et la programmation de microcontroleur, Arduino est un peu entre les deux, donc j'essaierai d'aiguiller.

          Puis si ce n'est pas moi, ce sera quelqu'un d'autre, c'est l'avantage d'un forum :D

          "Pour la simulation" ? Qu'entends-tu par là ? Que c'est un projet qui aura sa propre carte personnalisée à terme ?

          Si tu connais les dimensions de ta cuve, alors il faut que tu schématises ton montage pour pouvoir raisonner de façon géométrique pour exprimer le volume en fonction de la distance entre la surface et le capteur. C'est pas forcément un calcul évident, éventuellement tu peux demander à un logiciel de modélisation 3D genre SolidWorks de le faire à ta place, je crois que ce genre de fonctionnalité existe.

          • Partager sur Facebook
          • Partager sur Twitter
          Dream on, Dream on, Dream until your dream comes true
            6 mars 2019 à 10:24:04

            Si c'est une cuve rectangulaire, la capacité c'est hauteur x largeur x longueur :-)

            -
            Edité par michelbillaud 6 mars 2019 à 10:31:47

            • Partager sur Facebook
            • Partager sur Twitter
              6 mars 2019 à 11:00:36

              Non je me suis mal exprimé ....

              Simulation via Isis proteus permet de créer des schémas electriques

              • Partager sur Facebook
              • Partager sur Twitter
                6 mars 2019 à 11:14:49

                Le schéma electrique, il va être vite pondu.

                Pour un capteur comme le HC-SR04, il y a 4 fils à brancher : Vcc et GND comme tout le monde, et Trig + Echo.

                https://www.carnetdumaker.net/articles/mesurer-une-distance-avec-un-capteur-ultrason-hc-sr04-et-une-carte-arduino-genuino/

                A part ça, il va bien falloir que l'arduino fasse quelque chose du volume qu'il a calculé. Il faudra certainement brancher d'autres machins. Faut peut être réfléchir à ça plutôt que de se préoccuper du logiciel qui fera le dessin pour le rapport final.

                -
                Edité par michelbillaud 6 mars 2019 à 11:17:31

                • Partager sur Facebook
                • Partager sur Twitter
                  6 mars 2019 à 11:23:34

                  Je me suis surement mal exprimé ,

                  J'aimerai mesurer le niveau de ma cuve à l'aide d'un capteur à ultrasons , le SEN0208 avec arduino .

                  et Il faudrait que lorsqu'il n'y a pas d'eau , l'alimentation se coupe . Avec un relais je pense .

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 mars 2019 à 11:24:00

                    Ah ok,

                    Ben je sais pas comment Proteus présente les capteurs, mais pour choisir ton capteur à ultrason, je te conseille d'étudier ton besoin  - distance à mesurer, résolution/précision de la mesure, contrainte mécanique (support, étanchéité, connectique ...), contrainte électrique (puissance consommée, réaction aux perturbations ...) particulièrement si tu l'alimente par batterie/pile - et d'ensuite chercher dans un vrai catalogue genre rs ou farnell un composant qui réponde à tes attentes, et ensuite l'insérer dans la simulation, parce que dans l'autre sens je pense qu'il y a des chances que tu te crées une simulation parfaite avec un composant que tu ne pourras pas te procurer (genre des composants qui ne se vendent qu'en masse) ou un soucis qu'une simulation électronique ne met pas en avant (typiquement mécanique, le support de fixation ou la connectique)

                    Et donc ton code arduino  ? D'ailleurs de quel Arduino s'agit-il ?

                    EDIT : Ce message devait arriver 2 message avant, j'ai laissé ma page ouverte sans la rafraichir donc ... grillé ^^"

                    Tu sais déjà quel capteur ultrason tu as choisi

                    -
                    Edité par romantik 6 mars 2019 à 11:28:37

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Dream on, Dream on, Dream until your dream comes true
                      6 mars 2019 à 11:29:51

                      haha , je vous envoie ca ci dessous :

                      Pour les servos moteur , ne vous en occupez pas c'est pas urgent .

                      include<servo.h> // Inclus la bibliothèque pour utiliser les servos moteurs

                      Servo monservo1; // Créer la variable monservo1 Servo monservo2; // Créer la variable monservo2

                      int positionduservo1=0; // Créer la variable pour la position du servomoteur

                      char trig=7; // Variable pour l'entrée des infos dans le capteur ultra son char echo=8; // Variable pour la sortie des infos dans le capteur ultra son

                      float niveau; // Variable de niveau d'eau int niveaumax; // Constante du niveau max d'eau

                      int bouton=4; // Information de la presence ou non de pluie int relais_moteur=6; // Variable pour le relais de la pompe

                      void setup() { monservo1.attach(9); // J'affecte la broche du servomoteur à 9 monservo2.attach(10); // J'affecte la broche du servomoteur à 10

                      pinMode(trig,OUTPUT); // Je declare le trig comme sorti pinMode(echo,INPUT); // Je declare le echo comme entrée pinMode(bouton,INPUT); // Je declare le bouton comme entrée

                      }

                      void loop() {

                                                               // MESURE DU NIVEAU D'EAU DANS LA CUVE :
                      

                      digitalWrite(trig,LOW); delay(2); digitalWrite(trig,HIGH); delay(10); digitalWrite(trig,LOW);

                                                              // FIN MESURE DU NIVEAU D'EAU ! 
                      
                                                              // RECUPERATION DU NIVEAU DE L'EAU :
                      

                      niveau=pulseIn(echo.HIGH)/58.0; niveaumax=100;

                      if (bouton==HIGH) // S'il pleut alors { monservo1.write(90); // Le servomoteur 1 s'ouvre de 90° digitalWrite(relais_moteur,HIGH); // Le moteur de la pompe tourne }

                      if(niveau>niveaumax) // Si le niveau d'eau est supérieur au max { monservo1.write(0); // Le servo prend la position 0 digitalWrite(relais_moteur,LOW); // La pompe s'arrête monservo2.write(90); // Le servo2 s'ouvre pour laisser passer le surplus d'eau a l'exterieure }

                      if(bouton==LOW) // S'il ne pleut pas { monservo1.write(0); // Tout est à l'arrêt digitalWrite(relais_moteur,LOW); monservo2.write(0); }

                      }</servo.h>

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 mars 2019 à 12:05:02

                        Il y a un bouton au dessus de l'editeur pour insérer du code, je te laisse éditer ton message car là c'est illisible

                        Sinon quelques remarques :

                         - tu peux initialiser niveaumax au lieu de lui affecter 100 à chaque cycle, et tu peux la définir comme constante pour t'assurer que sa valeur ne change pas au cours du programme

                        const int niveaumax = 100;

                        lors de sa déclaration, voire même

                        constexpr int niveaumax = 100;

                        si arduino le supporte

                         - bouton est ta variable identifiant le numéro de pin de l'entrée bouton, donc tes tests n'ont pas de sens, il faut que tu les fasses sur la valeur de la pin "bouton", avec digitalRead() (?) pour lire HIGH ou LOW, parce que bouton vaut 4

                         - d'ailleurs tous ces identifiants je pense qu'ils peuvent être déclarés 'const' aussi

                         - La lecture de la distance a l'air de correspondre à la doc, c'est pas un signal analogique mais temporel. par contre là tu travaille sur la distance dans 'niveau', il te manque la conversion en volume

                         - Concernant ta mise en veille, il va te falloir un système annexe sinon l'arduino sera pas capable de se relancer tout seul puisqu'il sera étaeint. Ou si tu parlais juste d'arrêter l'ultrason, alors tu peux faire un booléen qui interdit l'envoi du signal trigger  (et la reception de l'echo du coup) lorsqu'on a reçu une mesure à 0L et qui ne le réautorise que lors de la prochaine activation de 'bouton' (la prochaine fois qu'il pleut)

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Dream on, Dream on, Dream until your dream comes true
                          6 mars 2019 à 15:35:36

                          Tu utilises des noms de variable à la noix, tu n'as pas fini de te prendre la tête avec. A la place, tu devrais employer systematiquement des fonctions qui ont un nom parlant et s'occupent des détails. Approche procédurale.

                          Ca donnerait une fonction loop comme ça (mais tu n'as pas parlé de la logique de ce que tu voulais faire, alors j'invente. Il doit y avoir une pompe de remplissage si il ne pleut pas et que le niveau est inférieur à un minimum ?).

                          enum { VIDAGE, REPOS } phase ;
                          void loop() {
                              switch (phase) {
                              case REPOS :
                                   if ( trop_plein() ) {
                                         ouvrir_vanne_trop_plein();
                                         phase = VIDAGE;
                                   };
                                   break;
                              case VIDAGE : {
                                   if (niveau_suffisant() ) {
                                         fermer_vanne_trop_plein();
                                         phase = REPOS;
                                   };
                              }
                          }
                          


                          les détails à la con, c'est plus loin

                          const int VANNE_OUVERTE = 90;
                          
                          
                          void ouvrir_vanne_trop_plein() {
                              servo_vanne.write(VANNE_OUVERTE);
                          }
                          
                          



                          -
                          Edité par michelbillaud 6 mars 2019 à 15:41:19

                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 mars 2019 à 16:35:09

                            très bien , merci c'est ca , enfaite quand il n'y a plus d'eau , la pompe s'arrete

                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 mars 2019 à 18:22:45

                              Oui, mais si il pleut ?

                              -
                              Edité par michelbillaud 6 mars 2019 à 18:24:45

                              • Partager sur Facebook
                              • Partager sur Twitter
                                6 mars 2019 à 18:47:37

                                pour faire plus simple je vais vous expliquer tout ce que je voudrais faire .

                                donc j'aimerai mesurer le volume d'eau dans ma cuve avec l'ultrason à l'aide d'arduino .

                                Ensuite quand il y a +25 % d'eau dans ma cuve , la pompe marche , et envoie l'eau dans mes toilettes et la vanne d'eau de ville pour mon WC se ferme .

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 mars 2019 à 8:46:43

                                  Bon alors il y a une vanne d'eau de ville, une pompe, une vanne d'évacuation, un détecteur de niveau,...

                                  La pompe, il faut la mettre en route par programme, ou elle se déclenchera toute seule quand on tire de l"eau ?

                                  Et la pluie la dedans ?

                                  Tu devrais nous faire un dessin de ton installation (papier, crayon, photo avec le téléphone)

                                  -
                                  Edité par michelbillaud 7 mars 2019 à 8:47:35

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  niveau d'eau dans une cuve avec capteur ultrasons

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown