IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Calcul de vitesse de rotation avec capteur optique et arduino uno


Sujet :

Arduino

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut Calcul de vitesse de rotation avec capteur optique et arduino uno
    Bonjour,

    Je voudrais calculer la vitesse de rotation d'un disque fixé sur un arbre moteur avec un capteur optique. J'ai codé cela sur Arduino mais cela ne fonctionne pas. Je me suis aperçue que le problème vient de la fonction qui compte le nombre de tours du disque mais je ne vois pas comment le régler.
    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    //capteur port OUT relié au pin2 de l'arduino
    const int pinCapteur=2;//on utilise le pin 2 (avec arduino uno pin 2 ou 3 pour les interruptions)
    // pour le pin2 l'interruption se fait sur le pin0
     
    // Initialisation des variables
    unsigned int Mesure; //variable qui compte le nombre de mesures
    float trmin; // variable qui affichera la vitesse du disque en tour/min
    unsigned long temps; //sert à déterminer le temps que met le disque pour réaliser exactement un tour
    volatile int tour; //compte le nombre de tours du disque
    const int n=100;  //nombre de tours du disque avant de faire le calcul de vitesse
    float dT;
     
    void setup() {
      Serial.begin(9600);   //connection au port série 
      pinMode(pinCapteur, INPUT); //connection du capteur au pin2 de l'arduino
     
      //Initialisation des variables
      tour=0;
      trmin=0;
      Mesure=0;
      temps=millis(); 
     
      //on appelle la fonction NouveauTourInterrupt dès qu'il y a un changement d'état abscence(HIGH) vers présence(LOW) du trou du disque, c'est à dire dès que le disque fait exactement un tour
      //attachInterrupt(interruption,fonction,mode)
      attachInterrupt(0,nouveauTourInterrupt,FALLING);
    }
     
    void loop() {
     
     
      // si il y a eu n tours du disque
      if (tour >= n){
        //on arrête l'interruption pendant le calcul
        //detachInterrupt(0);
        // trmin= (n* 60000)/ (temps écoulé pour faire n tours du disque en minute 1min=60 000ms
        //entre temps2 et temps1 il y a eu exactement 1 tour
        dT=millis()-temps;
        trmin= ((unsigned long)60000*n)/(dT); 
        Mesure++;
     
        Serial.print("Mesure:");
        Serial.print(Mesure);
        Serial.print("vitesse en tour/min: ");
        Serial.println(trmin);
        //Serial.print("nb de tours: ");
        //Serial.println(tour);
        //Serial.print("temps entre deux mesures en ms: ");
        //Serial.println(dT);
         //Réinitialisation du temps et du nombre de tours
        temps=millis();
        tour=0;
     
        //on recommence les interruptions
        attachInterrupt(0,nouveauTourInterrupt,FALLING);
      }
     
    }
    //Dès qu'il y a 1 nouveau tour on appelle  la fonction
    void nouveauTourInterrupt() {
      tour++;
      //Serial.println(tour);
    }
    Je compte sur vous!

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    enlève le attachInterrupt dans ta fonction loop.
    https://www.arduino.cc/en/Reference/AttachInterrupt

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    J'ai déjà essayé en enlevant attach et detach mais ça n'arrange pas le problème

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    J'ai relu ton code et je crois que tu n'as pas complètement saisi le fonctionnement des interruptions. Il est clair que dans ton cas c'est plus intéressant de les utiliser.

    Mais :
    - dans le setup, tu vas initialiser tes variables et créer ton interruption.
    - dans le loop(), tu ne fais (presque) rien
    - dans la fonction appelée pour chaque interruption tu fais ton calcul !

    Par contre, les variables utilisées dans la fonction d'interruption doivent être déclarées en volatile.

    Voilà comment je vois un peu les choses :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    const int pinCapteur = 2;  // voie d'entrée du capteur
    volatile unsigned long t2, t1, dt;  // gestion du temps
    volatile bool flag;   // flag pour avertir qu'une nouvelle donnée est disponible.
     
    setup()
    {
        Serial.begin(9600);   //connection au port série 
        pinMode(pinCapteur, INPUT);
     
        // création de l'interruption
        attachInterrupt( digitalPinToInterrupt(pinCapteur), nouveauTourInterrupt, FALLING );
     
        t2 = millis();
        t1 = t2;
        flag = false;
     
    }
     
    loop()
    {
        // rien à faire ici, sauf affichage avec Serial.println()
        // ne pas appeler serial.println() dans une fonction d'interruption
        if (flag)  // nouvelle donnée disponible
        {
            serial.println(dt);
            flag = false;
        }
    }
     
    void nouveauTourInterrupt()
    {
        t2 = millis();  
        dt = t2-t1;  // temps écoulé entre 2 appels à millis
        // calculs sur dt
     
        t1 = t2:   
        flag = true; //pour informer dans le loop qu'une nouvelle donnée est disponible pour l'affichage.
    }

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Pour plus de précision lors du calcul je voudrais faire mon calcul non pas à chaque passage du trou devant le capteur mais tous les n passages. J'ai essayé d'adapter les recommandations à mon code. Quand je le vérifie il y a le message d'erreur " exit status 1 'nouveauTourInterrupt was not delared in this scope "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    //capteur port OUT relié au pin2 de l'arduino
    const int pinCapteur=2;//on utilise le pin 2 (avec arduino uno pin 2 ou 3 pour les interruptions)
    // pour le pin2 l'interruption se fait sur le pin0
     
    // Initialisation des variables
    volatile unsigned int Mesure; //variable qui compte le nombre de mesures
    volatile float trmin; // variable qui affichera la vitesse du disque en tour/min
    volatile unsigned long temps; //sert à déterminer le temps que met le disque pour réaliser exactement un tour
    volatile int tour; //compte le nombre de tours du disque
    volatile const int n=100;  //nombre de tours du disque avant de faire le calcul de vitesse
    volatile unsigned long dT;
     
    void setup() {
      Serial.begin(9600);   //connection au port série 
      pinMode(pinCapteur, INPUT); //connection du capteur au pin2 de l'arduino
     
      //Initialisation des variables
      tour=0;
      trmin=0;
      Mesure=0;
      temps=millis(); 
     
      //on appelle la fonction NouveauTourInterrupt dès qu'il y a un changement d'état abscence(HIGH) vers présence(LOW) du trou du disque, c'est à dire dès que le disque fait exactement un tour
      //attachInterrupt(interruption,fonction,mode)
      attachInterrupt(0,nouveauTourInterrupt,FALLING);
    }
     
    void loop() {
      }  
    }
     
    //Dès qu'il y a 1 nouveau tour on appelle  la fonction
    void nouveauTourInterrupt() {
      tour++;
       // si il y a eu n tours du disque
      if (tour >= n){
        // trmin= (n* 60000)/ (temps écoulé pour faire n tours du disque en minute 1min=60 000ms
        //entre temps2 et temps1 il y a eu exactement 1 tour
        dT=millis()-temps;
        trmin= ((unsigned long)60000*n)/(dT); 
        Mesure++;
     
        Serial.print("Mesure:");
        Serial.print(Mesure);
        Serial.print("vitesse en tour/min: ");
        Serial.println(trmin);
        //Serial.print("nb de tours: ");
        //Serial.println(tour);
        //Serial.print("temps entre deux mesures en ms: ");
        //Serial.println(dT);
        //Réinitialisation du temps et du nombre de tours
        temps=millis();
        tour=0;
      //Serial.println(tour);
    }

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Il y a une accolade en trop

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Il y a une accolade en trop
    Merci!

    Le problème persiste. J'obtiens des valeurs beaucoup trop élevées : plus de 10000 tr/min avec un moteur 24V qui peut aller jusqu'à 3000 tr/mi selon le constructeur alimenté en 5V

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Quelles sont les caractéristiques de ton capteur ? Ou as-tu une référence ?

    Autre point concernant le code et que j'ai mis en remarque :
    Citation Envoyé par Auteur
    // ne pas appeler serial.println() dans une fonction d'interruption

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    C'est un capteur optique que j'ai commandé sur ebay sur le lien http://www.ebay.com/itm/400364492556?rmvSB=true
    Je n'ai pas trouvé ses caractéristiques

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    Je ne vois pas se qui cloche dans ton code, à part les deux petits commentaires que Auteur a fait (messages #2 et #6). Il serait mieux organisé à avoir la mesure dans l'interruption et l'envoi dans la boucle principale, comme l'indique Auteur, mais en l'état cela ne gène pas la mesure.
    Tu nous donnes une référence de la fourche / barrière optique, mais c'est quoi qui passe dedans?

    Bonne fin de week-end

    Delias

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Delias Voir le message

    Je ne vois pas se qui cloche dans ton code
    Delias
    Le problème vient du comptage de la variable tour. Elle compte environ 4 fois trop vite le nombre de fois où le trou passe devant le capteur. Je soupçonne le capteur, j'en ai donc acheté un autre http://www.conrad.fr/ce/fr/product/1...3ayxoCOL3w_wcB
    Mais je n'ai pas pu le tester car je ne trouve pas de plaque avec les 3 sorties GND +5V et OUT pour le câbler. Si quelqu'un pourrait me donner un lien où je pourrais m'en procurer une, je pourrais tester le programme avec ce capteur et voir si ça fonctionne.

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    Au risque de me répéter, elle est comment la pièce qui passe dans la barrière optique (forme, matériel, couleur, brillant ou mat)?
    A défaut oscilloscope (c'est l'artillerie lourde, mais tellement pratique) pour mesurer le signal, il faudrait:
    - Vérifier l'état du signal avec une rotation du moteur à la main donc très lente. Soit avec la led embarquée sur le capteur (si elle fait bien cela) soit avec un programme hyper basique.
    - Mesurer les intervalles entre chaque interruptions. Pour éviter de surcharger le port série, faire 10, 20 ou 40 mesures, puis les envoyer en sautant autant voir plus de mesures.

    Delias

  13. #13
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Moi non plus je ne vois pas de problème dans le programme.

    Par contre j'ai plein de questions !

    Citation Envoyé par capteurtipe
    plus de 10000 tr/min avec un moteur 24V qui peut aller jusqu'à 3000 tr/mi selon le constructeur alimenté en 5V
    Tu peux nous expliquer un peu le reste de ton expérimentation ? Comment tu sais que ton Arduino t'indique des valeurs trop élevées ? Qu'elles sont les caractéristiques du moteur (il faut une doc constructeur) ? Montre nous ce qui passe dans le fourche optique ?

    As tu déboguer fonctionnellement ton programme ? J'entends pas là, faire un programme test qui valide fonctionnellement, à minima la base sur laquelle tu vas démarrer ton vrai programme.

    Par exemple ce programme (je ne l'ai pas compilé) :
    • faire tourner le disque doucement et à la main pour constater que ça compte bien.
    • lancer rapidement le disque avec ta main et constater si il n'y a pas d’aberration (tu dois voir une suite du genre 1,2,3,4,5,6,7,....,100,101,102)


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    const int pinCapteur=2;
    unsigned int ok, n;
     
    void setup() 
    {
      Serial.begin(9600);   
      pinMode(pinCapteur, INPUT); 
      ok = 0;
      n = 0;
      attachInterrupt(0,nouveauTourInterrupt,FALLING);
    }
     
    void loop() 
    {
       if (ok)
       {
          Serial.print(n);
          Serial.print(",");
          ok = 0;
       }
    }
     
    void nouveauTourInterrupt() 
    {
       n++;
       ok = 1;
    }

    Si rien qu'a ce niveau là, il y a un problème du genre une suite qui ressemblerait à 1,2,3,4,34,64,77,....,100,133,147 bon bah c'est sur que le Arduino va indiquer n'importe quoi. Et là c'est effectivement la fourche qui a problème.

    Je suis tenté de dire : c'est par là qu'il fallait commencer




    [EDIT]
    Pas fait attention au message précédent de Delias !
    +1
    Si les fondations n'ont pas été vérifiés et revérifiés, la construction a toutes les chances de s'effondrer.
    [/EDIT]
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  14. #14
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 728
    Points
    56 728
    Billets dans le blog
    40
    Par défaut
    Bonsoir à tous

    Citation Envoyé par capteurtipe Voir le message
    C'est un capteur optique que j'ai commandé sur ebay sur le lien http://www.ebay.com/itm/400364492556?rmvSB=true
    Je n'ai pas trouvé ses caractéristiques
    Je pense que le circuit ressemble approximativement à quelque chose comme ça :


    Citation Envoyé par capteurtipe Voir le message
    Je soupçonne le capteur, j'en ai donc acheté un autre http://www.conrad.fr/ce/fr/product/1...3ayxoCOL3w_wcB
    Mais je n'ai pas pu le tester car je ne trouve pas de plaque avec les 3 sorties GND +5V et OUT pour le câbler. Si quelqu'un pourrait me donner un lien où je pourrais m'en procurer une, je pourrais tester le programme avec ce capteur et voir si ça fonctionne.
    La panne du capteur reste à démontrer. Essaie de filmer la led infrarouge avec ton téléphone portable. Si tu vois un point rouge/violet, c'est déjà ça...

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous.

    Je cherche à calculer la vitesse de rotation d'un disque de cuivre avec mon capteur. Le dispositif est composé d'un ferromagnétique, d'une bobine à intensité variable,d'un moteur, de deux alimentations (une pour la bobine et une pour le moteur) et de mon disque. Je n'ai pas voulu trouer mon disque, j'ai donc placé également sur l'arbre moteur un disque en papier troué de diamètre un peu plus grand que mon disque. Le disque tourne sur l'arbre moteur au niveau d'un entrefer et en jouant sur l'intensité envoyé à la bobine la vitesse du disque tend à diminuer. C'est le phénomène que je cherche à quantifier.

    Lien où j'ai acheté mon moteur https://www.rs-particuliers.com/WebC...n-2483671.aspx
    il peut donc aller jusqu'à 3500 tr/min d'après le constructeur.

    J'ai déjà créer un programme simple pour vérifier la présence d'un objet devant mon capteur, il fonctionne. A chaque fois qu'un objet passe devant lui la led s’éteint. J'ai également déjà diminué la vitesse de rotation de mon disque de sorte à voir le trou passer à l’œil nu et fait défiler le comptage de la variable tour. C'est là que j'ai vu le problème que vous m'avez décrit (1,2,3,4,8,13,17,21 ..). J'ai observé ce problème à faible vitesse et aussi à grande. J'ai fait cela en labo, le weekend je n'ai pas d'alimentation 24V j'alimente donc mon moteur avec l'arduino.

  16. #16
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Delias Voir le message
    Bonsoir
    - Vérifier l'état du signal avec une rotation du moteur à la main donc très lente. Soit avec la led embarquée sur le capteur (si elle fait bien cela) soit avec un programme hyper basique.
    - Mesurer les intervalles entre chaque interruptions. Pour éviter de surcharger le port série, faire 10, 20 ou 40 mesures, puis les envoyer en sautant autant voir plus de mesures.

    Delias
    J'ai aussi déja mesuré les intervalles de temps entre chaque interruption. Ils semblent cohérents avec la valeur de vitesse de rotation donnée par le programme et à vitesse constante les intervalles diffèrent peu (quelques micro secondes)

  17. #17
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par capteurtipe Voir le message
    Je cherche à calculer la vitesse de rotation d'un disque de cuivre avec mon capteur. Le dispositif est composé d'un ferromagnétique, d'une bobine à intensité variable,d'un moteur, de deux alimentations (une pour la bobine et une pour le moteur) et de mon disque. Je n'ai pas voulu trouer mon disque, j'ai donc placé également sur l'arbre moteur un disque en papier troué de diamètre un peu plus grand que mon disque. Le disque tourne sur l'arbre moteur au niveau d'un entrefer et en jouant sur l'intensité envoyé à la bobine la vitesse du disque tend à diminuer.
    Quel est le diamètre du disque ?
    Donc si je comprends bien, lorsque tu fais passer un courant dans ton entre-fer, tu crées une force électromagnétique qui provoque un ralentissement de ton arbre ?

  18. #18
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Du coup, pour tester mon nouveau capteur http://www.conrad.fr/ce/fr/product/1...3ayxoCOL3w_wcB il me faudrait une plaque de branchement mais je n'arrive pas à en trouver une. Je me suis un peu précipitée dans cet achat mais ça m’embêterai de devoir acheter un 3eme capteur avec le branchement +5V GND et OUT intégré.

  19. #19
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 26
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Quel est le diamètre du disque ?
    Donc si je comprends bien, lorsque tu fais passer un courant dans ton entre-fer, tu crées une force électromagnétique qui provoque un ralentissement de ton arbre ?
    Oui c'est exactement ça. Il fait 127 mm de diamètre

  20. #20
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Citation Envoyé par capteurtipe Voir le message
    J'ai également déjà diminué la vitesse de rotation de mon disque de sorte à voir le trou passer à l’œil nu et fait défiler le comptage de la variable tour. C'est là que j'ai vu le problème que vous m'avez décrit (1,2,3,4,8,13,17,21 ..). J'ai observé ce problème à faible vitesse et aussi à grande. J'ai fait cela en labo, le weekend je n'ai pas d'alimentation 24V j'alimente donc mon moteur avec l'arduino.
    Plusieurs choses.

    Avec le programme de test que j'ai donné, il est normal que la suite perde sa cohérence à grande vitesse mais pas avec une faible vitesse de rotation. Si vraiment tu arrivais à compter les tours à l'oeil alors ce n'est pas normal d'avoir la suite que tu as eu.

    N'alimentes pas ton moteur avec le 5V de ton Arduino. Tu vas effondrer l'alimentation et elle pourrait casser.

    Je ne suis pas sur que le problème vienne du capteur.

    As tu accès à un oscilloscope ?
    Il faut refaire un essai sans le moteur avec un disque que tu lancera à la main et vérifier plusieurs fois pour voir si la suite présente une aberration aux mêmes endroits.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/03/2017, 01h05
  2. Capteur de vitesse de rotation d'un banc d'essai
    Par TinyFactory dans le forum LabVIEW
    Réponses: 1
    Dernier message: 17/03/2017, 09h30
  3. Réponses: 1
    Dernier message: 28/06/2011, 15h51
  4. Comment faire des calculs de Rotation avec Ogre
    Par Rumpel dans le forum Ogre
    Réponses: 0
    Dernier message: 22/07/2009, 18h15
  5. Calculer un inverse de matrice avec boost?
    Par Clad3 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 02/06/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo