Aller au contenu


Photo
- - - - -

focuser motorisé télescope


  • Veuillez vous connecter pour répondre
50 réponses à ce sujet

#1 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 05 février 2022 - 07:37

bonjour .

j'ai un souci avec ma carte programmable .

je m'explique , je voudrais piloter un moteur pas a pas nema 17 avec un driver a4988 et une carte arduino uno (vue que je manoeuvre  dejas un axe de mon télescope de cette fasson je voulais faire de meme pour le focus ) 

MAIS voila .

je me suis tromper dans ma commende et a la place d'une arduino uno ,j'ai pris une carte WeMos D1 .

donc elle ce ressemble mais es que ce sont les meme et comment la programmé ?

de la meme manière que l'arduino classique ? 

et meme pour raccorder sur mon driver , je trouve rien comme schéma avec la WeMos .

 

vous pouvez m'aider svp ?



#2 Sandro

Sandro

    Pilier du forum

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

Posté 05 février 2022 - 08:22

Bonjour,

je n'ai jamais utilisé cette carte (je n'en avais même pas entendu parlé). Et il semblerait qu'il y ait plusieurs versions : tu aurais un lien vers celle que tu as achetée?

 

D'après https://www.wemos.cc...arduino_d1.html , on pourrait l'utiliser avec l'IDE arduino moyennant quelques manips supplémentaires.

 

Pour le raccordement du driver, il semble aussi en avoir plusieurs version (peut-être compatibles, j'ai pas vérifié) : là aussi, un lien serait utile. Mais globalement, le branchement se fait de manière semblable, il suffit de respecter les fonctionnalités de chaque pin (brancher par exemple un pin PWM sur un pin PWM de la WeMos.

 

Après, pourquoi est-ce que tu veux utiliser un deuxième micro-controleur (arduino ou WeMos) pour le focus, si tu en as déjà un pour un axe? Un arduino est tout à fait capable de gérer deux moteurs pas à pas (et même plus), il suffit d'adapter le programme


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 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 05 février 2022 - 08:32

Coucou sandro
Alors pour le lien de la carte je l'ai acheté sur Amazon 😅.
Et en fait je ne savais pas que l'on pouvait contrôler plusieurs moteur sur une carte uno .
C'est pour ça que j'ai commendé une deuxième carte .
Mais l'option deux driver pour une arduino me conviendrait mieux.
Même si la wemos est en WiFi 😁

#4 Sandro

Sandro

    Pilier du forum

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

Posté 05 février 2022 - 09:23

 

Alors pour le lien de la carte je l'ai acheté sur Amazon .

ça n'empêche pas de mettre un lien ;)

 

Mais oui, une carte arduino peut faire beaucoup de choses (on peut même commander plus que 2 moteurs pas à pas).

 

 

Soit tu penses être capable de te débrouiller tout seul pour ajouter le second moteur, dans ce cas je te laisse te débrouiller.

Si tu veux qu'on te guide, on aura besoin des infos suivantes :

1) le schéma actuel des branchements

2) le code actuel

3) le lien vers le nouveau driver (si tu as la doc, sinon le lien où tu l'as acheté, même si c'est amazon), et de l'ancien s'il est différent

4) la manière dont tu veux commander le nouveau moteur (par exemple un bouton zoom in, un bouton zoom out, dans les deux cas il faut rester appuyé pour que le moteur bouge)

 

PS : je ne serais pas dispo d'ici demain soir ou plus probablement lundi pour te répondre : bien possible que quelqu'un d'autre ici puisse commencer à te guider, sinon je te répondrais demain soir si je suis pas trop crevé ou lundi


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.


#5 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 07 février 2022 - 05:50

alors j'ai fait des recherche sur la carte WeMos D1 ce week

il semblerait qu'elle ressemble beaucoup a la arduino uno ,ormi  la bibliothèque dans l'arduino pour le programme .

mais bon . l'option que tu me propose (une carte pour deux moteur ) me convient amplement .

alors voila pour ma carte arduino et mon driver que jutilise actuellement .

