Positionnement moteur pas à pas avec des contact

lamy971
jeu, 03/26/2020 - 04:49
Bonjour,
Voilà je voudrai pouvoir positionner un moteur pas à pas nema17 sur un nombre de pas précis après avoir appuyer sur un contact. J'ai déjà câblé ma plaque d'essais avec un EasyDriver et un NANO. J'ai déjà une partie de mon code qui fonctionne mais quand je rajoute mes 4 contacts pour 4 positions différente cela ne fonctionne plus. Merci pour votre aide.
Anonyme
ven, 03/27/2020 - 09:07
Bonjour lamy971
Je trouve ton code assez compliqué et pour le comprendre il en est de même.
Pourrais tu nous décrire le fonctionnement que tu veux obtenir, ce serait plus simple !
De plus un schéma de l'installation serait aussi le bienvenu !
J'ai essayé de corriger quelques erreurs mais je ne suis pas sûr du résultat !
lamy971
jeu, 03/26/2020 - 22:37
Bonjour,
Merci wolfram69 pour ta correction. Je n'ai pas encore essayé le code avec ta correction.
Pour ce qui est des explications les voici :
Je suis en train de fabriquer un banc de mesure (projet perso). Un moteur Nema 17 entraîne une courroie qui se déplace comme un axe Y sur une imprimante 3D. Cette courroie entraîne donc le déplacement d'un plateau avec 4 points d'arrêts à quatre distances différentes et commandé par 4 boutons poussoirs. Chaques boutons activés correspond à une valeur fixe ou le chariot doit s'arrêter. le chariot peut se déplacer à nouveau quand le bouton est relâché et que le bouton suivant est appuyé. .
En début de séquence le moteur tourne pour ramener systématiquement le chariot contre un contact pour marquer la position zéro (homing).
Le moniteur série est ouvert et sert à envoyé des commandes de déplacement en nombre de pas indépendamment des boutons poussoirs. Le zéro renvoie à la position "home"
Le moniteur serie ne me sert que pour faire les réglages des distances pour pouvoir assigner un nombre de pas aux quatre boutons de déplacement. Il pourra très bien être supprimer quand les quatre boutons seront calibré.
Sans activation des boutons poussoirs le chariot reste en position "home"
Voilà voilà j'espère que c'est plus clair
Merci encore
lamy971
ven, 03/27/2020 - 01:02
Voici le schéma de la platine d'essais
Anonyme
ven, 03/27/2020 - 07:20
Merci lamy971 je vais pouvoir être beaucoup efficace à t'aider sur ce projet.
Mais dans un premier temps pour que mon code fonctionne il faut que tu changes le point commun de tous les bouton poussoir du Vcc (+) vers GND (-). De même le fin de course (home_switch) doit être branché d'un coté à la pin 9 comme c'est le cas mais l'autre coté doit être aussi au GND (-).
Anonyme
jeu, 04/02/2020 - 08:10
Voici mon code non testé car je n'ai pas ton matériel mais si il y a des dysfonctionnement merci de me les décrire !
lamy971
ven, 03/27/2020 - 22:45
Merci wolfram69
Bon je viens d'essayer ton code mais malheureusement cela ne fonctionne pas. Au début de la séquence le moteur tourne bien en CCW pour aller chercher le point zéro. J'appuie sur le switch et il se stop puis redémarre tout seul tout doucement dans un sens CW sans être vraiment continu car il s'arrête par moment. Seul un appuie sur le bouton 1 l'arrête puis il redémarre dès qu'on relâche. Sur le moniteur série les lignes défilent sans interruption en suivant dans l'ordre les demandes de déplacement des boutons 1,2,3,4 avec les valeurs de pas qui correspondent. Il est par contre impossible de saisir un valeur dans la ligne de commande. J'ai bien évidemment fait les modifs que tu m'as demandé à savoir tout à GND (bouton + switch).
Juste pour infos le code ci dessous fonctionne mais sans les boutons poussoirs
Anonyme
sam, 03/28/2020 - 10:59
Je vais faire un petit montage chez moi pour piger le problème et le corriger mais pas avant cet après midi !
Mais as-tu bien réalisé les modifications de câblage que je t'ai demandé de faire ?
Les voici de nouveau !
Mais dans un premier temps pour que mon code fonctionne il faut que tu changes le point commun de tous les bouton poussoir du Vcc (+) vers GND (-). De même le fin de course (home_switch) doit être branché d'un coté à la pin 9 comme c'est le cas mais l'autre coté doit être aussi au GND (-).
Si non il se passera complètement autre chose !
Normalement il y a en initialisation un premier mouvement vers le point zéro à une certaine vitesse puis un léger déplacement, suivi d'un second mouvement vers le point zéro à vitesse réduite pour avoir une plus grande fiabilité dans ce point zéro !
Anonyme
sam, 03/28/2020 - 15:30
Désolé mais avec mon driver cette library ne fonctionne pas et elle est beaucoup trop lente !
Si tu veux je peux te faire un programme sans library AccelStepper
lamy971
sam, 03/28/2020 - 15:48
Bonjour,
Alors oui j'avais fais les modifs sur ma planche d'essais. Si tu veux essayer avec une autre library pas de soucis pour moi. C'est plus le résultat qui compte.
Anonyme
sam, 04/11/2020 - 09:57
Voilà mon code cette fois il est testé et 100 % fonctionnel. Pour chaque BP tu peux donner la position et la vitesse !
lamy971
mar, 03/31/2020 - 11:27
Bonjour,
Merci pour ton code. Je viens de l'essayer. De mon coté je n'y arrive pas. Le moteur tourne mais ne trouve pas la position zéro. La requête s'affiche bien dans le moniteur série. C'est sans doute moi qui n'arrive pas à l'intégrer. Tu as changé de library?
Anonyme
mar, 03/31/2020 - 17:02
Je n'ai pas besoin de library.
J'ai modifié un détail sur le code essaye de nouveau !
Quand je suis en ligne on peut chatter regarde en bas à droite de cette page !
lamy971
mar, 03/31/2020 - 23:25
Bon c'est cool ça commence à être bon c'est super. Voilà ce que j'ai remarqué :
- Le point zéro se fait avec le moteur en CW (est t il possible qu'il se fasse en CCW pour revenir au début de la rampe?
C'est super tu es vraiment un pro ....
La finalité sera que je puisse afficher les messages de positionnement sur un LCD deux lignes une fois que les positions exactes seront trouvée. Je n'aurai plus besoin du moniteur serie ni d'être raccordé à un pc.... mais ça je vais essayer de le faire tout seul au niveau du code....
Anonyme
mer, 04/01/2020 - 08:23
Pourquoi utiliser "CW" et "CCW" pour " CounterClockWise " pour sens horaire et anti horaire à moins que tu sois anglophone !
Pour inverser le sens il suffit de changer les "digitalWrite(Dir, HIGH);" par des "digitalWrite(Dir, LOW);" et inversement dans la fonction "void PointZero(){"
Par contre je ne sais pas si tu veux faire la même chose dans "void PositionX(){" , le principe reste le même !
Si tu as des problèmes pour coder le LCD dis le je te donnerai la solution.
Tu peux t'inspirer du code que j'ai écrit dans "Ruche connectée" au niveau de ce poste :
wolfram69
sam, 03/28/2020 - 09:43
.
.
.
Si je n'utilise pas de library (tant que possible) c'est que l'énorme majorité sont beugués, lourdes pour pas grand chose et ne permettent pas de faire exactement ce que l'on recherche. Je préfère tant que possible être totalement maître de mon code ce qui me permet de ne pas dépendre d'autrui.
Je pense qu'il est préférable d'écrire des fonctions que l'on peut d'ailleurs sauvegarder dans un ou des fichiers et de les améliorer au fil du temps.
lamy971
jeu, 04/02/2020 - 02:47
Effectivement cela fonctionne super bien maintenant. Pour le CW et CCW c'est juste une question d'habitude dans un autre domaine ou ce vocabulaire est très employé. Bon il ne me reste plus qu'a faire fonctionner mon afficheur 16x2 avec un module I2C. Bon j'avoue que je patauge un peu. J'essaye d'inclure la library LiquidCrystal_I2C mais je n'ai que des galères dans la compilation. Je ne dois pas avoir la bonne version car il ne reconnait pas mon adresse 0x27. Je vais continuer à chercher mais pour ce soir j'arrête...
Anonyme
jeu, 04/02/2020 - 09:43
J'attends de tes nouvelles pour savoir si tu as encore besoin d'aide...
lamy971
jeu, 04/02/2020 - 23:37
Petite question, Je viens de m'apercevoir que quand le swicth de fin de course reste en contact, le moteur continue de tourner doucement dans le même sens. il ne s'arrête que quand le switch est relâché. Peut on faire en sorte que le moteur s'arrête quand le switch est en contact?
Pour l'afficheur je veux bien un coup de main car je ne m'en sort pas. La compilation ne passe pas. Je voudrais afficher les messages d'info des position correspondant au message du moniteur série.
Voici me matériel que j'utilise
https://www.amazon.fr/gp/product/B01N3B8JMN/ref=ppx_yo_dt_b_asin_image_o05_s00?ie=UTF8&th=1
Je ne trouve pas la bonne bibliothèque, je n'arrive même pas à le faire fonctionner de manière basique sur un arduino UNO avec un code simple.
Merci encore pour ton aide
Anonyme
ven, 04/03/2020 - 07:58
Pour ta première question oui c'est exacte et j'ai reproduit ce que faisait ton code, je pense que l'auteur pense que la précision est plus grande de cette manière, je m'explique, dans un premier temps le moteur tourne à une vitesse plus grande et s'arrête à la fermeture du contact puis redémarre à une vitesse plus lente en sens inverse jusqu'à la réouverture du contact ce qui peut éffectivement être plus précis mais si tu veux t'affranchir de ce principe il suffit de modidier la fonction PointZero(); comme suit :
Anonyme
ven, 04/03/2020 - 08:01
Ce jour je n'aurais pas le temps de coder quelque chose pour ton problème de LCD mais ce sera fait pendant le W.E !
De rien pour l'aide c'est avec plaisir !
lamy971
ven, 04/03/2020 - 09:03
Bonjour Ok pour le point zéro , effectivement c’est ce qu’il expliquait et c’est vrai que j’ai modifié la vitesse pour que le retour soit plus rapide car le rail fait 2 m de longueur. Pas de soucis pour le code et bon WEEK-END
lamy971
lun, 04/06/2020 - 22:25
Bonjour wolfram69
Juste pour te dire que j'ai fais ta dernière modif sur le code et que c'est nickel. Le switch arrête complètement le moteur.
Merci
Anonyme
mar, 04/07/2020 - 16:58
Pas de problème c'est avec plaisir
lamy971
ven, 04/10/2020 - 21:59
Bonjour,
J’aurai encore besoin de ton aide pour l’afficheur. Si tu as encore un peu de dispo je suis preneur.
Merci
Anonyme
sam, 04/11/2020 - 10:05
Quel est le type exact de ton afficher LCD ?
lamy971
sam, 04/11/2020 - 12:28
Voici ce que j’utilise
https://www.amazon.fr/gp/product/B01N3B8JMN/ref=ppx_yo_dt_b_asin_image_o05_s00?ie=UTF8&th=1
toute les librairies que je trouve ne fonctionne pas.
Anonyme
sam, 04/11/2020 - 13:10
Ok je te fais cela dans la journée je pense !
lamy971
sam, 04/11/2020 - 13:16
Hey pas de stress... quand tu as le temps...
Bonnes fêtes de Pâques.
Anonyme
sam, 04/11/2020 - 19:16
Dans un premier temps il faut vérifié que ton module I2C est bien à l'adresse 0x27 sinon il te faudra l
mettre l'adresse trouvé par ce Code:
Fais les branchements suivants :
Gnd > Gnd
Vcc > 5 V
SDA > A4
SCL > A5
Respecte bien ces raccordements.
Installe la Library comme suit :
Dans Arduino IDE
Appuie sur " CTRL " + " SHIFT "+" i " // Contrôle gauche + Flèche au dessus de Contrôle Gauche + i
Attend quelques secondes que le PC te rende la main
Dans "Sujet" sélectionne "Affichage" et un peu plus à droite "LCD I2C" puis "Entrée" !
Sélectionne la library "LiquidCrystal I2C bye Frank de Brabander"
Tu peux alors tester le code suivant :
Il te faut maintenant ajuster le potentiomètre bleu sur le module I2C pour avoir un affichage correcte !
Veux tu que je modifie le code pour ton programme ou veux tu le faire toi même ?
lamy971
dim, 04/12/2020 - 22:44
Merci pour ton aide alors voilà:
J'avais déjà tout câblé mais 'est bon de re vérifier comme tu me l'a écris. J'avais scanner mon module I2C et j'ai bien trouvé l'adresse 0x27. J'ai voulu essayé de vérifier avec ton code mais dans le moniteur série cela n'a rien donné. Cela ne me marque pas d'adresse lisible mais un truc avec des 0???. J'ai alors remis un autre code de scanner et j'ai retrouvé la même adresse. Cependant je ne suis pas arrivé à afficher le texte de ton exemple même en changeant le potentiomètre. Je vois bien que l'afficheur communique car il clignote 1 fois mais rien ne s'affiche. J'ai essayé de changer d'afficheur mais tjrs pareil.... J'ai la poisse... Je vais essayer de modifier mon code et si je n'y arrive pas je te le dis mais quand j'arriverai à afficher quelque chose.
Anonyme
lun, 04/13/2020 - 11:51
As tu réglé le moniteur série à 115200 ? Je n'utilise jamais 9600 bauds, c'était bon du temps du DOS ! Mais depuis windows je suis plus souvent en 250000 voire même 1000000 bauds autrement à quoi bon d'utiliser des micropross à 16 Mhz !
As tu aussi bien chargé la bonne library et supprimer les autres car il se peut que le compilateur ne prenne pas la bonne quand il y a plusieurs library avec des fichiers de même nom !
Je te ferais une vidéo pour te faire voir que je ne raconte pas de bêtises !
Un truc que j'aimerais savoir sur ton afficheur, il est bien allumé et lorsque tu tourne le potentiomètre dans un sens ou dans l'autre tu obtiens bien des pavés de points à la place des caractères, même si il n'y a pas de texte affiché ?
lamy971
lun, 04/13/2020 - 19:40
Oui c’est bien ça. Je n’ai pas encore supprimé les autres fichiers. L’afficheur affiche bien des pavés de leds quand je tourne le potentiomètre. J’ai bien téléchargé la bonne library.
Anonyme
lun, 04/13/2020 - 21:12
Peux tu faire une photo de ton montage ?
lamy971
mar, 04/14/2020 - 03:33
Voilà les photos. J'ai encore vérifier le câblage et cela me semble bon
lamy971
mar, 04/14/2020 - 03:39
Tu avais raison pour la vitesse du moniteur. Donc j'ai trouvé la même adresse soit 0x27
Anonyme
mar, 04/14/2020 - 08:33
Tu as inversé SDA et SCL tu les as branché à l'envers ! Fais plus attention dans ce cas ce n'est pas grave mais il y a des fois ou c'est fatale !
lamy971
mar, 04/14/2020 - 22:49
Alors j'ai bien regardé et pour moi ct bien branché. Cela parait à l'envers pacque mon module I2C est inversé par rapport à l'afficheur à cause de la plaque d'essais. J'ai essayé d'inverser mais cela ne fonctionne pas de plus l'afficheur ne clignote pas quand il démarre alors qu'avant oui il clignotait une fois ce qui me faisait dire que mon branchement était bon. Par contre j'ai changé mon arduino et miracle ça marche. Je veux bien un coup de main pour le code car je n'y arrive pas et j'ai des inscriptions qui ne fonctionnent pas c'est trop difficile pour moi. Je voudrais que mon afficheur recopie les messages du moniteur série.
Merci d'avance
Anonyme
mer, 04/15/2020 - 15:01
Je te fais cela dès que j'ai 5 minutes ! Je suis content que tu constates que les codes que je t'ai donnés sont parfaitement fonctionnels, comme c'est toujours le cas quand je ne précise pas que je n'ai pas pu le tester pour tel ou tel raison. Tu pourras remarqué que c'est loin d'être le cas sur d'autres sites !
Peux tu nous dévoiler l'utilité de ce montage je suis assez curieux d'n savoir d'avantage !
lamy971
jeu, 04/16/2020 - 05:39
OUi je te remercie tes codes fonctionnent super bien. Je suis admiratif et j’aimerais beaucoup progresser dans ce domaine. En fait je construis un « slider » pour appareil photo. J’ai besoin de position bien précise pour de la macro photo. Voilà rien de bien extraordinaire
Anonyme
jeu, 04/16/2020 - 08:48
Bonjour lamy971
Comme promis tu trouveras le code juste en dessous, par contre comme je n'ai pas eu le temps de refaire le montage pour tester ce code, je te demande de le faire pour moi et de me donner les points de dysfonctionnement que je ne manquerai pas de modifier !
lamy971
ven, 04/17/2020 - 03:37
Alors c'est super le code fonctionne. J'ai modifié des bricoles. Je te donne la dernière version.
- Le point zéro est initialisé ne s'affiche pas.
- Est t il possible d'afficher pour chaque BP la chose suivante;
pour BP1 <50cm>
BP2 < 60cm>
BP3 <100cm>
et BP4 <150cm>
et ceux quelque soit la valeur du nombre de pas pour chaque BP
voilà et encore un grand merci
lamy971
ven, 04/17/2020 - 03:38
Anonyme
ven, 04/17/2020 - 08:20
lamy971 je ne comprends pas ce que tu veux concernant 50 cm, 60 c etc ...
Peux tu être plus explicite ?
Le point Zéro doit s'afficher mais comme il n'y a pas de tempo il est tout de suite remplacé par le message " Valeur 0<>100000 " !
Il suffit de mettre " delay(2000); " sous la ligne " lcd.print(" est atteint"); "
lamy971
ven, 04/17/2020 - 10:16
Ok pour le point zéro.
Alors la distance d’arrêt définitive après réglage seront pour chaque BP les distances 50,60, 100 et 150. Je ne sais pas aujourd’hui combien de nombres de pas moteur cela représente par position. Ce réglage sera réalisé avec le moniteur série dès que le rail sera monté. La distance entre le rail et la télécommande filaire ou sera l’afficheur et les 4 BP sera assez importante et je voudrais si c’est possible qu’après avoir appuyé sur un BP j’ai la distance correspondante qui s’affiche. Quand tout sera terminé ces quatre distances ne bougeront plus. Sauf si un jour j’en ai besoin et je les changerai directement dans le code.
Anonyme
ven, 04/17/2020 - 18:15
Ok donc au lieu du nombre de pas tu veux afficher la distance ! Je n'ai toujours pas testé mais cela devrait fonctionné !
lamy971
ven, 04/17/2020 - 22:13
Ok le code fonctionne, j'ai modifié quelques inscriptions et quelques position du curseur pour essayer de rentrer les infos importantes. Cependant j'ai des chiffre qui apparaissent quand le position est atteinte, je te mets une photo. Je ne sais pas d'ou cela vient je n'ai pas trouvé. Je te mets le dernier code.
lamy971
ven, 04/17/2020 - 22:14
Anonyme
sam, 04/18/2020 - 08:10
Ou est la photo ?
lamy971
sam, 04/18/2020 - 10:59
Oups j'ai zappé
lamy971
sam, 04/18/2020 - 11:00
je ne suis pas arrivé à inclure la photo come toi dans le texte
lamy971
sam, 04/18/2020 - 11:02
Pages