Aller au contenu


Photo
- - - - -

Débutant en programmation arduino et moteur NEMA


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

#1 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 16 juin 2019 - 08:48

Bonjour tout le monde je viens de me lancer dans la programmation arduino pour faire fonctionner deux moteurs pas à pas et je rencontre quelque problèmes pour mettre en oeuvre une action bien précise je vais essayer d'être claire.

 

je souhaite dans un premier temps pouvoir mettre en marche et arrêter deux moteur pas à pas en même temps grâce au bouton poussoir du joystick. autrement dis lorsque j appui une fois les moteurs se lancent et une autre fois les moteur s 'arrête.

 

Dans un deuxième temps je voudrais que les moteur soit branchez sur une multiprise qui est relier a un relais afin que lorsque le relais est alimenté les moteurs avancent de X-pas et lorsque qu'il ne l est plus ils reculent de x pas .

 

Merci par avance de votre aide. voici le code que j'utilise pour les commander avec le joystick.

 

   #include <AccelStepper.h>
 
// définit les numéros de pins
const int axeY=0;
const int axeX=1;
const  int stepPin = 11 ;
const  int dirPin = 10 ;
const int stepPin2 = 6 ;
const int dirPin2 = 5 ;
const int enPin = 9 ;
const int enPin2 = 3 ;
const int sw = 4 ;
bool run = 0;
 
#define stepPin2 6
#define dirPin2 5
#define sw 4
 
 
AccelStepper stepper(AccelStepper::DRIVER, stepPin2, dirPin2);
void  setup () {
       
  // Définit les deux broches comme sorties
  pinMode (stepPin, OUTPUT);
  pinMode (dirPin, OUTPUT);
  pinMode (axeX, INPUT);
  pinMode (axeY, INPUT);
  pinMode (stepPin2, OUTPUT);
  pinMode (dirPin2, OUTPUT);
  pinMode (enPin, OUTPUT);
  pinMode (enPin2, OUTPUT);
  pinMode (sw, INPUT);
 digitalWrite(sw, HIGH);
 stepper.setMaxSpeed(10000); 
  Serial.begin (9600);
  
}
 void loop () {
 
 
 
 if ((analogRead(axeX)) > 600){
  
  digitalWrite (dirPin2,HIGH); // Permet au moteur de se déplacerdans une direction particulière
  // Donne 200 impulsions pour effectuer une rotation d'un cycle complet
{
 
   stepper.setSpeed(10000);
 
stepper.runSpeed();
 }
 
 
  }
    if ((analogRead(axeX)) < 400){
    digitalWrite (dirPin2,LOW); // Permet au moteur de se déplacer dans une direction particulière
  // Donne 200 impulsions pour effectuer une rotation d'un cycle complet
 {
   stepper.setSpeed(-10000);
 
stepper.runSpeed();
 
 }
    }
 
 
 if ((analogRead(axeY)) > 600){
  
  digitalWrite (dirPin,HIGH); // Permet au moteur de se déplacer dans une direction particulière
  // Donne 200 impulsions pour effectuer une rotation d'un cycle complet
 {
    
 
    digitalWrite (stepPin, LOW);
    delayMicroseconds(0.5);
   
    digitalWrite (stepPin, HIGH);
    delayMicroseconds(0.5);
  
 }
 
 
  }
    if ((analogRead(axeY)) < 400){
    digitalWrite (dirPin,LOW); // Permet au moteur de se déplacer dans une direction particulière
  // Donne 200 impulsions pour effectuer une rotation d'un cycle complet
 {
     
 
    digitalWrite (stepPin, LOW);
    delayMicroseconds(0.5);
 
   
    digitalWrite (stepPin, HIGH);
    delayMicroseconds(0.5);
   
 
  
  
  }
 
 
 
    }
 }


#2 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 382 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 16 juin 2019 - 03:14

"les moteur soit branchez sur une multiprise qui est relier a un relais afin que lorsque le relais est alimenté les moteurs avancent de X-pas et lorsque qu'il ne l est plus ils reculent de x pas"

je ne vois pas ce qu'est la "multiprise"

Pour le relais, tu auras juste la sortie contact sur une entrée, si contact alors avance de X pas, si pas contact retour à la position d'origine ?



#3 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 16 juin 2019 - 03:29