Carte Go Tronic GT016 Gotronic - Cartes compatibles UNO | GO TRONIC

Driver de moteur pas-à-pas 2998 - Commandes de moteurs pas-à-pas | GO TRONIC

le code actuel

/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole
*/
#define tempoDepart 2080;
int tempo = 0;                         // Moteur arrete
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;


#define driverDirPin 4
#define driverStepPin 5    
#define boutonAccelererPin 6    
#define boutonRalentirPin 7
#define boutonMarchePin 8
#define boutonArretPin 9


void setup()
{
  pinMode(driverDirPin, OUTPUT);
  pinMode(driverStepPin, OUTPUT);


  pinMode(boutonAccelererPin,
INPUT_PULLUP);  // L'autre cote du bouton au GND
  pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "
  pinMode(boutonMarchePin, INPUT_PULLUP);
  pinMode(boutonArretPin, INPUT_PULLUP);


  digitalWrite(driverDirPin, LOW);            // On met la broche DIR a l'etat bas
}


void loop()
{
  for (int i = 0; i <= 200; i++)
  {
    tempoAddition = 0;
    if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est presse
    {
      tempoAddition = tempoAccelerer;
    }
    else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
    {
      tempoAddition = tempoRalentir;
    }
    else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est presse
    {
      tempo = tempoDepart;
    }
    else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton marche est presse
    {
      tempo = 0;
    }


    if (tempo > 0)
    {
      digitalWrite(driverStepPin, LOW);
      delayMicroseconds(tempo + tempoAddition);
      digitalWrite(driverStepPin,
HIGH);
      delayMicroseconds(tempo + tempoAddition);
    }
  }
}


#6 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 07 février 2022 - 05:56

Fichier joint  20220207_174555.jpg   71,19 Ko   0 téléchargement(s)

le schéma de cablage 

 

le nouveau driver 

Hiletgo 5pcs A4988 pilote de moteur pas à pas et Dissipateur thermique pour Pololu RepRap Prusa Mendel Rampes : Amazon.fr: Commerce, Industrie et Science

 

 



#7 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 07 février 2022 - 06:11

et le lien de la carte WeMos

ARCELI Programme Arduino UNO Compatible avec la Carte de développement WeMos D1 R2 WiFi ESP8266 de Arduino IDE : Amazon.fr: Informatique



#8 Sandro

Sandro

    Pilier du forum

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

Posté 07 février 2022 - 11:27

Bonsoir,

merci pour ces infos.

 

Pour le programme actuel, si je résume le comportement actuel :

- le bouton "arrêt" arrête la rotation

- le bouton "marche" donne une rotation à vitesse standard (celle qui permet de suivre les étoiles?)

- les boutons accélérer et ralentir accélèrent et ralentissent la rotation si elle est en marche (ne font rien sinon)

- l'accélération/ralentissement s'arrêtent automatiquement après une durée aléatoire de 1 à 200 (micro) pas avant de revenir à la vitesse normale : EST-CE VOLONTAIRE???

 

Pour le dernier point, est-ce volontaire que l'accélération/ralentissement s'arrêtent automatiquement après une durée aléatoire?!? Il me semblerait plus logique que soit on revienne à vitesse normale dès qu'on relâche les boutons (accélérer/ralentir), soit que la désactivation se fasse après une durée fixe. Tu en penses quoi?

 

 

 

Pour le nouveau moteur (focus), tu veux quoi comme comportement?

Un bouton pour zoom in, et un deuxième pour zoom out, et arrêt dès qu'on relâche les boutons?

Ou autre chose?

 

 

