Catégories
Algorithme Arduino capteur électronique moteur Projets Arduino Projets électroniques

Tachymètre Numérique #3: Mesure de la vitesse – Technique II

Objectifs

  1. Savoir l’importance du capteur à effet Hall
  2. Savoir utiliser un compteur de vitesse
  3. Savoir l’utilité du capteur de vitesse
  4. Savoir les caractéristiques du compteur
  5. Savoir mesurer la vitesse de rotation d’un moteur
  6. Savoir mesurer la fréquence d’un signal (deux méthodes)
  7. Savoir utiliser un tachymètre pour la mesure de la vitesse
  8. Savoir réduire l’erreur de la mesure
  9. Savoir mesurer la largeur d’une impulsion
  10. Etc.

Caractéristiques du compteur de vitesse

Compteur de vitesse

Le compteur de vitesse est similaire à un fréquencemètre numérique. Elle permet de mesurer la fréquence d’un signal TOR.  Il suffit de multiplier la fréquence par 60 pour en déduire la vitesse en tr/min (RPM). Le module contient un µC STM8S003F3 et un afficheur 4 digits. Ci-dessous les caractéristiques techniques de l’afficheur.

  • Modèle : CF5135C-Z
  • Microcontrôleur : STM8S003F3
  • Capteur de proximité : NJK-5002C
  • Type d’affichage : affichage LED
  • Couleur de l’écran : Bleu
  • Tension de travail : 8-24V DC
  • Courant : 30 ~ 200mA
  • Plage de mesure : 10-9999 rpm (0.16-166 Hz)
  • Précision : 0.1%
  • Taux de rafraîchissement de l’écran : >3 fois / s (3 Hz)
  • Dimensions de l’installation : 76 x 39mm
  • Dimensions : 79 x 32 x 42mm
  • Poids net: 108g

Voir le tuto pour un câblage correct (sans incident) de l’afficheur).

pinout afficheur de vitesse

Caractéristiques du capteur magnétique

Datasheet du capteur ICI. 

Programme Arduino

Le programme est identique à celui utilisé dans la partie 2 (voir le tuto pour plus de détails techniques).

#define squareOut   8             // Sortie Carrée
#define F0 984.0 // Valeur approchée de la fréquence


void setup()
{
// ADC
analogReadResolution(12); // Ajustable <= 12 (4096 Niveaux)

// Output
analogWrite(squareOut,128); // 0-255

// Input
pinMode(squareOut+1, INPUT);

// Affichage
Serial.begin(250000);
}

void loop()
{
//Serial.println(analogRead(A0)); delay(100); return; // TEST!!


// 1. Mesure via la fonction pulseIn()
/*
unsigned long T_l=pulseIn(squareOut+1, LOW);
unsigned long T_h=pulseIn(squareOut+1, HIGH);
Serial.print(1.0/((float)(T_l)*2.0*1E-6));Serial.print("\t");
Serial.print(1.0/((float)(T_h)*2.0*1E-6));Serial.print("\t");
//Serial.println(1.0/((float)(T_l+T_h)*1E-6));return;
Serial.print(1.0/((float)(T_l+T_h)*1E-6));Serial.print("\t");
*/

// 2. Mesure via la fonction getFreqHz()
int nn=1024; // Filtrage de la fréquence
float F=0.0; // Fréquence en Hz
int s_max=1000; // Seuil maximal
int s_min=100; // Seuil minimal
int Pin=0; // Pin A0, (1)A1, (2)A2, etc.

// Mesure de la fréquence (Pins Analogiques!!)
for(int i=0; i<nn; i++)F+=getFreqHz(Pin, s_max,s_min);
F=F/(float)nn;

// Affichage
Serial.println(F*60.0);
}


float getFreqHz(int Ai, int s_max, int s_min)
{
static long T_2=0, T_1=0;
static int ai_1=0, ai_2=0;
static float freq=0.0;

ai_1=analogRead(54+Ai);
if((ai_2-ai_1)>s_max)
{
T_2=micros()-T_1;
freq=1.0/((float)T_2*1E-6);
T_1=micros();
}
ai_2=ai_1;
return freq;
}

Laisser un commentaire