Un simple compteur.
#1
Posté 02 février 2021 - 01:26
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
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
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
Posté 02 février 2021 - 06:19
@ 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
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.
#7
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
Posté 02 février 2021 - 09:22
*10/1200*60
Ou tout simplement/2
#9
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.
#11
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
- Mike118 aime ceci
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.
#13
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 !
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!
#14
Posté 03 février 2021 - 08:30
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
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 !
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!
#17
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 !
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!
#18
Posté 04 février 2021 - 10:14
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
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 !
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!
#20
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 ), 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??
- Mike118 aime ceci
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users