Bonjour merci pour votre réponse en ce qui concerne la multiprise c'est une rallonge que j ai modifié afin de pouvoir relier coté femelle mes moteurs et coté mal au secteur avec un relais entre les deux mais la ou je rencontre des difficulté c'est pour créer le programme qui me permettra de faire avancer le moteur de X-pas lorsque le relais est activer et le faire reculer de X-pas quand il est désactivé car j'ai beaucoup de mal à appréhender la bibliothèque accelstepper et je n'arrive pas non plus a paramétrer le bouton du joystique afin qu'il serve de marche et arret du moteur auriez-vous un exemple de code à me montrer svp merci 



#4 Mike118

Mike118

    Staff Robot Maker

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

Posté 16 juin 2019 - 06:51

Je suis désolé mais je n'ai pas bien compris le problème. 
 

Au lieu de parler du programme complet parlons juste des différentes partie du code. 
 

L'arduino doit elle détecter que le relais est activé ou pas ? 

L'arduino dit d'avancer ou de reculer en fonction du relais ? Oui bien l'arduino dit toujours d'avancer mais en fonction de l'état du relais ça avancera ou reculera sans que l'arduino le sache ?


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  

 

 

 


#5 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 16 juin 2019 - 07:05

Désolé j'avoue que c'est n'est pas très clair  pour être précise je souhaiterais que le programme se décompose en trois parties 

 

en premier lorsque le relais est activé le moteur avance de x-pas puis s’arrête et lorsque le relais est désactive le moteur recule de x-pas et s’arrête

 

en second c'est la partie du code que j'ai publie ou le moteur est contrôlé par le joystick

 

et en dernier le bouton du joystick qui lorsque on appuie le moteur avance et lorsque on appuie un nouvelle fois il s’arrête 

 pour être plus précise le moteur est sur un rail linéaire qui commande un tiroirs  j'espère être plus claire et je vous remercie de vos réponses.  



#6 Mike118

Mike118

    Staff Robot Maker

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

Posté 16 juin 2019 - 07:48

Regardons donc d'abord cette première partie. 

Il faut brancher le " relais " ou bien un simple bouton sur l'arduino. 

 

en gros on peut imaginer un programme du genre 

 

etatRelais = digitalRead(PINRELAIS) 

if (oldEtatRelais != etatRelais  ) {

  if ( etatRelais ) 

   avancer(); // avance une certaine distance et s'arrête

  else reculer(); // recule une certaine distance et s'arrête

}

oldEtatRelais = etatRelais;

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  

 

 

 


#7 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 16 juin 2019 - 08:05

Merci pour votre réponse et temps que vous m'accorder cependant avec ce code lorsque le relais sera activer le moteur avancera indéfiniment comment rajouter le paramètre de X-pas dans ce code de façon a ce que lorsque le nombre de pas est atteint il s’arrête  merci pour vos réponse.



#8 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 382 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 16 juin 2019 - 08:53

Ok, si j'ai bien compris

lorsque ta multiprise est branchée (ou que tu alimentes la prise sur laquelle elle est branchée) le tiroir doit s'ouvrir (avance de X pas)

quand on coupe le courant (de la multiprise) le tiroir se referme (recule de X pas pour revenir à sa position)

le bouton du joystick te permettra de régler la course ouverture/fermeture



#9 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 16 juin 2019 - 09:37

Merci d'avoir répondu oui c est exactement ça mais je ne sais pas comment le mettre en oeuvre à l aide de la bibliothèque accelstepper pouvez vous m aider svp merci

#10 Mike118

Mike118

    Staff Robot Maker

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

Posté 17 juin 2019 - 12:42

la fonction  

" avancer() " 

serait une fonction : 

"Avancer de tel distance ... " 

 

Qui s'arrête quand la distance souhaitée est parcourue 

 

J'ai édité mon pseudo code avec un commentaire.


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  

 

 

 


#11 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 17 juin 2019 - 04:50

Bonjour en effet je n'avais pas compris en lisant votre code mais serait il possible d'avoir un exemple complet car je ne vois pas comment intégrer les paramètres de vitesse cela serai sympa et ça me permettrais de faire un test. Je vous remercie aussi pour toutes vos réponse et j’espère que je vais arriver a finaliser ce projet, petite parenthèse en plus pour le bouton du joystick comment le paramétrer pour que lorsque on appuie cela mette en marche le moteur et quand on ré appuie il s’arrête merci encore.



#12 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 27 juin 2019 - 09:02

Bonjour je reviens vers vous car j ai vraiment besoin d'aide j'ai essayé plusieurs combinaison de code et je n'arrive vraiment pas a faire fonctionner mon relais avec mon moteur voila le code que j'ai essayé pouvez vous m'aiguiller svp il me manque que cette partie pour que enfin mon projet soit abouti  merci de votre aide .

 

 
const int relais = 8;
 
