Aller au contenu


Photo
- - - - -

Un simple compteur.


39 réponses à ce sujet

#1 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 02 février 2021 - 01:26

Bonjour
Comme indiqué dans la présentation, je suis agriculteur.

Je suis dans la realiation d'un compteur de surface pour un vieux semoir pour commencer et plus peut-être par la suite.

Sur la base de ce code trouvé ici,
https://www.robot-ma...-encodeurs.html

J'arrive à lire un encodeur et par une simple opération mathématiques transformer une vitesse tr/min en km/h.

Mais il y a un truc que j'ai du mal à saisir, comment l arduino fait il la différence entre un encodeur a 6 tick comme dans l'exemple et un autre a 500 ou 600 comme j'utilise ??

Nulle part dans le code il n'est précisé le nombre d'impulsion par tour.

Merci d'avance.

#2 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 02 février 2021 - 01:52

Bonjour,

le code du lien, en effet, ne prends pas en compte le nombre d'impulsions par tours. La vitesse est donc dans une unité "arbitraire" (la valeur affichées est en nombre de tics par dixième de seconde.

 

Donc si tu veux l'avoir en tics/s, tu multiplie par 10.

Puis pour passer en tr/s tu divise par le nombre de tics par tour

Puis tu divises par 60 pour avoir des tr/min

(la suite, tu dis que tu maitrise)

 

Bonne journée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#3 jpbbricole

jpbbricole

    Membre

  • Membres
  • 19 messages
  • Gender:Male
  • Location:CH1804 Corsier-Sur-Vevey

Posté 02 février 2021 - 02:06

Bonjour Nico

Nulle part dans le code il n'est précisé le nombre d'impulsion par tour.

En général, ce type d'encodeur a 11 pas par tour donc 11 impulsions/tour à l'axe du moteur, en quadrature, 44.
Après, il faut multiplier ce nombre d'impulsions par le rapport du réducteur pour avoir le nombre d'impulsions par tour de roiue.

 

Cordialement

jpbbricole


L'expérience est la seule chose qu'il ne faut acheter que d'occasion!


#4 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 02 février 2021 - 06:19

Super, merci du retour rapide, il vaut mieux un qui sait que dix qui cherchent.

@ Sandro, donc utilisant un encodeur a 600 tick par tour je dois faire :

Speed=((countx10)/600)/60

Mais j'ai un doute pour le diviser par 60 pour avoir des tr/min, j'aurais plutôt multiplié moi 🤔

Et pour une vitesse en km/h en ayant une roue de 2metres de périmètre :

Vitesse=(speedx0.002)x60

J'ai bon ???

@ JP pour l'instant pas de moteur ni de réduction dans mon montage, juste un encodeur sur une roue pour mesurer une vitesse, une distance et surtout une superficie.
Je débute, j'y vais a petit pas.

#5 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 02 février 2021 - 06:43

Tu as raison, c'est bien *60 et pas /60.

 

Pour ta formule de départ (   Speed=((countx10)/600)*60   ), c'est correct seulement si tu la mets dans la fonction timerIsr. Le résultat est en tr/min

Vitesse=(speedx0.002)x60 : ok, le résultat est en km/h

 

 

D'ailleurs, selon ce que tu veux obtenirs, tu peux aussi faire les calculs "dans l'autre sens", en calculant la distance parcourue:

nbr_de_tics_effectués=counter

nbr_de_tours_effectués=counter/600

distance_totale_parcourue_en_m=nbr_de_tours_effectués*périmètre_roue=nbr_de_tours_effectués*2

 

et pour obtenir la vitesse dans timerIsr:

speed= (distance_totale_parcourue_en_m-distance_totale_parcourue_en_m)*10    //en m/s

//speed = (distance_totale_parcourue_en_m-distance_totale_parcourue_en_m)*36  //en km/h  (36=10*0.001*3600)

prev_dist=distance_totale_parcourue_en_m  //nb : prev_dist doit être une variable globale volatile


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#6 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 02 février 2021 - 08:23

Super, merci pour toutes les idées.

Toutefois si je dois multiplié mon nombre de tick par 10, pour le diviser par 600 et enfin le multiplié par 60, ça revient à ne rien faire non??

#7 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 02 février 2021 - 08:52

euh oui, tu es dans un cas particulier où en effet, le nombre de tics en 0.1s est égal à ta vitesse en tr/min.

