Bonsoir à tous et merci pour vos réponses qui m'on bien aiguillé, j'ai réussi à faire un programme qui permet de définir la durée entre chaque passage d'aimant devant le capteur à effet hall (tout ou rien),
j'en déduis la fréquence et ensuite j'affiche la fréquence sur le moniteur en série (bientôt sur un écran ou un afficheur 7 segments).
Christian_R:
Avec un seul aimant il faut au plus 2 tours complets de pédalier pour faire une mesure, car 2 passages consécutifs de l'aimant sont nécessaires. (échantillonner à 2F pour mesurer la fréquence F, théorème de Shannon).
La précision dépendra du temps de réponse du capteur, de son hystérésis.
On peut à priori atteindre une forte précision sans mettre des dizaines d'aimants, l'Arduino peut mesurer des intervalles temporels très précisément en utilisant les interruptions.
J'ai donc suivi le conseil de Christian j'ai mis deux aimants, je connais le théorème de Shannon sur l’échantillonnage et je me demande donc comment connaître la précision de ces mesures et si il faudrait passer de 2 à 4 aimants car Fe⩾2Fmax , et plus on augmente Fe et mieux c'est.
pepe:
Avec un seul aimant sur le plateau du pédalier, avec une période de mesure inférieure ou égale à 1 seconde on peut mesurer des vitesses de pédalage supérieures ou égales de 60 tr/mn avec une erreur de l'ordre de ±0,06 tr/mn (hors erreur due au capteur) en utilisant la fonction millis().
Pour des vitesses de pédalage inférieures, on est obligé d'augmenter la période des mesures (pour que l'aimant ait le temps de faire un tour) mais en contrepartie la précision augmente : pour 3 tr/mn (changement de pédale toutes les 10 secondes) on obtient une mesure toutes les 20 secondes avec une erreur de ±0,00015 tr/mn (hors erreur capteur).
La multiplication des aimants trouverait donc plutôt son utilité dans le maintien d'une fréquence de mesure acceptable aux faibles vitesses de pédalage. Toutefois, quand on utilise plusieurs aimants, leur positionnement relatif introduit une cause d'erreur supplémentaire.
Je ne comprends pas comment calcules les erreurs comme ±0,06 tr/mn, ±0,00015 tr/mn, ... Est-ce que tu pourrais m'indiquer tes calculs je t'en serais très reconnaissant. et selon toi combien d'aimant devrais-je mettre afin d'avoir une erreur la plus petite possible tout en ayant le système le plus simple. Pour le placement des aimants j'ai fabriqué une maquette de pédalier, représenté par un disque dans lequel j'ai découpé des trous du diamètre des aimants avec la découpe laser et grâce à solidworks. Et je tiens à rappeler que les fréquences moyennes des cyclistes lambda sont de 60 à 90 tr/min
Je vous remercie tous pour votre aide merci
Voici mon programme, y aurait'il des erreurs ou des méthodes plus simples? :
const int ledPin = 2;
const int hallPin = 4;
const int nombre_aimant = 1 ;
float a = 0;
float b = 0;
float c = 0;
float d = 0;
int sensorValue;
unsigned long ot = 0;
unsigned long ft = 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)
{
float dt = millis() - ot;
ot = millis();
Serial.println("Temps entre deux impulsions:");
Serial.print(dt);
Serial.print(" ms\n");
a= dt * nombre_aimant;
b = a / 1000 ;
//Convertion des ms en s de la période T
c = 1/b;
//calcul de la fréquence F avec F=1/T, on a le résultat en Hz
d = c * 60;
// Convertion de Hz en Tr/min
Serial.println("Fréquence de pédalage:");
Serial.println(d);
reset = false;
}
else if (sensorValue != LOW && !reset)
reset = true;
// Allumer eteindre la LED
digitalWrite( ledPin, sensorValue );