bool int etatRelais = true;
bool int oldEtatRelais = true;
 
const  int stepPin = 11 ;
const  int dirPin = 10 ;
 
 oldEtatRelais = etatRelais;
 
 
void setup() {
 
  // put your setup code here, to run once:
pinMode (relais,INPUT);
digitalWrite(relais, HIGH);
  pinMode (stepPin, OUTPUT);
  pinMode (dirPin, OUTPUT);
 oldEtatRelais = etatRelais;
 
 
  Serial.begin (9600);
}
 
void loop() {
etatRelais = digitalRead(relais); 
 
if (oldEtatRelais != etatRelais  ) {
 
  if ( etatRelais ) 
 digitalWrite (dirPin2,HIGH); // Permet au moteur de se déplacerdans une direction particulière
  // Donne 200 impulsions pour effectuer une rotation d'un cycle complet
{
 
    digitalWrite (stepPin2, LOW);
    delayMicroseconds(1);
    digitalWrite (stepPin2, HIGH);
    delayMicroseconds(1);
 
 }
   avancer(1000); // avance une certaine distance et s'arrête
 
  else reculer(-1000); // recule une certaine distance et s'arrête
 
}
 
oldEtatRelais = etatRelais;
}


#13 Mike118

Mike118

    Staff Robot Maker

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

Posté 27 juin 2019 - 01:57

const int relais = 8;

bool etatRelais = true;
bool oldEtatRelais = true;

const  int stepPin = 11 ;
const  int dirPin = 10 ;
const int led = 13;
  

void setup() {
 // put your setup code here, to run once:
 pinMode (relais,INPUT);
 pinMode (led, OUTPUT);
 pinMode (stepPin, OUTPUT);
 pinMode (dirPin, OUTPUT);
 Serial.begin (9600);
}

void loop() {
 etatRelais = digitalRead(relais); 

 if (oldEtatRelais != etatRelais  ) {
  digitalWrite (led, HIGH); // Temoins lumineux indiquant que normalement ça doit tourner
  digitalWrite (dirPin,etatRelais); // Permet au moteur de se déplacerdans une direction particulière

  // Donne 200 impulsions pour effectuer une rotation d'un cycle complet
  for( uint8_t i = 0; i < 200; i++) {
   digitalWrite (stepPin, LOW);
   delayMicroseconds(1);
   digitalWrite (stepPin, HIGH);
   delayMicroseconds(1);
  }
  digitalWrite (led, HIGH);
 }

 oldEtatRelais = etatRelais;
}

Est ce que ce code marche ?


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 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 27 juin 2019 - 02:54

Bonjour merci pour votre réponse c'est vraiment gentil car je me prends la tête depuis un moment avec ce code. 

 

J'ai essayé le code que vous m'avez envoyé mais il ne se passe rien le moteur ne tourne pas voici l’installation que j'ai faite 

 

Mon relais est raccordé à une rallonge coté mal pour le 220v et coté femelle pour l'alimentation du moteur j' ai bien le témoin LED du relais allumé je vous envois une photo pour vous montrer en espérant que vous pourrez m'aider merci



#15 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 27 juin 2019 - 02:55

Voici une photo du branchement 

Image(s) jointe(s)

  • 20190627_154046 (1).jpg


#16 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 382 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 27 juin 2019 - 03:34

la première chose qui me vient en voyant la photo c'est : "Même pas peur !" :Koshechka_08:

c'est chaud de jouer avec du 230v à même le sol :help:

 

Mais du coup je ne comprends plus rien

les moteurs pas à pas sont branchés sur le transfo ?

Je croyais que tu voulais récupérer l'information du relais (état fermé ou ouvert) pour activé tes moteurs, mais du coup c'est l'inverse ?

 

Je pense qu'il va falloir reprendre depuis le début (je parle des explications) avec quelques schémas/photos :crazy:



#17 Mike118

Mike118

    Staff Robot Maker

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

Posté 27 juin 2019 - 03:53

Bonjour merci pour votre réponse c'est vraiment gentil car je me prends la tête depuis un moment avec ce code. 

 

J'ai essayé le code que vous m'avez envoyé mais il ne se passe rien le moteur ne tourne pas voici l’installation que j'ai faite 

 

