2 Motor Shield sur Arduino Uno

Bonjour,
Je dispose de 3 motor shield et d'un arduino Uno pour refaire un semblant d'imprimante .
J'ai uniquement pour mission de tracer des lignes pour des tests d'encre conductrice.

Ma question se porte sur le fait de pouvoir empiler ou non des motor shield sur le même arduino uno, car si je ne me trompe pas il risque d'y avoir conflit car ils vont utiliser les même E/S non ?

Je me permet de citer mon code pour vous montrez mon idée sur le sujet( je débute en arduino).
ah oui et j'utilise des moteurs Pas à Pas (M42STH47-1684SC-S).

#include <Stepper.h>

const int stepsPerRevolution = 200;// fixe le nombre de pas par tour du moteur
const int stepsInImpresion = 1;// fixe le nombre de pas(° de rotation) entre 2 gouttes


// déclarations des moteurs et des pins associés
Stepper myStepperX(stepsPerRevolution,3,4,5,6);
Stepper myStepperY(stepsPerRevolution,7,8,9,10);
//Stepper myStepperZ(stepsPerRevolution,X ,X ,X ,X );

// déclarations des paramètres d'espacement
int nbLigne=2;
int epaisseurLigne=2;
int octo=11;
int longueurLigne=10;
int compteurY=0;

void setup() {

int i=0;
int j=0;
int k=0;

 
 //on définit la sortie vers l'arduino de l'octo
 pinMode(octo, OUTPUT);  
  // déclaration de la vitesse à 60 rotation par minute pour les 3 moteurs
  myStepperX.setSpeed(60);
  myStepperY.setSpeed(60);
  //myStepperZ.setSpeed(60);
  

  //On avance de l'origine vers la première ligne (X et Y tournent X tours)
  myStepperX.step(stepsPerRevolution);//1 tour en X
  myStepperY.step((3*stepsPerRevolution));//3 tours en Y

}
void loop() 
{  
 //myStepperZ.step(stepsPerRevolution); //Descente de la tête d'impression         
 //myStepperZ.step(-stepsPerRevolution); //On remonte  la tête d'impression

      for (i=1,i=nbLigne,1)
      {
        for(j=1,j=epaisseurLigne,1)
        {
                  for(k=1,k=longueurLigne,1)
                   {
                    digitalWrite(octo, HIGH)// envoie sur l'arduino qui controle l'octo une demande de goutte
                    myStepperX.step(stepsInImpresion);// après le dépot d'une goutte on bouge un peux pour la suivante(1 pas)
                    digitalWrite(octo, LOW)// RAZ du signal octo
                   }
           myStepperX.step((-10*stepsInImpresion));// retour en début de ligne
           myStepperY.step(stepsInImpresion);// décalage en Y pour épaissir la ligne(1 pas)           
          }  
       myStepperY.step(stepsPerRevolution);// décalage en Y pour commencer une nouvelle ligne (1 tour)   
      } 
compteurY= (3*stepsPerRevolution)+((stepsInImpresion*epaisseurLigne)*nbLigne)//calcul du décalage en Y pour revenir à l'origine (3 tour ini+lepaisseur* le nb de ligne)

 myStepperX.step(-stepsPerRevolution);//RAZ en X (1 tour initial)
 myStepperY.step(-compteurY);//RAZ en Y
}