Pour le branchement du nouveau convertisseur (nb : quand je mets un "n" devant, c'est qu'il y a une barre au dessus, ce qui veut dire que c'est une logique inversée). Regarde la dernière image du lien Amazon pour le nom des pins :

- nENABLE : GND (de l'alim, du driver ou de l'arduino, ça revient au même)  (vu qu'il y a une barre, il faut du 0V pour "enable")

- MS1, MS2 et MS3 : c'est pour choisir si tu veux des pas entiers, ou différentes fractions de pas. Je n'ai aucune idée de combien de degrés il faut tourner le moteur à la fois pour le zoom. Si tu ne sais pas la fraction de pas qui te convient, mais que tu sais l'angle qui te convient, alors si tu me donnes le lien des moteurs, je peux t'aider à calculer le type de pas. Si tu n'as aucune idée, alors laisse les juste débranchés pour l'instant (ça donne des pas complets)

- nRESET : 5V de l'arduino ou au pin nSLEEP du driver (0V donnerait un reset)

- nSLEEP : pas relié ou relié au pin nRESET

- STEP : pin 3 de l'arduino (si tu préfères un autre pin libre entre 2 et 13, c'est bon aussi)

- DIR : pin 2 de l'arduino (si tu préfères un autre pin libre entre 2 et 13, c'est bon aussi)

- GND (celui à coté de VDD) : pas la peine de le brancher si le - de l'alim est déjà relié au GND de l'arduino. Si ce n'est pas le cas, alors le relier au GND de l'arduino.

- VDD : 5V de l'arduino

- 1A et 1B : première bobine du moteur

- 2A et 2B : deuxième bobine du moteur
- GND : à relié au - de l'alimentation (attention, il ne faut pas passer par un pin GND de l'arduino, sinon le courant du moteur traverse l'arduino, qui risque de ne pas supporter)

- VMOT : 12V de l'alim

 

Pour les boutons, je te suggère de les mettre sur les pins 10 (zoom out) et 11 (zoom in).

 

