compteur de vitesse avec capteur à effet hall

Bonjour, nous avons un projet consistant à relever une vitesse de rotation de la roue grâce au capteur à effet hall et a un aimant placé sur l'un des rayons de la roue.
Nous possédons donc:
-Un aimant
-Un capteur à effet hall
-Un moteur à courant continu 5V
-Une carte arduino Uno
Notre support est un vélo pour enfant et le but de notre projet est de relever des roulettes escamotables lorsque la roue atteint une vitesse supérieur à 20tr/min.

J'espère avoir été clair dans mes propos et que vous serez apte à nous répondre Merci

Bonjour,

Ce ne sont pas les projets de mesure de vitesse avec capteur à effet hall qui manquent (y compris sur ce forum). Tu as fait une recherche?

Nous avons en effet procédé a de nombreuses recherches qui n'ont données aucun résultats, c'est pour cela que nous avons pris la décision de poster cette demande d'aide.
Merci de votre efficacité

En clair ,
Nous travaillons sur un vélo avec des roulettes escamotables, le but étant de relever les roulettes quand la vitesse de la roue arrière dépasse les 20 tr/min, nous possédons actuellement un capteur à Effet hall adaptable sur groove, un moteur à courant continu, nous devons alimenter le système en 5 volt, Nous installerons aussi un aimant sur l'un des rayons de la roue concerné pour pouvoir effectuer une impulsion à chaque fois que celui ci passe devant le capteur.
Pour cela, nous devons réaliser un programme sur arduino:

  • Tout d'abord, on ne sait pas instaurer une base de temps pour les étapes qu'il vont suivre.
  • Dès qu'il y a une première impulsion ( l'aimant passe devant le capteur), on réinitialise le temps soit T=0 et on calcul le temps entre l'impulsion précédente et celle qui suit . Et si ce temps est inférieur à 3secondes ( 20tr/min => 3sec/tour donc si T<3sec alors on lève les roulettes). Et puis dans la suite du programme instaurer une condition dès que la première est à 1 (soit roulettes escamotables levées) , CONDITION: dès que la vitesse entre deux impulsions est de nouveau supérieur ou égale à 3sec/tour on fait descendre les roulettes escamotables au sol.

Voilà Merci

Il y a la fonction millis() qui fournit une base de temps accessible par le software.
Si tu relèves la valeur de millis() à chaque passage de l'aimant tu peux en déduire le temps entre 2 passages et donc la vitesse de rotation.

Merci fdufnews, je dois donc simplement utiliser cette fonction ??

Je me suis inspirer d'un code et j'en suis à ici

const int ledPin = 2; 
const int hallPin = 4;

int sensorValue; 
unsigned long ot = 0;
bool reset = true;

void setup()
{
pinMode( ledPin, OUTPUT ); 
pinMode( hallPin, INPUT );

Serial.begin(9600);
}

void loop() 
{
// lecture du capteur a Effet Hall
sensorValue = digitalRead( hallPin );

// senseurValue = HIGH sans aimant
// senseurValue = LOW  quand POLE SUD aimant
sensorValue = not( sensorValue );

if (sensorValue == LOW && reset)
{
  unsigned long dt = millis() - ot;
  ot = millis();
  
  Serial.print("Temps entre deux impulsions:      ");
  Serial.print(dt);
  Serial.print(" ms\n");
  reset = false;

  
}
else if (sensorValue != LOW && !reset)
  reset = true;

// Allumer eteindre la LED
digitalWrite( ledPin, sensorValue );
}

J'ai dont dt qui est le temps entre deux impulsions j'aimerais le comparer et mettre a HIGH la sortie 3 par exemple si dt<3000

Comment dois-je faire ? Merci

il suffit de faire

if (dt<3000)
 digitalWrite(3,HIGH);

Merci Kamil mais je voudrais savoir ou le placer car si je le mets dans la mm boucle ca ne fonctionnera pas et si creer une nouvelle boucle bah il faut que je redefinisse les variables n est ce pas ???

Avez-vous eu un minimum de réflexion sur la structure du programme et son algorithme avant de commencer à coder?

ProjetTle:
Merci Kamil mais je voudrais savoir ou le placer

Tu le mets juste après le calcul ou l'affichage de dt.
Le problème c'est que tu mets la sortie à HIGH, mais quand est ce qu'elle doit repasser à LOW?

Bonjour,
Je me suis intéressé à votre projet et mais je n'arrive pas à comprendre deux parties de votre programme:

else if (sensorValue != LOW && !reset)
  reset = true;

// Allumer eteindre la LED
digitalWrite( ledPin, sensorValue );
}

et

if (sensorValue == LOW && reset)

Je ne comprends pas l'utilité du LOW && reset
ainsi que la "syntaxe" du ! au else

Merci de vos attention, vous me sauver la vie si vous réponder