Aller au contenu

GO Print

calculateur de vitesse angulaire


r le millavois

Messages recommandés

Salutation ! 

Je ne suis que débutant avec Arduino mais on sais jamais ... 

A tu a trouvé de la doc. sur t'on capteur avec des exemples de code Arduino ? 

Tu bloc sur quoi ? le codage du sketch, le montage du circuit ? Tu a quoi comme arduino un nano, Uno ... ?

Lien vers le commentaire
Partager sur d’autres sites

je te remercie de ta réponse rapide. 

j'ai une Arduino UNO

branchement:

VCC->+5v

GND->GND(0v)

D0->D2 de l'Arduino

j'ai joins une datasheet que j'ai trouvée sur mon capteur

j'ai écrit ce code, mais il ne fonctionne pas, aurait tu une idée?

  int a=0;
  int tempo=0;
void setup() {
pinMode(2,INPUT);
Serial.begin(9600);
}
void loop() {

  if (digitalRead(2)==1)
  {
    a=a+1;
  }
  if(tempo>=1000)
  {
    tempo=0;
    a=0;
  }  
  Serial.print("a=");
  Serial.print(a);
  Serial.println(" tr");
  Serial.print("tempo=");
  Serial.print(tempo);
  Serial.println("ms");
  Serial.println(" ");
 
  delay(100);
tempo=tempo+100;

}

 

dattasheetmodule.pdf

Lien vers le commentaire
Partager sur d’autres sites

@r le millavois

le code semble mal collé ou alors vraiment incomplet ! drop plutôt le fichier !

Tu a déjà codé ? en C ou Java ? Tu a quelle niveau en codage ?

Lien vers le commentaire
Partager sur d’autres sites

Il y a 12 heures, PPAC a dit :

@r le millavois

le code semble mal collé ou alors vraiment incomplet ! drop plutôt le fichier !

Tu a déjà codé ? en C ou Java ? Tu a quelle niveau en codage ?

non je viens de commencer le codage 

 

Il y a 12 heures, remibora a dit :

Salut,

Tu as un exemple ici.

mais ce n'est pas le même capteur, fonctionne t'il de la même manière. 

je ne comprend pas la fonction "timeold", peut tu m'éclairer?

Lien vers le commentaire
Partager sur d’autres sites

Une bonne pratique ai de mettre une entête du genre :

/*
Petit example d'entête pour un programme arduino
Fichier : monfichier.ino
Version : 0
Dernière modification : 13/02/2021
Auteur : PPAC

Description : ....

Connexion(s) / branchement:
VCC->+5v
GND->GND(0v)
D0->D2 de l'Arduino
*/
// Déclaration des variables
//...
// Boucle principal
void loop(){
...
}
Modifié (le) par PPAC
Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, r le millavois a dit :

ce n'est pas le même capteur, fonctionne t'il de la même manière

oui puisqu'il te donne des changements d'état à chaque fois qu'un élément passe devant le détecteur.

il y a 2 minutes, r le millavois a dit :

timeold

c'est le temps avant la tempo de 1000ms = 1s. Tu fais la conversion: nb tour/s = rpmcount / (nb de changement d'état sur ta roue codeuse / tour) / (temps)

avec temps = millis() - timeold

  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

nop pas exactement le même capteur mais pour le codage il faut souvent regarder d'autre exemple pour trouver des idées / solutions / techniques ...

timeold n'ai pas une fonction juste une variable ...

Modifié (le) par PPAC
Lien vers le commentaire
Partager sur d’autres sites

merci pour ces précisions.

donc en théorie si je téléverse ce programme ca me donne la vitesse angulaire en tr/minute?

 

Il y a 12 heures, r le millavois a dit :

merci pour ces précisions.

donc en théorie si je téléverse ce programme ca me donne la vitesse angulaire en tr/minute?

/*
Fichier : test_RPM
Version : 0
Dernière modification : 13/03/2021
Auteur : r le millavois

Description : vitesse angulaire

Connexion(s) / branchement:
VCC->+5v
GND->GND(0v)
D0->D2 de l'Arduino*/
int ledPin = 13;                // IR LED connected to digital pin 13
int statusPin = 12;             // LED connected to digital pin 12

volatile byte rpmcount;
volatile int status;

unsigned int rpm;

unsigned long timeold;

 void rpm_fun()
 {
   //Each rotation, this interrupt function is run twice, so take that into consideration for 
   //calculating RPM
   //Update count
      rpmcount++;
      
   //Toggle status LED   
   if (status == LOW) {
     status = HIGH;
   } else {
     status = LOW;
   }
   digitalWrite(statusPin, status);
 }

