La librairie "Ticks"

vendredi 14 juin 2013
par  Finizi
popularité : 18%

Une librairie pour compter les impulsions et calculer des débits ou des fréquences.


 Présentation de la librairie Ticks

La librairie Ticks pour Arduino permet par exemple de gérer un anémomètre ou un débitmètre. Ce genre de dispositif envoie régulièrement des impulsions, pas forcément très fréquentes, et il s’agit de les compter sur un certain laps de temps et d’en déduire la fréquence, puis une vitesse de vente ou un débit.


 Contenu de la librairie Ticks

Comme toutes les librairies Arduino, la librairie Ticks se compose d’un fichier header (Ticks.h) et d’un fichier de code (Ticks.cpp), le tout dans le dossier Ticks à placer

.

Le Constructeur

Ticks myTicks(numInterrupt, pinFlowMeter, period);

Le constructeur donne accès aux fonctions de la librairie Ticks. Le constructeur à besoin des 3 paramètres suivants :

  • numInterrupt  : C’est le numéro de l’interruption à utiliser. Sur Arduino Uno, il y a le choix entre 0 (attaché à la broche 2) ou 1 (attaché à la broche 3). L’Arduino Mega 2560 dispose de 4 broches supplémentaires : 2 (broche 21), 3 (broche 20), 4 (broche 19) et 5 (broche 18).
  • pinTicks  : Numéro de la broche à utiliser. Sur Arduino Uno, deux broches sont disponibles : La 2 pour l’interruption n°0 et la 3 pour l’interruption n°1.
  • period  : Période de base, en millisecondes. Si sa valeur est 1000, il sera possible d’avoir, outre la fréquence instantanée, les fréquences moyennes sur 1, 5 et 25 secondes. Si sa valeur est 2000, les fréquences moyennes sur 2, 10 et 50 secondes seront disponibles.

.

Les Fonctions de la librairie

La librairie Ticks expose les fonctions suivantes :

  • (void) begin()  : Pour initialiser la classe Ticks, commencer à compter les Ticks afin de pouvoir calculer le fréquence.
  • (void) operate()  : Permet, à chaque itération de loop(), de mettre à jour la fréquence instatanée, et si les conditions sont remplies, les fréquences moyennes.
  • (int) currentTicks()  : Renvoie le nombre de Ticks comptés depuis le début. Au bout de 65535 ticks, le compteur recommence à 0.
  • (float) instantTickRate()  : Donne la fréquence instantanée calculée entre chaque appel de la fonction operate(). Si chaque itération de la fonction loop() dure 100 ms, cette fréquence sera calculée sur cette période. Il faut comprendre que sur une durée aussi courte, il peut ne pas y avoir de tick, ce qui donnera une fréquence à 0. De même, un tick détecté dans ce laps de temps donnera une fréquence de 10 Hz.
  • (float) TickRate1Period()  : Donne la fréquence (Ticks par seconde, ou Hz) mesurée sur la dernière périodes.
  • (float) TickRate5Period()  : Donne la fréquence (Ticks par seconde, ou Hz) mesurée sur les 5 dernières périodes.
  • (float) TickRate25Period()  : Donne la fréquence (Ticks par seconde, ou Hz) mesurée sur les 25 dernières périodes, par bloc de 5 périodes.

.

Téléchargement et installation

La dernière version de la librairie est disponible ici. Extraire l’archive et déposer le répertoire "Ticks" dans le répertoire Arduino/libraries/ Relancer le logiciel Arduino. La librairie doit maintenant être présente dans le menu " /skecth/Import Library/ ".

Le code est également disponible sur GitHub.


 Exemple d’utilisation

L’exemple d’utilisation porte sur la récupération des données issues d’un débitmètre basique, en l’occurrence le YF-S201 disponible chez GoTronic. On affiche alors

  • le nombre instantané de ticks par seconde, ici mesuré sur une demi seconde (delay(500) dans la boucle).
  • le nombre moyen de ticks par seconde sur 1 seconde
  • le nombre moyen de ticks par seconde sur 5 secondes
  • le nombre moyen de ticks par seconde sur 25 secondes
  • le débit moyen sur 25 secondes, en litre/minute

Et voici le code de l’exemple distribué avec la librairie :

  1.  
  2. /*
  3. **
  4. ** FlowMeter
  5. **
  6. ** FlowMeter read sample
  7. **
  8. ** http://www.domoenergytics.com
  9. ** This example code is in the public domain.
  10. */
  11.  
  12. #include "Ticks.h"
  13.  
  14. const byte pinFlowMeter = 2;    // data pin for FlowMeter sensor
  15. const byte numInterrupt = 0;    // Interrupt number
  16. const int period = 1000;        // Base periode, in milliseconds
  17.  
  18. const float CoefLitMin = 7.4;
  19.  
  20. // Instantiate the class for counting ticks
  21. Ticks myTicks(numInterrupt, pinFlowMeter, period);
  22.  
  23. void setup() {
  24.   Serial.begin(115200);    // Initializes serial communication with PC terminal
  25.   myTicks.begin();         // Initializes the class for counting ticks
  26. }
  27.  
  28. void loop() {
  29.  
  30.   myTicks.operate();       // Count
  31.  
  32.   Serial.print("t : ");
  33.   Serial.print(myTicks.instantTickRate());
  34.   Serial.print("  1s : ");
  35.   Serial.print(myTicks.TickRate1Period());
  36.   Serial.print("  5S : ");
  37.   Serial.print(myTicks.TickRate5Period());
  38.   Serial.print("  25s : ");
  39.   Serial.print(myTicks.TickRate25Period());
  40.   Serial.print(" ==> ");
  41.   Serial.print(CoefLitMin * myTicks.TickRate25Period(), 2);
  42.   Serial.print(" liter/minute");
  43.   Serial.println(" !");
  44.  
  45.   delay(500);
  46. }

Plan de montage

PNG - 53.4 ko

Documents joints

Librairie Ticks
Librairie Ticks

Commentaires  forum ferme

Logo de Finizi
lundi 4 janvier 2016 à 19h16 - par  Finizi

Bonjour,
Les chiffres résiduels doivent être effacés, c’est à dire remplacés par des espaces.
S’il y avait "18.254" (6 caractères) et que vous affichez "0.0" (3 caractères), il va rester les 3 derniers caractères affichés précédemment et on verra donc "0.0254".

Logo de michelarbre
mercredi 30 décembre 2015 à 11h46 - par  michelarbre

Bonjour, bravo pour votre article j ai testé ça marche
une question j utilise un écran UTFT et les variables ce se mette pas a zéro ils reste des chiffres résiduel contrairement au moniteur série
bonne fête de fin d année