Tachomètre pour tour à métaux

Bonjour,
Je viens de rénover un vieux tour à métaux et j'ai besoin de savoir le nbr de tours/min que le tour fait selon les différentes variantes de poulies (l'entrainement se fait par courroies et poulies, la taille des poulies varient donc la vitesse du tour).

Je souhaite donc réaliser un tachomètre (compte tour) avec le matériel que j'ai déjà : un truc simple.
Je possède une arduino UNO, des interrupteurs stop (comme sur les imprimantes 3d).
Je pensais faire un système ou je fixe le bouton poussoir, je fixe une lamelle de bois p ex dans les mors du tour, et quand cette lamelle fait un tour elle active le bouton poussoir.

Je vais commencer à réflechir au code et aurais sans doute besoin d'aide pour ce dernier.
Mais déjà est-ce que vous pensez que c'est réalisable pour une arduino et un simple bouton poussoir ? Je tiens à préciser aussi que la vitesse ne dépassera sans doute pas les 700tr/min (environ), et encore moins les 1000tr/min.

Bonjour,
Je pense que la solution du bouton poussoir ne soit pas viable.
Ton BP est prévu pour combien de manœuvre (durée de vie) ?
A 1000 tr/min cela fait 60000 actions en 1 heure si ton tour fonctionne pendant 1000 h cela représente 60 millions d'actions sur le BP, ils ne sont pas nombreux à supporter ce mauvais traitement.
Il faudrait peut être s'orienter vers un capteur sans contact (optique, magnétique, etc ...)

La solution d'un ou plusieurs aimants fixés sur l'axe du tour et un capteur à effet Hall de l'autre côté ou sinon une roue dentée qui tourne devant une fourche optique tiennent la route (sans contact).

Attention aux poussières dégagées par le tour en opération qui pourraient venir soit s'accumuler sur l'aimant, soit "polluer" la lecture optique. Il conviendrait donc de protéger le système de mesure

Est ce que c'est possible de faire quand même avec un interrupteur ?

//progr tachomètre v1

unsigned long temps = millis();
int bp = 4; //l'interrupeteur sur l'éntrée 4
int bp2 = 5; //l'interrupeteur qui démarre la séquence de calcul de tr/min
int nbrtours = 0; 
unsigned long tps_mesure_commence = 0;
unsigned long dernier_changement = 0;


void setup() {
  Serial.begin(9600);
  Serial.print("Lancement programme"); ///pour vérifier que la liason série marche
  delay(1000);
}

void loop() {
  
  if(bp2 == 1) {
    Serial.print("La mesure commence dans 1sec");
    delay(1000);
    tps_mesure_commence = temps;

    while(temps + tps_mesure_commence <= 60000){ //on compte le nbr de tours pendant 1 min soit 60s
       if(bp == 1) {
         nbrtours = nbrtours+1;
         delay(2); //on attend 2 milliseconde le tps que la lamelle "parte", *****cette ligne je ne sais pas trop*****
       }
    Serial.print(nbrtours, "tr/min");
    } 
  }
}

Voila le code fait, je ne l'ai pas encore testé.

la longévité n'est pas garantie

il y a aussi un risque de limite physique sur les pièces en mouvement dans le bouton: à 700tr/min ça veut dire que vous allez appuyer environ 12 fois par seconde sur le bouton, soit toutes les ~85ms. Suivant comment est fabriqué le bouton et l'inertie des pièces mécaniques il ne va peut être pas suivre la cadence

sinon pour le code, ça ne va pas fonctionner avec

while(temps + tps_mesure_commence <= 60000)

on fait plutôt

unsigned long maintenant = millis();
while (millis() - maintenant < 60000ul) {
  ...
}

et bien sûr il faut lire les transitions du bouton, pas faire juste un if(bp == 1) surtout que rien ne modifie bp (qui est un numero de pin, pas l'état)

lisez ceci:

Bonjour Belo

Le contacte mécanique est à oublier!
Un simple trait noir ou blanc sur l'axe et un capteur à réflexion est beaucoup mieux.
image

Un petit exemple:

Cordialement
jpbbricole

oui c'est aussi une bonne idée

Bonjour J-M-L

Surtout mécaniquement simple, un trait ou un bout de scotch en contraste avec l'environnement suffit.

Je ne l'ai pas testé non plus, mais à voire, son principal "défaut" et de n'afficher la vitesse que toutes les minutes, pour tourner c'est long!
Le mieux est de travailler avec les interruptions et de mesurer la période et d'extrapoler, ainsi la vitesse est disponible, presque en "direct", mais c'est un peu plus compliqué.

Cordialement
jpbbricole

Oui, du moment que la poussière ne vient pas "polluer" la lecture

son principal défaut c'est qu'il ne fonctionnera pas du tout tel qu'il est écrit :wink:

Si on revenait au problème de base avant de construire des usines à gaz? il y a deux au moins possibilités:
@Belo a besoin de mesurer en permanence la vitesse chaque fois que le tour est utilisé
@Belo a besoin de connaitre une fois pour toutes la vitesse à vide du tour, sachant qu'un moteur asynchrone ne glisse que de quelques pourcent et que la vitesse réelle sera peu différente de celle estimée.

Dans le premier cas vos solutions sont bonnes et il est exclus de mettre un inter.
Dans le deuxième cas, c'est un bidouillage provisoire rapide à faire qu'il faut et que si la mesure est aberrante deux fois sur trois, cela suffit.
Ce qui me fait penser qu'on est plutôt dans le deuxième cas c'est:

Je viens de rénover un vieux tour à métaux et j'ai besoin de savoir le nbr de tours/min que le tour fait selon les différentes variantes de poulies (l'entrainement se fait par courroies et poulies, la taille des poulies varient donc la vitesse du tour).