C'est un sacré hasard. Donc dans ton code, tu peux te passer du *10/600*60, mais je te conseilles quand même de mettre le calcul complet en commentaire, sinon tu t'étonnera de cette égalité bizarre le jour où tu relira ton code (par exemple car tu aura décidé de changer d'encodeur)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#8 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 02 février 2021 - 09:22

Finalement c'est simple l'informatique 😉C'est peut-être une idée à la con, et je cherche peut-être la complication, mais vu que dans l'interruption je compte les changements n'y aurait il pas 1200 tick par tour et donc il faudrait faire :

*10/1200*60

Ou tout simplement/2

#9 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 02 février 2021 - 09:49

En effet, si tu as 600 impulsions par tours, alors tu en aura plus dans l’interruption. Je penses même que tu en aura 4 fois plus vu qu'on compte tous les changements sur 2 pins (donc 2 pins * 2 changements/pin = 4 changements).

 

Donc j'aurais tendance à dire diviser par 4. Après, le mieux, c'est de faire tourner l'encodeur d'un tour et de vérifier de combien a changé counter, comme ça, ça permet de valider.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#10 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 02 février 2021 - 10:42

Si je comprends bien le code, l'interruption ne compte que sur le pin2 l'autre pin étant pour le sens de rotation.
Mais je ne suis pas sur de moi.

#11 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 02 février 2021 - 11:00

Désolé, j'ai vraiment la tête en l'air aujourd'hui.

Tu as raison, le code en question n'utilise que le pin 2 en interruption (en mode change).

Donc oui, le second pin ne sert que pour la direction.

Donc on a bien counter qui augmente de 2*600 par tour


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#12 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 02 février 2021 - 11:30

Merci pour les petits conseils, j'étais sur la bonne voie juste besoin de combler quelques doutes.
La suite au prochain épisode avec un écran LCD.

#13 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 03 février 2021 - 12:25

Si tu as besoins d'une résolution plus importante ( x2), que tu n'as qu'un seul codeur, et que ton GPIO 3 est libre, tu peux brancher le deuxième fil de ton codeur sur le GPIO 3 au lieu du GPIO 4 et je pourrais te fournir la modification du code pour doubler ta résolution ;)

Pour le reste Sandro a très bien répondu aux questions ;) 

PS : Si pour la suite tu veux utiliser un écran LCD et que tu ne t'es pas encore arrêté sur le matériel je te recommande d'en prendre un en I2C ( ou le module I2C qui va avec =) )


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#14 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 03 février 2021 - 08:30

Merci Mike
Effectivement en farfouillant a droite a gauche j'avais vu que certains utilisaient deux pin en interruption pour lire un codeur.
Dans mon cas il va contrôler des vitesses de 2/3 km/h a maximum 12/13km/h avec une précision de 0.1 km/h ça devrait fonctionner comme ça.
Je préfère me garder le pin 3 pour une autre interruption pour contrôler la vitesse de rotation d'une turbine, sûrement un aimant et capteur effet Hall.

Pour le LCD j'étais justement entrain de me pencher sur le sujet, et j'étais aussi sur un montage I2C.😉

Un sujet ou un tuto a conseillé a un débutant la dessus ???
Sur le net il y a bien souvent tout et son contraire... Quand ça devient clair d'un côté ça m'embrouille de l'autre 😀

#15 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 03 février 2021 - 10:21

Est ce que ça c'est suffisamment clair ? https://www.robot-ma...-robotique.html  :)

Normalement tu devrais pouvoir enlever toute la partie du DHT22 et arriver à afficher tout ce dont tu as besoin ;)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#16 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 04 février 2021 - 08:21

Suffisamment clair je ne sais pas, la page est introuvable.
En cherchant j'ai fini par trouver merci.

#17 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 04 février 2021 - 09:47

J'ai corrigé le lien, un espace de trop s'était glissé dans le copier collé pour le lien ;) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#18 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 04 février 2021 - 10:14

Merci

Au niveau tr/ min et vitesse ça fonctionne, j'ai quelques choses de cohérent.
Niveau distance parcourue c'est plus compliqué et pour un compteur de surface c'est plutôt difficile de faire sans.
J'ai essayé de placer la variable dans la boucle loop, rien dans la boucle count idem et pourtant elle apparaît bien dans le Moniteur série.

#19 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 05 février 2021 - 01:22

Poste le code que tu as ici et on t'indiquera ton erreur pour que ça marche comme prévu ;) .

PS : Lien pour savoir comment poster du contenu sur le forum, image / code etc ..  https://www.robot-ma...obot-Maker.html


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#20 Nico47

Nico47

    Membre

  • Membres
  • 21 messages

Posté 05 février 2021 - 09:27

 

Voila, non sans mal j'espère avoir réussi a partager le code ( la ou il faut 2min a nombre d'entre vous, de mon coté ca peut prendre beaucoup plus de temps :laugh1: ), je pense que tu le connais déjà bien. 

 

Comme vous voyez j ai déclaré ma variable, elle apparait bien dans le moniteur serie, mais je ne sais pas ou la  placer pour quelle s'incrémente.

J'ai fait un test ainsi      distance =( count/1200)*2  placé dans la boucle Isr ca ne fonctionne pas, idem dans la boucle counter.

 

Petite question aussi, pourquoi dans les déclaration speed apparait en rouge??





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users