Donnez nous un lien vers le type de motor shield que vous avez...(mais dans l'absolu vous avez raison, généralement ils sont prévus pour utiliser des pins bien définies, comme A0,A1 et D3,D8,D9,D11,D12,D13 pour le shield standard et donc pas empilables)

Si vous voulez plus de moteurs et si vous voulez faire du tracé regardez du côté des GRBL ou CNC Shield

merci pour votre réponse.

Je possède exactement ce type de motor shield, on ne peux donc pas procéder comme je l'ai fait dans mon code à savoir affecter des autres entrées sorties à ce shield ? :confused:
Si je souhaite utiliser 3 moteurs avec 3 moteur shield il me faut donc 3 arduino uno ?

Arnaud_G:
merci pour votre réponse.
https://www.arduino.cc/en/Main/ArduinoMotorShieldR3
Je possède exactement ce type de motor shield, on ne peux donc pas procéder comme je l'ai fait dans mon code à savoir affecter des autres entrées sorties à ce shield ? :confused:
Si je souhaite utiliser 3 moteurs avec 3 moteur shield il me faut donc 3 arduino uno ?

Bonsoir
pour utiliser "directement" 3 shields empilés sur un uno , ce n'est pas possible
mais utiliser 3 shields "non empilés" c'est à priori possible .

il faut mettre un peu les mains dans le cambouis (hard et soft)

Bonsoir,
Donc à partir d'un seul arduino Uno je pourrais utiliser 2/3 motor shield ? à condition de ne pas les empiler ? mais comment faire pour qu'ils récupèrent leur signaux de commande s'ils ne sont pas empilés?

Il faut connecter les pins du Shield qui vont bien (celles que j'ai listé ci dessus) avec des fils sur des entrées équivalentes de votre arduino (analogique, PWM) et dupliquer la librairie fournie en changeant le nom de classe et en changeant le no des pins dans la librairie . Si la librairie n'utilise pas d'interrruption ou de ressources matérielles particulières comme les timers alors ça devrait marcher. Mais à regarder finement...au lieu de galérer comme cela achetez plutôt un CNC Shield... c'est exactement adapté à ce que vous voulez faire...

Si vous avez un peu de patience pour la livraison, un truc comme ça c'est 15 euros avec le UNO, le shield, les 4 drivers de moteurs et le câble USB...(mais c'est une version 3.0 pas 3.5)

Cf ce Time lapse et la 2nde partie qui en utilise un (Un peu bricolo son truc)

Merci pour votre réponse.
Un peux compliqué comme solution pour quelqu'un qui débute comme moi.
Je pense (disposant de 2 arduino uno au max) que je vais utiliser chacun avec un motor shield un X et un Y, puis régler les Z manuellement dans un premier temps pour mes essais.
Sinon en effet le CNC shield serait parfait pour mon projet à voir si je peux l'obtenir.

Mais encore une question après dialogues avec la personnes qui s'occupe de ce projet il s'avère que les moteurs que nous avions sont en 2.8 v chose pas pratique du tout.

Nous allons donc investir, mais nous aimerions pouvoir contrôler le courant et non la tension qui est fournis à nos futur moteur Pas à Pas. Ces éléments le permettraient ils ?

Merci d'avance.

Pour le Z un tout petit servo (genre SG90) connecté directement sur 2 pins libres de votre arduino peut suffire parce que pour abaisser un crayon il ne faut pas piloter un gros moteur si le stylo est bien calé et qu'il suffit de Le baisser de 2 ou 3 mm pour qu'il touche la feuille (on utilise un gros moteur en Z quand vraiment on veut pouvoir finement régler la hauteur sur plusieurs cm comme avec une machine outil qui doit creuser à plusieurs profondeurs ou une imprimante 3D).

Des moteurs 2.8v ça,ne veut pas dire grand chose dans l'absolu (si vous mettez 4 ou 5 ils ne grilleront sans doute pas) - ce qui compte principalement c'est l'intensité / puissance totale -> donc faudrait regarder les specs. Vous avez un lien? (j'ai trouvé cela qui donne une Inductance /phase de 2.8 mH et donc la tension d’alimentation optimale d’un moteur pas à pas hybride serait sans doute plutôt à 46 volts - cf mais bon je peux me tromper)

Pour le contrôle du courant, si vous regardez côté Pololu --> A4988 Stepper Motor Driver Carrier ou les A4988, DRV8825, DRV8824, DRV8834, and DRV8880 - vous verrez que ces composants offrent un potentiomètre de réglage du courant max - faire cela avec un multimètre, pas à la louche! C'est la clé pour ne pas griller vos moteurs si d'aventure ils venaient bloquer (un moteur qui force va essayer de tirer tout le courant possible pour vaincre le blocage)

Ces drivers se mettent sur la carte CNC pour chaque moteur. Ici la carte est vide

Ici ils ont mis 4 drivers dans les 4 embases prévues, avec un petit radiateur sur le composant pour la dissipation de chaleur et on voit bien le petit potentiomètre d'ajustement du courant max que l'on règle avec un petit tournevis en croix)

Donc si vous prenez un Arduino CNC Shield, prenez des drivers à brancher dessus qui offrent cette possibilité de limitation de courant (Le CNC shield est livré sans driver si rien n'est mentionné, donc à prévoir en plus) et prenez un shield avec une version la plus à jour (3.5 au moins de mémoire)

Cela dit si vous gérez bien Le mouvement de votre machine les moteurs ne forceront pas et donc vous n'aurez pas d'appel massif de courant. Donc en première approche votre shield peut suffire. Faites juste attention ne pas bloquer et alimentez votre shield avec une alim qui ne délivre pas trop de puissance

Oui il est vrai que un tout petit moteur peut suffire mais je ne vous ai pas assez explicité le contexte, enfaîte le projet que j'ai à faire utilise une "carcasse d'imprimante 3D" ou l'électronique est HS.
La carcasse de l'imprimante possède un moteur X, un Z et deux sur Y, j'ai vu que sur le shield CNC on peut piloter 3 moteur dont un double (ici mon Y).
Les moteurs présent précédemment tournais en 2.8V et 1.68A avec 200 pas.

Pour simplifier mon alim je vais utiliser ceux-ci:
XCSOURCE NEMA 17 2 Phase Moteur 4-Wire 1.8A Stepper 42 * 42 * 34mm

Avec un CNC Shield sur mon premier Arduino Uno, et mon deuxième arduino Uno servira à contrôler le dépôt d'encre par piézo.

Encore merci à tous pour vos réponses.