Si tu as un condensateur d'au moins 47µF, c'est une bonne idée de le brancher entre GND et VMOT (en plus de l'alim), en faisant attention que le - du condensateur soit sur GND.

 

 

Si tu as un doute, alors je te suggère de tracer le schéma complet (avec les 2 drivers et tous les boutons), comme ça je peux vérifier le schéma.


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.


#9 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 08 février 2022 - 05:37

 

 

 

 

 

Pour le programme actuel, si je résume le comportement actuel :

- le bouton "arrêt" arrête la rotation

- le bouton "marche" donne une rotation à vitesse standard (celle qui permet de suivre les étoiles?)

- les boutons accélérer et ralentir accélèrent et ralentissent la rotation si elle est en marche (ne font rien sinon)

- l'accélération/ralentissement s'arrêtent automatiquement après une durée aléatoire de 1 à 200 (micro) pas avant de revenir à la vitesse normale : EST-CE VOLONTAIRE???

 

 

c'est bien cela .

effectivement pour l'accel et le ralentissement ,ce n'ais pas volontaire, j'aurais souhaiter que l'action ne sarrette pas tan que reste appuyé et revenir a la vitesse normal en relachen le bouton .

 

Pour le nouveau moteur (focus), tu veux quoi comme comportement?

Un bouton pour zoom in, et un deuxième pour zoom out, et arrêt dès qu'on relâche les boutons?

 

 

 ce comportement me convient parfaitement 

j'appuis sur le bouton pin 10 le moteur tourne dans un sens (zoom out) je relache il s'arrete.

j'appuis sur le bouton pin 11 le moteur tourne dans l'autre sens (zoomin) je relache il s'arrete 

je presise que se serra le meme tipe de bouton utiliser pour la marche arret accel et ralentissement du 1er moteur 

 

 

pour le branchement du nouveau driver 

les pins reset et sleep me donne problème .Il faut juste les relier entre elles ? comme sur le schema ? 

- GND (celui à coté de VDD) : pas la peine de le brancher si le - de l'alim est déjà relié au GND de l'arduino. Si ce n'est pas le cas, alors le relier au GND de l'arduino.

 

le - de l'alim ,c'est le gnd en dessous du Vmot 12v .C'est bien ca ?

 

 

pour le condensateur ,j'ai un 100uf 25v deja brancher a l'alim c'est bon ? 

 

et voila pour le plan de cablage pour voir si mes devoir sont bien fait  :D

 



#10 Sandro

Sandro

    Pilier du forum

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

Posté 08 février 2022 - 06:32

Bonsoir,

 

du coup, je propose en première étape, de "corriger" le programme actuel pour enlever la durée des boutons accélérer/ralentir. Pour ça, il suffit d'enlever la boucle for. Le code sera le suivant :

/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole
*/
#define tempoDepart 2080;
int tempo = 0;                         // Moteur arrete
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;


#define driverDirPin 4
#define driverStepPin 5    
#define boutonAccelererPin 6    
#define boutonRalentirPin 7
#define boutonMarchePin 8
#define boutonArretPin 9


void setup()
{
  pinMode(driverDirPin, OUTPUT);
  pinMode(driverStepPin, OUTPUT);


  pinMode(boutonAccelererPin,
INPUT_PULLUP);  // L'autre cote du bouton au GND
  pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "
  pinMode(boutonMarchePin, INPUT_PULLUP);
  pinMode(boutonArretPin, INPUT_PULLUP);


  digitalWrite(driverDirPin, LOW);            // On met la broche DIR a l'etat bas
}


void loop()
{
    tempoAddition = 0;
    if (digitalRead(boutonAccelererPin) == LOW)      // Si le bouton accelerer est presse
    {
      tempoAddition = tempoAccelerer;
    }
    else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
    {
      tempoAddition = tempoRalentir;
    }
    else if (digitalRead(boutonMarchePin) == LOW)    // Si le bouton marche est presse
    {
      tempo = tempoDepart;
    }
    else if (digitalRead(boutonArretPin) == LOW)     // Si le bouton marche est presse
    {
      tempo = 0;
    }


    if (tempo > 0)
    {
      digitalWrite(driverStepPin, LOW);
      delayMicroseconds(tempo + tempoAddition);
      digitalWrite(driverStepPin,
HIGH);
      delayMicroseconds(tempo + tempoAddition);
    }
}

Je te laisse tester si ça fonctionne correctement.

 

 

Pour le reste, je te réponds après le repas


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 Sandro

Sandro

    Pilier du forum

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

Posté 08 février 2022 - 07:19

Dans l'absolu, il faut relier les pins nRESET et nSLEEP au 5V pour qu'il n'y ait pas de RESET, et que le drivers ne soit pas en mode veille. Si tu veux relier chacun de ces pins au 5V, ça marchera sans problème.

pour le branchement du nouveau driver 

les pins reset et sleep me donne problème .Il faut juste les relier entre elles ? comme sur le schema ? 

 

Le pin nSLEEP est déjà relié en interne au pin VDD (que tu alimente en 5V) via une résistance : donc par défaut, nSLEEP est à 5V (mais tu peux sans problème y appliquer 0V si tu veux entrer en mode veille, mais ça ne nous intéresse pas). On peut donc se passer de la connexion entre nSLEEP et 5V (c'est déjà fait "par défaut").

Pour nRESET, il n'y a pas de valeur par défaut, donc on est obligé de le relier nous même à quelque chose : soit le 5V, soit le pin nSLEEP (qui "partagera" son "5V par défaut").

 

Pour résumer, le plus simple, c'est de relier nRESET à nSLEEP ou à 5V (peu importe). nSLEEP étant connecté à rien si tu relies nRESET à 5V

 

 

 

le - de l'alim ,c'est le gnd en dessous du Vmot 12v .C'est bien ca ?

le - de l'alim, c'est celui de ton alimentation 12V. Il doit entre autre être relié au gnd en dessus du Vmot.

 

En gros, il faut que toutes les masses de ton circuit (ie le - de l'alim, et les GND de tous les composants) soient reliés par au moins un chemin. Tous les GND d'un même composant sont reliés en interne. Par contre, il ne faut pas que les "gros courants" passent à travers des liaisons internes (qui pourraient ne pas résister). Le mieux est si tu as un fil qui vas du - de l'alim 12V à un des GND de l'arduino, et un second qui vas du - de l'alim 12V au GND à coté de Vmot. Si c'est le cas, alors tu ne branches rien sur le GND à coté de VDD.
 

 

 

pour le condensateur ,j'ai un 100uf 25v deja brancher a l'alim c'est bon ?

Si tes cables sont courts (<10cm) et pas trop fins, ça devrait le faire. Si tes câbles sont longs et/ou très fins, alors si tu as, tu peux ajouter un condensateur à proximité immédiate du driver (sur la version popolu, ils conseillaient l'ajout, si tu n'en as pas, vu le prix des drivers, je te conseilles de tenter ta chance sans)

 

 

et voila pour le plan de cablage pour voir si mes devoir sont bien fait  :D

attachicon.gif20220208_172927.jpg

 

Je ne sais pas pourquoi, je ne vois pas ta pièce jointe (le lien lui même n’apparaît pas, il n'est visible que lorsque je cite ton message, et alors on me dit que j'y ai pas accès) : tu peux essayer de reposter l'image stp?


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 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 08 février 2022 - 10:35

Fichier joint  20220208_172927.jpg   55,67 Ko   0 téléchargement(s)Le pin nSLEEP est déjà relié en interne au pin VDD (que tu alimente en 5V) via une résistance : donc par défaut, nSLEEP est à 5V (mais tu peux sans problème y appliquer 0V si tu veux entrer en mode veille, mais ça ne nous intéresse pas). On peut donc se passer de la connexion entre nSLEEP et 5V (c'est déjà fait "par défaut").

 

sa veu dire que en mode veille je pourrais tourner mon focus librement sans que le moteur agis comme un frein ?

et ensuite l'activer via un bouton interupteur pour le metre sous tension ?

 

 

pour le schema 

Fichier joint  20220208_172927.jpg   55,67 Ko   0 téléchargement(s)Fichier joint  20220207_174555.jpg   71,19 Ko   0 téléchargement(s)

 

 



#13 Sandro

Sandro

    Pilier du forum

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

Posté 09 février 2022 - 12:02

sa veu dire que en mode veille je pourrais tourner mon focus librement sans que le moteur agis comme un frein ?

et ensuite l'activer via un bouton interupteur pour le metre sous tension ?

En mode veille, le moteur ne sera pas alimenté : il freinera donc que légèrement (freinage mécanique + freinage à cause du fait qu'il fonctionne en dynamo). Mais tu devrais sans problème pouvoir faire tourner la sortie du moteur à la main en mode veille.

 

Si tu veux utiliser cette fonctionnalité directement (ie sans que l'arduino gère cette partie), alors il te faut un bouton à deux positions, que tu places entre GND et nSLEEP : quand le bouton est fermé, tu peux tourner le focus à la main, quand il est ouvert, tu peux faire tourner le moteur depuis l'arduino.

Une alternative (à mes yeux plus compliquée, mais pas beaucoup plus) serait de relier le bouton à l'arduino, et l'arduino à nSLEEP (mais tu "gaspille" 2 pins de l'arduino sans que j'y voie un avantage).

 

Si tu fais ça, tu ne peux plus relier nRESET à nSLEEP, donc il faut forcément relier nRESET au 5V

 

 

pour le schema 

- il manque la connexion du 12V à Vmot du driver du haut

- le "?" de nRESET/nSLEEP est correct si tu veux que le driver soit toujours actif (sinon cf ci-dessus si tu veux exploiter le mode veille)

- le "?" du GND du driver est correct : pas la peine de connecter ce pin (tu as déjà une connexion entre l'autre GND et le GND de l'arduino)

- sur l'arduino, rien ne t'oblige à relier les deux pins GND (tu peux en utiliser un seul si tu veux). Mais c'est pas faux. Si ça t'arrange, les boutons ont le droit d'utiliser un pin GND de l'arduino different de celui d'où arrive l'alim (car le courant est faible). NB : si cette ligne t'embrouille, oublie la, il n'y a rien d'incorect dans ce que tu as fait.

 

Rq : sur tes schémas, c'est bien si tu gardes la barre au dessus des noms de pins qui l'ont, ou que tu la remplace par un "n" devant le nom : la barre ou le "n" signifient que la logique est inversée. Par exemple, si tu écris "ENABLE", ça veut dire qu'il faut 5V pour activer et 0V pour désactiver.Si tu écris nENABLE (ou ENABLE avec une barre), ça veut dire qu'il faut 0V pour activer, et 5V pour désactiver. Oublier le "n" ou la barre réduit donc la lisibilité
 



 


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.


#14 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 09 février 2022 - 12:28

OK d'ac
Je vais câbler et souder cette après-midi. Comme sur le schéma et avec tes conseils que tu la donne, ça devrais le faire.

Et ensuite je vais essayer de voir pour le programme.
Mais j'aurais peut-être encore besoin de tes lumières.
En tout un grand merci à toi .

#15 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 10 février 2022 - 10:13

En mode veille, le moteur ne sera pas alimenté : il freinera donc que légèrement (freinage mécanique + freinage à cause du fait qu'il fonctionne en dynamo). Mais tu devrais sans problème pouvoir faire tourner la sortie du moteur à la main en mode veille.

 

Si tu veux utiliser cette fonctionnalité directement (ie sans que l'arduino gère cette partie), alors il te faut un bouton à deux positions, que tu places entre GND et nSLEEP : quand le bouton est fermé, tu peux tourner le focus à la main, quand il est ouvert, tu peux faire tourner le moteur depuis l'arduino.

Une alternative (à mes yeux plus compliquée, mais pas beaucoup plus) serait de relier le bouton à l'arduino, et l'arduino à nSLEEP (mais tu "gaspille" 2 pins de l'arduino sans que j'y voie un avantage).

 

Si tu fais ça, tu ne peux plus relier nRESET à nSLEEP, donc il faut forcément relier nRESET au 5V

 

 

j'ai tout cablé comme sur le schéma ,a par le SLEEP et le RESET .

pour le mode veille "manuel" 

si je comprend ,il faut faire comme sur le nouveau schéma ?Fichier joint  20220210_1936321.jpg   44,08 Ko   0 téléchargement(s)

et j'ais commencer a voir pour le programme .

mais il faut que j'en refasse un a la suite du premier pour différensier les deux moteur ?



#16 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 10 février 2022 - 10:17

ou alors comme ca 

Fichier joint  20220210_1952341.jpg   49,45 Ko   0 téléchargement(s)



#17 Sandro

Sandro

    Pilier du forum

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

Posté 11 février 2022 - 12:15

Pour le schéma, le second m'a l'air bon (nRESET doit être relié au 5V).

Et pour l'intérupteur du nSLEEP, il faut en prendre un qui est stable sans les deux positions (ie où tu appuie d'un coté pour allumer et de l'autre pour éteindre ; ou alors où tu appuie une fois pour allumer et tu re-appuie pour éteindre).

 

 

Pour le programme, tu ne peux pas juste mettre deux programmes à cotés, car tu as droit à une seule boucle principale (loop) : il vas donc falloir apporter un certain nombre de modifications pour faire cohabiter les deux "sous-programmes".

 

Je te proposes les étapes suivantes :

1) tu montes le circuit

2) tu vérifie que l'ancien programme marche toujours

3) tu faits la petite modification que j'ai suggérée un peu plus haut (suppression du "for") et tu vérifie que ça marche toujours. NB : si tu avais déjà testé cette modification avant de modifier le circuit, alors tu peux faire le 2 directement avec la modif

4) tu fais une copie du programme du 3 (on en aura besoin plus tard)

5A) tu modifie le programme du 3 pour faire tourner le nouveau moteur avec le nouveau driver (en enlevant tout ce qui concernait l'ancien, n'essaye pas à ce stade de faire marcher les deux moteurs, ça ne marchera pas à ce stade)

5B) tu modifie le 5A pour utiliser les boutons et pouvoir commander le nouveau moteur (et que lui).

6) tu modifies le programme 5B pour qu'il soit non bloquant (ie il faudra remplacer les delayMicroseconds par des tests sur le temps écoulé depuis le début du delai (en utilisant la fonction micros() ). C'est l'étape la plus compliquée, on te guidera plus en détail une fois que tu aura fini le 5B

7)  tu fais la même chose que l'étape 6, mais pour le code 3 (ie ancien driver/moteur)