Si la vitesse est choisie de façon discrète par de poulies/courroies, ce n'est pas la peine d'afficher la vitesse exacte, vu que l'on ne peut pas l'ajuster finement.

je fixe une lamelle de bois p ex dans les mors du tour, et quand cette lamelle fait un tour elle active le bouton poussoir.

Si on fixe une lamelle de bois, c'est qu'on usine pas, les mors du tour ne peuvent pas tenir la pièce et la lamelle.


Avant de proposer une solution, il faudrait peut être que l'on cherche à répondre au problème posé, et pas au problème général "comment mesurer une vitesse de rotation dans le cas général".

bof, si on sait résoudre le cas général, pourquoi pas... :wink:

Si c'est one-shot, c'est OK pour connaître la vitesse du tour à vide non? pas besoin d'usiner

hello
mouais, un vieux tour, les vitesses sont définies par des poulies étagées.
on connait la vitesse du moteur, les diamètres des poulies menantes et des poulies menées
le reste c'est du calcul ( une fois pour toutes).
:innocent:à moins qu'un variateur électronique fasse varier la vitesse du moteur

1 Like

Bonsoir vileroi

Attention a ne pas s'éloigner du sujet principal, @Belo ne pose pas la question dois-je mette un compte-tours sur mon tour, mais

En dehors de toutes tes considérations, pourquoi ne pas simplement lui indiquer la meilleur méthode pour y arriver.
Ou peut-être, tout simplement @Belo veut "s'amuser" de façon ludique et utile avec son Arduino.
Je ne sait pas si tu as déjà côtoyé le milieu de l'usinage, mais il y a plein d'usineurs amateurs qui ont mis un compte-tours sur leur tour.

Cordialement
jpbbricole

Pour trouver la meilleure solution pour son projet, c'est d'abord de connaître son besoin (pourquoi mesurer la vitesse par exemple). Ainsi au lieu de donner une solution

qui ne réponde pas au problème, il vaut mieux qu'il dise ce dont il a besoin et ainsi lui proposer

qui réponde à son besoin.

Bonsoir

Je viens de rénover un vieux tour à métaux et j'ai besoin de savoir le nbr de tours/min que le tour fait selon les différentes variantes de poulies (l'entrainement se fait par courroies et poulies, la taille des poulies varient donc la vitesse du tour).

S'agit-il de connaître une fois pour toutes les différentes vitesses de rotation pour les diverses poulies , un usage ponctuel, et non laisser le tachymetre en service permanent ?

dans ce cas le capteur à reflexion , sur une courte durée d'utilisation , risque peu de s'encrasser et l'attente d'une minute pas vraiment rédhibitoire.

Oui c'est cela
J'ai un capteur halla analogique, j'avais déjà fait un programme il y a lgtps pour avoir la vitesse d'un vélo, je vais le "convertir" (le porgramme).

/*
   Tachomètre
   On utilise un capteur à effet hall analogique qui envoie - de 2v quand un aimant pole nord 
   passe devant le capteur ou + de 3v quand un aimant pole sud passe et 2.5v quand il n'y a rien.
*/

#define valMin 410                          // Définir ici les seuils min      2v
#define valMax 615                          // et max de l'analogRead.         3v
 
const int valMoy = (valMin + valMax) / 2;
const int seuil = (valMax - valMin) / 2;
bool flagMesure = false;
unsigned long tempstrouve = 0;
unsigned long dernierPassage = 0;
float trmin = 0;
int bp2 = 4; //Le bouton de démarrage sur le port 4

void setup () {
  Serial.begin(9600);
  Serial.print("Programme commence");
  delay(1000);
}

void loop() {
  Serial.print("Appuyez sur le bouton pour commencer la mesure");

  if(bp2 == HIGH) {
    unsigned long maintenant = millis();
    while (millis() - maintenant < 60000) {
      int diff = abs(analogRead(A1) - valMoy);
      if (diff >= seuil) { //si un aimant pole nord ou un aimant pole sud passe devant le capteur
        trmin = trmin + 1;
      } 
    }
    Serial.print(trmin, "tr/min");
  }
}

Programme pas testé, il est censé fonctionner mais bon...

Bonjour

Effet Hall et aimant , ça paraît être également une bonne piste !!