Partage
  • Partager sur Facebook
  • Partager sur Twitter

[URGENT] Arduino Anémomètre

    10 janvier 2016 à 0:11:31

    Bonsoir , j'ai un souci de programmation sur Arduino Mega, j'essaie de connecter un anémomètre à la carte arduino mais je n'arrive pas à faire fonctionner le programme, en réalité je ne sais pas comment faire le programme, l'anémomètre n'est rien de plus qu'un ILS , le but du supposé programme serait de mesurer le temps entre deux etats d'une entree , par exemple mesurer le temps entre deux HIGH ou deux LOW pour faire un lien avec la vitesse , auriez vous des idées ?
    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2016 à 0:50:11

      Bonsoir,

      Peux tu nous en dire plus sur ton capteur ? Quel est son principe physique et son type de signal de sortie ?

      Pour moi un capteur d'anémomètre ça peut être "une machine tournante" (moulin à coupoles, hélice...) dont l'axe peut être relié à une génératrice, ou à un compteur incrémental par exemples. Ca pourrait être aussi un tube de Pitot, voire même un filament alimenté en courant constant dont on mesure la température, un capteur vortex piézo-électrique ect...Par contre un simple ILS ça me laisse perplexe...bref dis nous en plus.

      A+

      Jc

      • Partager sur Facebook
      • Partager sur Twitter
        10 janvier 2016 à 1:26:02

        Je te prep un code...

        -
        Edité par Kana00 10 janvier 2016 à 1:28:50

        • Partager sur Facebook
        • Partager sur Twitter
        Fou d'informatique.
          10 janvier 2016 à 1:28:21

          Re, je viens de te codé ça, j'espère que c'est ce que tu recherchais ?

          tu dois juste définir RayonDesBras de ton anénomètre puis téléversé ton code sur l'aduino puis ouvrire un moniteur série. (j'ai supposé que ton anénomètre était en demi-sphère et que tu n'as qu'un seul ILS, avec 1 seul aimant sur la partie en rotation. si ce n'est pas le cas, modifie un peu mon code. NB: avec un seul aimant, tu risque d'avoir un phénomène de vibration, car le centre de gravité est délocalisé du centre pour la rotation, ça faussera légèrement tes valeurs, je te conseil de mettre 2 aimants de chaque coté et donc de modifier mon code (remplacer la ligne

          deltaTime = (millis() - millis_old) / 1000 ;
          par => deltaTime = ((millis() - millis_old) / 1000)*2 ;
          #define pinILS 12
          #define pi 3.14159265359
          #define RayonDesBras	0.1 // en mètre de l'anénomètre
          
          void setup() 
          {
            pinMode(pinILS, INPUT);
            Serial.begin(9600);
          }
          
          unsigned long millis_old(0);
          float deltaTime(0);
          float vitesseVent(0);
          float NombreTourSec(0);
          float FEtalonage(1);
          /* NB : La fonction d'étalonnage traduit les propriétés aérodynamiques de 
          l'anémomètre et les frottements qui altèrent le mouvement de rotation de l'anémomètre. 
          Elle dépend des dimensions et matériaux de l'anémomètre et de sa vitesse de rotation. 
          Seuls des essais en soufflerie à différents régimes de vent permettent de la déterminer précisément. */
          bool isActive(false);
          
          void loop()
          {
          	UpdateILS();
          	//convertion periode -> fréquense
          	NombreTourSec = (1 / deltaTime);
          	//vitesse du vent
          
          	vitesseVent = 2*pi*RayonDesBras*NombreTourSec*FEtalonage;
          	//affichage de la vitesse
          	Serial.print("la vitesse du vent est de ");
          	Serial.println(vitesseVent);
          	Serial.print(" m/s.");
          }
          void UpdateILS()
          {
          	//lecture du capteur
          	isActive = digitalRead(pinILS);
          
          	if(isActive)
          	{
          		deltaTime = (millis() - millis_old) / 1000 ; // div en 1000 pour avoir le résultat en sec
          	    millis_old = millis(); // remise à 0 du compteur pour capturé la différence de temps au prochain tour
          	}
          }
          



          -
          Edité par Kana00 10 janvier 2016 à 1:35:04

          • Partager sur Facebook
          • Partager sur Twitter
          Fou d'informatique.
            10 janvier 2016 à 10:10:26

            Merci beaucoup Kana00 je teste ca et je te tiens au courant 😁
            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2016 à 10:11:54

              C'est un ILS  , sur l'axe des helices il y a un ou des aimants ( a verifier ) .
              • Partager sur Facebook
              • Partager sur Twitter
                10 janvier 2016 à 10:25:53

                hum... pour le vérifier et être sur (s'il y a des aimants incrusté et que tu ne peux donc pas voir) fais un test avec l'Arduino, met cette ligne dans la fonction loop() puis lance un moniteur série.

                Serial.println(isActive);

                tourne un peu l'hélice et dé qu'un aimant activera l'ILS, tu sauras alors, qu'il y a un aimant :-)

                pour chaque aimant que tu trouveras modifie la ligne comme ceci :

                deltaTime = ((millis() - millis_old) / 1000)* NombreDAimant ;

                -
                Edité par Kana00 10 janvier 2016 à 10:29:38

                • Partager sur Facebook
                • Partager sur Twitter
                Fou d'informatique.
                  23 mars 2016 à 10:12:30

                  Bonjour j'ai teste le code arduino mais il ne marche pas , pouvez vous m'aider s'il vous plait? Ps: Je suis nul en programmation ect...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 mai 2016 à 10:28:05

                    ...

                    -
                    Edité par colisParker 5 mai 2016 à 10:30:55

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 mai 2016 à 10:47:33

                      Bonjour !! je me permets de rejoindre ce groupe car j'ai besoin d'aide sur programmation en arduino. ceci est un pareil au problème d'anémomètre soulever précédemment. Alors moi j'ai un anémomètre et une carte arduino méga 2056. je dispose aussi d'une carte mère qui pilote tous le système (réalisation d'un détecteur de seuil de saltation dans le désert). j'ai presque finis mon projet mais il me reste à coder la carte Méga  de tel sorte que mon système sera déclenché unique si la vitesse du vent détecter par l'anémomètre est supérieur à 6m/s et toute l'opération peut durée 6h.

                      j'ai testé ce code qui n'est rien d'autre que celui de Kano00 et qui marche correctement sauf que moi je besoin de rajouter certaines fonctionnalités . mais ne connais pas grande chose en arduino. c'est la raison pour laquelle je vous prie de m'aider.

                      const int pinILS=12;// mon choix
                      int pi=3.14;// mon choix
                      int RayonDesBras=0.01;// mon choix
                      void setup()
                      {
                        pinMode(pinILS, INPUT);
                        Serial.begin(9600);
                      }
                       
                      unsigned long millis_old(0);
                      float deltaTime(0);
                      float vitesseVent(0);
                      float NombreTourSec(0);
                      float FEtalonage(1);
                      /* NB : La fonction d'étalonnage traduit les propriétés aérodynamiques de
                      l'anémomètre et les frottements qui altèrent le mouvement de rotation de l'anémomètre.
                      Elle dépend des dimensions et matériaux de l'anémomètre et de sa vitesse de rotation.
                      Seuls des essais en soufflerie à différents régimes de vent permettent de la déterminer précisément. */
                      bool isActive(false);
                       
                      void loop()
                      {
                          UpdateILS();
                          //convertion periode -> fréquense
                          NombreTourSec = (1 / deltaTime);
                          //vitesse du vent
                       
                          vitesseVent = 2*pi*RayonDesBras*NombreTourSec*FEtalonage;
                          //affichage de la vitesse
                          Serial.print("la vitesse du vent est de ");
                          Serial.println(vitesseVent);
                          Serial.print(" m/s.");
                      }
                      void UpdateILS()
                      {
                          //lecture du capteur
                          isActive = digitalRead(pinILS);
                       
                          if(isActive)
                          {
                              deltaTime = (millis() - millis_old) / 1000 ; // div en 1000 pour avoir le résultat en sec
                              millis_old = millis(); // remise à 0 du compteur pour capturé la différence de temps au prochain tour
                          }
                      }

                      • Partager sur Facebook
                      • Partager sur Twitter

                      [URGENT] Arduino Anémomètre

                      × 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