Mon relais est raccordé à une rallonge coté mal pour le 220v et coté femelle pour l'alimentation du moteur j' ai bien le témoin LED du relais allumé je vous envois une photo pour vous montrer en espérant que vous pourrez m'aider merci

 

 

 

 

Est ce que la led sur le pin 13 clignote quand le temoin sur le relais change d'état ? 

 

Est ce que le moteur pas à pas se met à tourner en continu avec ce code : 

const int relais = 8;

bool etatRelais = true;

const  int stepPin = 11 ;
const  int dirPin = 10 ;


void setup() {
 // put your setup code here, to run once:
 pinMode (relais,INPUT);
 pinMode (stepPin, OUTPUT);
 pinMode (dirPin, OUTPUT);
 Serial.begin (9600);
}

void loop() {
   etatRelais = digitalRead(relais); 
   digitalWrite (dirPin,etatRelais); // Permet au moteur de se déplacerdans une direction particulière
   digitalWrite (stepPin, LOW);
   delayMicroseconds(1);
   digitalWrite (stepPin, HIGH);
   delayMicroseconds(1);
}

De plus quand ton relais change de position ton moteur devrait changer de sens avec ce code...


Sinon en effet, un vrai schémas ne serait pas de refus . 


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 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 27 juin 2019 - 05:18

Bonjour désolé si je ne suis pas très clair j'avoue que même pour moi c'est difficile je c'est ce que je veux mais je n'arrive pas à le mettre en oeuvre c'est très frustrant

(pour ce qui est du 230 volt et du relias ce n'est qu une installation provisoire le temps que cela fonctionne je l'isolerais dans une boite de dérivation une fois le  test réussi)

 

ce que je souhaiterais c'est que lorsque le relais est alimenté par le 230v le moteur avance de X je voudrais donc que arduino lise l’état du relais et si il est alimenter que le moteur avance de X pas pour cela et à l'inverse lorsque qu'il ne l'est plus le moteur recule.

 

pour l'instant j'ai une carte arduino uno un moteur nema et un driver tb6600 le step et le dir du driver son relié au pin 10 et 11 de l'arduino le relais au pin 8 

 

avec le code que vous m'avez donné lorsque je branche sur normalement ouvert et que je connecte le 230v rien ne se passe par contre lorsque je le branche sur normalement ferme et que j'alimente le 230v j' ai le moteur qui tourne en faisant un drôle de bruit sans fin 

 

en fait je ne sais pas si le relais est ce qu'il me faut peut être existe t'il un autre moyen pour arriver a mes fin pour être plus claire j'ai un tiroirs fixé sur un moteur que je voudrais alimenter par une prise alexa et lorsque la prise s’allume le tiroir sort automatiquement j'espère avoir était plus clair merci pour votre aide 



#19 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 382 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 27 juin 2019 - 05:33

en fait là ton relais est une sortie pas une entrée, la bobine du relais est alimentée par le 5v de l'arduino et le contact sec (la sortie du relais) alimente ta prise femelle, et donc le transfo du moteur.

Ça serait bien que tu nous fasses d'autres photos car j'ai un gros doute sur tout ton montage là...

Ton moteur est-il un pas à pas ? quelle référence ?

si tu veux récupérer l'info depuis un relais branché sur la prise, il te faut un relais avec une bobine en 230Vac + un autre relais (comme celui que tu as en photo)

pour piloter la sortie 230V qui alimente ton petit transfo.

 

Enfin, un moteur pas à pas se pilote avec un driver qui doit être alimenté et piloté avec une entrée DIR (direction) et CLK (impulsions)



#20 Stéphanie Jenny

Stéphanie Jenny

    Membre

  • Membres
  • 17 messages

Posté 27 juin 2019 - 05:58

J'utilise un moteur nema23,un driver TB6600 et un relais.

Justement je ne sais pas si mon montage est correct, j'avais regardé un tuto sur internet qui expliquait comment câbler un relais pour faire de la domotique.Moi ce que j'aimerai c'est faire en sorte que mon tiroir sorte automatiquement quand la prise alexa s'allume.Je vous envoie les photos de mon matériel.Pour information tout fonctionne avec le pilotage du joystick.

Je voudrai trouver un système pour que lorsque j'allume la prise le tiroir sorte automatiquement et lorsque j’éteins le tiroir rentre 

Image(s) jointe(s)

  • 20190627_184436.jpg
  • 20190627_184453.jpg
  • 20190627_184536.jpg
  • 20190627_185337.jpg





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

0 members, 0 guests, 0 anonymous users