void setup()
 {
   Serial.begin(9600);
   //Interrupt 0 is digital pin 2, so that is where the IR detector is connected
   //Triggers on FALLING (change from HIGH to LOW)
   attachInterrupt(0, rpm_fun, FALLING);
   
   //Turn on IR LED
   pinMode(ledPin, OUTPUT); 
   digitalWrite(ledPin, HIGH);
   
   //Use statusPin to flash along with interrupts
   pinMode(statusPin, OUTPUT);

   rpmcount = 0;
   rpm = 0;
   timeold = 0;
   status = LOW;
 }

 void loop()
 {
   //Update RPM every second
   delay(1000);
   //Don't process interrupts during calculations
   detachInterrupt(0);
   //Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
   //happened once per revolution instead of twice. Other multiples could be used
   //for multi-bladed propellers or fans
   rpm = 30*1000/(millis() - timeold)*rpmcount;
   timeold = millis();
   rpmcount = 0;
   
   //Write it out to serial port
   Serial.println(rpm,DEC);
   
   //Restart the interrupt processing
   attachInterrupt(0, rpm_fun, FALLING);

  }
Lien vers le commentaire
Partager sur d’autres sites

Avec les bon  PIN pour les connexions a ton capteur ... pourquoi pas ...

Edit : prend bien le temps de le comprendre, plusieurs lecture , de rechercher se que tu ne comprend pas ...

Modifié (le) par PPAC
  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

Si tu connectes la sortie du détecteur sur la pin 2 et que tu as 2 impulsions par tour alors tu auras la vitesse en tour/min.

Les pins 12 et 13 (et tout ce qui s'y rapporte) sont inutiles dans ton cas

Modifié (le) par remibora
  • Merci ! 1
Lien vers le commentaire
Partager sur d’autres sites

Ba en fait là je suis moi aussi un peux dépassé ... il me faut plus de temps et de relecture pour être certain ....

Puis il fraudais que tu comprenne bien ceci : 

//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
   //Triggers on FALLING (change from HIGH to LOW)
   attachInterrupt(0, rpm_fun, FALLING);


   

Modifié (le) par PPAC
Lien vers le commentaire
Partager sur d’autres sites

Le principe ici est d'utiliser une interruption (int0 = sous-programme appelé à chaque front descendant de D2), qui va incrémenter un compteur (rpmcount) à chaque front descendant (Falling) de l'entrée D2 (l'interruption 0 est liée à cette entrée par définition de l'interruption 0):

attachInterrupt(0, rpm_fun, FALLING);

Modifié (le) par remibora
  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

Prend le temps pour chaque ligne, de bien comprendre se quelle fait !

ajoute des commentaires pour faciliter plus tard la relecture / compréhension ...

même mettre un commentaire genre

// ba là je comprend pas ... 

cela t'aidera a retrouver plus vite se que tu devras chercher dans des doc de référence.

Lien vers le commentaire
Partager sur d’autres sites

il y a 10 minutes, r le millavois a dit :

y aurait il un code simple qui donne la vitesse en RPM en quelques lignes avec mon capteur connecté au pin 2

lol, il est pas bien celui-là (sans la gestion des pins 12 et 13)?

Citation

void rpm_fun() {
   rpmcount++;         //Toggle status LED      
}

void setup() {
   Serial.begin(9600);   
   //Interrupt 0 is digital pin 2, so that is where  the IR detector is connected, Triggers on FALLING (change from HIGH to LOW)   
   attachInterrupt(0, rpm_fun, FALLING);      //incremente le compteur  rpmcount à chaque front descendant de D2
   rpmcount = 0;   
   rpm = 0;   
   timeold = 0;   
}

void loop() {
   //Update RPM every second   
   delay(1000);   
   //Do not post process interrupts during calculations   
   detachInterrupt(0);   
   rpm = 30*1000/(millis() - timeold)*rpmcount;
   timeold = millis();
   rpmcount = 0;
   //Write it out to serial port   
   Serial.println(rpm,DEC);
   //Restart the interrupt processing
   attachInterrupt(0, rpm_fun, FALLING);
}

 

il y a 9 minutes, r le millavois a dit :

quel doc de référence?

celle-ci par exemple.

Modifié (le) par remibora
Lien vers le commentaire
Partager sur d’autres sites

par exemple : https://www.arduino.cc/reference/en/ pour les fonctions arduino !

Oui @remiborasemble te donner une solution clé en main mais il serai judicieux de la comprendre parfaitement !

Modifié (le) par PPAC
  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

ba il fraudais que tu arrive a le déterminer toi même ! sinon tu n'aura pas appris grand chose !

@r le millavois il dois te manquer l'entête et la déclaration des variables ...

Modifié (le) par PPAC
Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...