Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 16 à 30 sur 43

calcul de vitesse de rotation avec capteur optique et arduino uno

  1. capteurtipe

    Date d'inscription
    décembre 2016
    Âge
    21
    Messages
    31

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    J'ai testé ton code sandrecarpe, il n'affiche rien je crois que la condition pour entrer dans le if n'est pas vérifié. Je ne l'ai pas totalement compris.
    Premièrement, je ne comprends pas bien les valeurs que prennent temps1 et temps2. Si les deux sont initialisées en même temps, elles ne valent pas la même valeur dans le 1er calcul de trmin du void loop?
    Ensuite, dans le calcul de trmin l'entier tour n'apparaît plus. Un oubli?
    Pour le if: on entre dans la boucle si nouveauTour= True? Si oui, comme on a initialisé False le problème vient peut être de là. Si on entre dans le if quand nouveauTour= False, pourquoi incrémenter nouveauTour=True après le if?
    Enfin, j'ai du mal à voir les variables à "INPUT" dans void setup. Si les interruptions sont en 2, je dois brancher mon capteur au pin2 de l'arduino ou je le laisse au pin5? Et du coup, mettre que pinMode(2,INPUT) ou aussi pinMode(5,INPUT)?

    -----

     


    • Publicité



  2. sandrecarpe

    Date d'inscription
    décembre 2013
    Âge
    20
    Messages
    942

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Mon programme ne suit pas la même logique que le tient.
    Dans ton programme, tu comptes le nombre de tour durant une seconde et tu te bases sur ce nombre pour calculer la vitesse de rotation (loop())

    Le miens fonctionne avec des interruptions. Lorsque qu'un front montant est détectée sur la pin 2 ou 3 (selon celle que tu as choisie, et pas une autre), le programme est suspendu, et la fonction nouveauTourInterrupt() est lancée.

    L'interruption est initialisée avec la fonction attachInterrupt() et supprimé avec la fonction detachInterrupt()

    Voici la fonction nouveauTourInterrupt() :
    Code:
    void nouveauTourInterrupt()
    {
      temps2 = millis();
      nouveauTour = true;
    }

    Lorsque nouveauTourInterrupt() est appelée, ça signifie que ton machin qui tourne à fait UN (et un seul) nouveau tour.
    Dans cette fonction, je mets nouveauTour à true pour pouvoir entrer dans la condition du loop et faire mon calcul de vitesse une fois l'interruption terminée (c'est à dire quand on sort de nouveauTourInterrupt()).
    Dans la condition du loop, je calcule la vitesse de rotation en me basant sur un seul tour (c'est pour que ça que je ne me sers plus de tour). J'ai donc besoin juste de la différence de temps (temps2 et temps1) entre les deux derniers fronts montants.

    J'ai pas demandé à mon programme d'afficher quelque chose donc c'est normal qu'il n'affiche rien
    Dernière modification par sandrecarpe ; 19/03/2017 à 11h45.
     

  3. capteurtipe

    Date d'inscription
    décembre 2016
    Âge
    21
    Messages
    31

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Citation Envoyé par Forhorse Voir le message
    Je n'ai jamais utilisé les interruptions avec un arduino, mais moi je vois que tu désactive ton interruption à chaque tour du main, c'est à dire des millions de fois par secondes... peut être que ça doit perturber un peu le bazar
    Avec ta proposition ça me renvoie 0tour 0tr/min
     

  4. capteurtipe

    Date d'inscription
    décembre 2016
    Âge
    21
    Messages
    31

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Merci, j'ai compris maintenant. Ca à l'air de marcher, mais les mesures défilent vite. Où est ce que je peux placer le delay pour ne pas fausser les mesures?
     

  5. capteurtipe

    Date d'inscription
    décembre 2016
    Âge
    21
    Messages
    31

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Rectification: ça ne marche pas. J'ai des valeurs qui semblent cohérentes et des valeurs farfeluEs du style 60 000 tr/min ou 10 000tr/min .. Je pense que ton idée de code est bien, mais pour plus de précision il faudrait entrer dans le loop tous les 100tours du disque et pas exactement 1. Je vois pas comment coder cela
     


    • Publicité



  6. sandrecarpe

    Date d'inscription
    décembre 2013
    Âge
    20
    Messages
    942

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Citation Envoyé par capteurtipe Voir le message
    mais pour plus de précision il faudrait entrer dans le loop tous les 100tours du disque et pas exactement 1. Je vois pas comment coder cela
    C'est ce que je pensais, j'y réfléchis
     

  7. sandrecarpe

    Date d'inscription
    décembre 2013
    Âge
    20
    Messages
    942

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Re moi,

    Code:
    const int pinCapteur = 2; //pin 2 OU 3 seulement pour les interruptions avec un arduino uno
    
    
    unsigned int tour;
    unsigned long temps1, temps2; //temps1 antérieur à temps2
    float trmin;
    
    void setup()
    {
    
      temps1, temps2 = millis();
      trmin = 0;
      tour = 0;
      
      
      pinMode(pinCapteur, INPUT);
      digitalWrite(pinLed, HIGH);
    
      Serial.begin(9600);
      attachInterrupt(digitalPinToInterrupt(pinCapteur), nouveauTourInterrupt, RISING);
      /*
        équivalent à 
        attachInterrupt(0, nouveauTour, RISING); si la pin 2 est utilisée
    
        et à
        attachInterrupt(1, nouveauTour, RISING); si la pin 3 est utilisée
       
       */
    
    
       
    
    
    }
    
    const int n = 10;
    const int nbrFrontMontantParTour = 7;
    void loop() 
    {
    
        if(tour >= nbrFrontMontantParTour*n) //si le ventilo à fait n tour
        {
            detachInterrupt(digitalPinToInterrupt(pinCapteur));
            
            trmin = ((unsigned long)60000*n)/(millis() - temps1);
            
            
            temps1 = millis();
    
            Serial.println(trmin);
            
            
            tour = 0;
            attachInterrupt(digitalPinToInterrupt(pinCapteur), nouveauTourInterrupt, RISING);
        }
    }
    
    
    void nouveauTourInterrupt()
    {
      tour++;
    }
    La variable nbrFrontMontantParTour correspond au nombre de front montant qu'il faut à mon ventilo pour faire un tour. (en gros le nombre de trou).
    La variable n c'est le nombre de tour que je demande à mon programme d'attendre avant de faire le calcul de vitesse. Plus n est grand, plus la mesure semble précise et ne pas osciller
    J'ai testé avec un p'tit ventilo de pc qui tourne à 4500tr/min nominal sous 12V et ça fonctionne nickel.

    Je n'utilise plus temps2. J'appelle millis() directement dans la condition. A voir quel est le mieux
    Dernière modification par sandrecarpe ; 19/03/2017 à 13h32.
     

  8. sandrecarpe

    Date d'inscription
    décembre 2013
    Âge
    20
    Messages
    942

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Ne pas oublier de déclarer la variable tour comme volatile (ce que j'avais oublié de faire)
     

  9. Jiav

    Date d'inscription
    juillet 2004
    Messages
    8 129

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Sandre, pourrais-tu enlever les detach/attach de la void loop pour voir ce que cela fait sur le comportement du compteur?
    The opposite of a deep truth may well be another deep truth. Information is physical.
     

  10. sandrecarpe

    Date d'inscription
    décembre 2013
    Âge
    20
    Messages
    942

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Avec les attach/detach
    avec attach.png



    Sans les attach/detach
    sans attach.png

    Je ne sais pas quoi en conclure
     

  11. Jiav

    Date d'inscription
    juillet 2004
    Messages
    8 129

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Merci. Perso je conclue que cela ne change pas grand chose, du moins dans cette plage de régime. Une chose embêtante c'est les quelques mesures à 6000+ qu'on retrouve de temps en temps. Si tu ajoutais un delay(1) dans la void nouveauTourInterrupt(), est-ce que cela ne supprimerait pas ce problème?
    The opposite of a deep truth may well be another deep truth. Information is physical.
     

  12. sandrecarpe

    Date d'inscription
    décembre 2013
    Âge
    20
    Messages
    942

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Oui
    Mais je pense qu'il est plus judicieux de les laisser.
    Par contre le delay dans l'interruption risque d'en faire éternuer quelques uns ici

    C'est reparti pour une semaine de cours, va falloir attendre pour les tests
    Dernière modification par sandrecarpe ; 19/03/2017 à 17h33.
     

  13. antek

    Date d'inscription
    février 2015
    Messages
    6 646

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Citation Envoyé par sandrecarpe Voir le message
    Par contre le delay dans l'interruption risque d'en faire éternuer quelques uns ici
    Dans un Arduino ça ne choquera personne . . .
     

  14. jiherve

    Date d'inscription
    juin 2006
    Localisation
    gironde
    Âge
    64
    Messages
    14 519

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Bonsoir
    Encore et encore il faut passer par la fonction timer capture donc vraisemblablement l'assembleur mais il semble y avoir une librairie arduimachin qui supporte la fonction..
    L'ayant fait en assembleur je sais que cela fonctionne.

    JR
    Dernière modification par jiherve ; 19/03/2017 à 20h03.
    l'électronique c'est pas du vaudou!
     

  15. Jiav

    Date d'inscription
    juillet 2004
    Messages
    8 129

    Re : calcul de vitesse de rotation avec capteur optique et arduino uno

    Citation Envoyé par jiherve Voir le message
    L'ayant fait en assembleur je sais que cela fonctionne.
    Je te crois sur parole mais... n'est-ce pas un peu longuet de faire ce genre de chose en assembleur? C'est une vrai question, i.e. si cela permet de faire des choses impossibles autrement (et que ces choses m'interessent assez), ou si le surcout en temps reste raisonnable, j'envisagerais serieusement de m'y mettre.
    The opposite of a deep truth may well be another deep truth. Information is physical.
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. capteur mesure vitesse de rotation
    Par capteurtipe dans le forum Physique
    Réponses: 6
    Dernier message: 13/12/2016, 17h30
  2. capteur vitesse de rotation roues
    Par ProjetGIM dans le forum Électronique
    Réponses: 4
    Dernier message: 03/10/2015, 11h56
  3. brancher un capteur de vitesse de rotation
    Par chris74 dans le forum Électronique
    Réponses: 23
    Dernier message: 19/10/2011, 12h42
  4. Vitesse de rotation avec capteur de position pour asservissement
    Par robertjagger dans le forum Électronique
    Réponses: 2
    Dernier message: 05/11/2008, 19h42
  5. Capteur de vitesse de rotation inductif
    Par Antho21 dans le forum Technologies
    Réponses: 0
    Dernier message: 08/03/2008, 14h56