8) maintenant tu peux enfin fusionner les deux programmes

 

Je proposes que je te laisses avancer tant que tu y arrives, et si tu bloques ou que tu as une question, n'hésites pas à demander.

Je te conseilles de poster le résultat de chaque étape, comme ça on peut vérifier que tout vas bien et que tu ne te compliques pas la vie pour l'étape suivante.


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.


#18 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 18 février 2022 - 08:42

 
recoucou
bon ok j'en suis a l'étape 5a
j'ais pris comme model mon premier code en remplassent d5 par d2 et d4 par d3 , mais rien ne se passe 
mon moteur me donne deux trois acous et sarrète 
de plus et très étonnant il tourne quand je le prend dans ma main ou que je touche les fils dir ou step 
et il chauffe très fort 
la première question que je me pose c'est si mes fils du moteur lui meme ne serais pas inversés ? j'ais un détrompeur sur la cosse du moteur mais pas sur le driver .
mais si se serais le cas ,il tournerais quand meme ?
int tempo=1; // Cette valeur détermine la vitesse du moteur, 1 = rapide, 100 = lent


void setup() {
    pinMode(3, OUTPUT); // On initialise les broches D4 et D5 en sorties
    pinMode(2, OUTPUT);
}


void loop() {
    delayMicroseconds(1);


    digitalWrite(3, HIGH); // On met la broche DIR à l'état haut
    for (int i=0; i <= 200; i++){
        digitalWrite(2, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur de 200 pas dans un sens
        digitalWrite(2, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);
    }




}


#19 Sandro

Sandro

    Pilier du forum

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

Posté 18 février 2022 - 09:40

Bonsoir,

sauf erreur de ma part, si tu n'as pas câblé les pins MS1 à MS3, alors ils sont reliés à 0V par les résistances internes. Du coup, tu es en mode pas complets.

Vu la valeur de tempo (1ms), tu fais un pas environ toutes les 2 millisecondes, soit 500 pas/s.

Je ne suis pas sur que ton moteur puisse tourner aussi vite, encore moins s'il est initialement immobile.

 

Je te propose de commencer par tester avec tempo=100 (soit 5 pas/s) : si ça marche, alors tu saura qu'en mode pas entier, tu ne peux pas descendre trop pas avec les valeurs de tempo (tu peux aussi passer en mode micro-pas).

 

Si ça ne marches toujours pas, alors en effet, il est bien possible que ce soit un problème de cablage. En particulier, vérifie que les deux fils de la même bobine soient connectés sur les sorties avec le même nombre (1 ou 2). Si ça ne marches toujours pas, essaye d'inverser les deux fils d'une des deux bobines.


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.


#20 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 19 février 2022 - 10:05

j'ai trouvé l'erreur

j'inversais bètement les broches dir et step dans le programme 

int tempo=2; // Cette valeur détermine la vitesse du moteur, 1 = rapide, 100 = lent





void setup() {
    pinMode(2, OUTPUT); // On initialise les broches D4 et D5 en sorties
    pinMode(3, OUTPUT);
}




void loop() {
    delayMicroseconds(1);




    digitalWrite(2, HIGH); // On met la broche DIR à l'état haut
    for (int i=0; i <= 200; i++){
        digitalWrite(3, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur de 200 pas dans un sens
        digitalWrite(3, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);
    }
}

Sa tourne mieux comme ca 

par contre dans le doute 

j'ai suprimé le 5v a reset et je l'ai relier au sleep 

j'ais aussi suprimé le gnd a enable .

je ne sais si sa aura une incidence pour les futur manipe 

 






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

0 members, 0 guests, 0 anonymous users