Aller au contenu


Photo
- - - - -

aide programation CNC


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

#41 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 05 octobre 2016 - 07:29

Tu parles du 24V sur les contacts des relais ?



#42 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 05 octobre 2016 - 07:57

Bonsoir oui c'est ca mais je croit que j'avais un faut contact donc je refait le cablage mais je croit aussi que ça peut être dut au fait que je n'avais pas mis de delay, demain le cablage devrait être refait je redirai quoi. Bonne soiree

#43 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 06 octobre 2016 - 08:44

Bonsoir a tous donc voilà le problème est réglé avec les relais. Le programe fonctionne bien en auto, en manuel ca ca pas trop mal, par contre j'ai du utiliser les 2 contacteur des poussoir (no et nc) quand j'appuie le no laisse passer le 5v et quand je n'appuie pas le nc laisse passer le gnd car si je ne mettais pas le nc le relais restais allume plusieurs secondes avant de s'éteindre (meme sans delay). J'ai du essayer les codes 1 par un car quand je met le code tel qu'il est c'est loin de marcher comme prevu, le mode auto se lance sans avoir à appuyer sur la pédale, en fait ca m'affiche "longueur en MM" je met n'importe quel chiffre (il ne me limite meme pas comme demander dans le code) j'appuie sur # et il me lance le cycle direct, je n'ai pas encore branché le moteur mais tous porte à croire que ca ne marche pas car les verins se mettent directement en marche. Si vous avez des idée. Bonne soiree

#44 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 06 octobre 2016 - 08:51

Petit aperçut du mode auto

Fichier(s) joint(s)



#45 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 06 octobre 2016 - 09:02

Je regarde le code dans le weekend, mais est-ce que ça te dérange que je le reprenne tout ?

Ton code n'est pas tout mauvais, mais je veux commencer par le "restructurer" pour qu'il soit plus facile de si retrouver (des habitude de programmeur), je m'y perds entre la saisie, l'affichage et le réglage :D

 

Ta pédale, c'est bien du NO ?

Il me semble qu'il y avait un problème de limitation dans le code, je ne t'en avais pas parlé ?



#46 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 06 octobre 2016 - 09:10

Bonsoir, bien sûr que non, il n'y a aucun probleme, concernant la pédale il n'y a aucun probleme, concernant la pedale oui il me semble que c'est un no je vérifierai demain, ensuite concernant le code j'ai dut faire des modifs car en fait quand les relais sont sur high il sont arreter et sur low il sont en marche (en fait ils s'allument quand ils sont a la masse.donc dans le setup j'ai dut dire de mettre chaque relais sur high et inverser claques lignes de la loop. Bonne soiree et merci

#47 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 06 octobre 2016 - 09:22

Alors je viens de regardé vite fait ton code et je me demande comment je n'ai pas pu voir ça, il y a une grosse erreur pour ta première boucle "while ...", il y a des accolades mal placées, d'autre manquante ou mal placée et d'autres qui ne servent à rien.

En fait tu sors quasiment de ta boucle sans y être rentrer :D, comme pour la vérification de l'appuie sur la pédale. Peut-être que c'est aussi à l'origine de tes problème de relais.

Donc j'essaie de regarder ton code (pas de le survoler cette fois) demain soir pour refaire tes boucles correctement, en même temps j'en profiterai pour t'expliquer un moyen pour mieux repérer tes boucles et tes conditions, une chose qui était obligatoire quand j'ai fait mes études en info, et là je me rends compte que ce n'est pas si inutile que ça.

 

Edit : je ne veux pas regarder ton code ce soir parce que je m'endors (levé à 4h du matin pour aller bosser) et je risquerais de faire des conneries.

Edit2 : même soucis avec ta deuxième boucle "while"



#48 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 06 octobre 2016 - 09:33

Merci beaucoup, ne t'en fait pas ce n'est pas à la minute, quand on suite du boulot c'est pour ce reposer ;). De toute façon c'est pareil pour moi de toute façon je n'aurai rien pu enregistrer ce soir. Je me doutais bien qu'il y avais un probleme au niveau des accolades ( je découvre, j'ai découvert l'arduino et le code qui ca avec il n'y a que 1mois et demi lol) et je ne connais pas grand chose en informatique c'est pourquoi j'ai besoin de pas mal d'aide. En tous cas merci encore

#49 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 08 octobre 2016 - 12:16

En mode auto, ton cycle serait :

while (digitalRead(BA)==HIGH && digitalRead(BM)==LOW) // interrupteur rotatif sur position auto
     {
      if (digitalRead(P)==HIGH) //appuis sur interupteur poussoir pedale
         {
          digitalWrite(VS,HIGH); // serrage
          delay(1000);
          digitalWrite(VA1,HIGH); // avance scie 1
          digitalWrite(VA2,HIGH); // avance scie 2
          delay (1000);
          digitalWrite(VD1,HIGH); // descente scie 1
          digitalWrite(VD2,HIGH); // descente scie 2
          delay (1000);
          digitalWrite(VA1,LOW); // arret avance scie 1
          digitalWrite(VA2,LOW); // arret avance scie 2
          digitalWrite(VR1,HIGH); // recul scie 1
          digitalWrite(VR2,HIGH); // recul scie 2
          delay (1000);
          digitalWrite(VD1,LOW); // arret descente scie 1
          digitalWrite(VD2,LOW); // arret descente scie 2
          digitalWrite(VM1,HIGH); // montée scie 1
          digitalWrite(VM2,HIGH); // montée scie 2
          delay (1000);
          digitalWrite(VR1,LOW); // arret recul scie 1
          digitalWrite(VR2,LOW); // arret recul scie 2
          digitalWrite(VM1,LOW); // arret montée scie 1
          digitalWrite(VM2,LOW); // arret montée scie 2
          delay (1000);
          digitalWrite(VS,LOW); // arret serrage
          digitalWrite(VD,HIGH); // desserrage
          delay (1000);
          digitalWrite(VD,LOW); // arret desserrage
          delay (1000);
         }
     }

Correct ?

Je n'ai pas ré-écrit de code, j'ai juste mis les accolades là où elles étaient nécessaires et supprimé les autres.

 

A l'avenir il faudra peut-être revoir les delay() parce que j'ai souvenir que sur une ligne automatisée on a eu des soucis (et de la casse) parce que l'on avait réduit l'équivalent de ce delay() pour gagner du temps, ce qui fonctionnait parfaitement dans les petites sections mais dans les plus grosse se fut la cata...

Ce sera à voir quand le reste fonctionnera, si tu veux pouvoir le modifier en fonction de ta section de bois sans avoir à modifier le programme à chaque fois.

 

Ah, pendant que j'y suis tu as bien commandé ton bouton 3 positions, pour avoir un mode réglage ? Je vais corriger le programme pour tenir compte du mode réglage.

 

Edit :  boucle complète de mode auto



#50 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 08 octobre 2016 - 12:47

Même chose pour le mode manuel :

while (digitalRead(BM)==HIGH && digitalRead(BA)==LOW) //interrupteur rotatif position manuel
{
 if (digitalRead(PAV1)==HIGH) // poussoir avance scie 1
  digitalWrite(VA1,HIGH);     // verin avance scie 1
  else digitalWrite(VA1,LOW); // verin avance scie 1

 if (digitalRead(PAV2)==HIGH) // poussoir avance scie 2
  digitalWrite(VA2,HIGH);     // verin avance scie 2
  else digitalWrite(VA2,LOW); // verin avance scie 2

 if (digitalRead(PR1)==HIGH)  // poussoir recul scie 1
  digitalWrite(VR1,HIGH);     // verin recul scie 1
  else digitalWrite(VR1,LOW); // verin recul scie 1

 if (digitalRead(PR2)==HIGH)  // poussoir recul scie 2
  digitalWrite(VR2,HIGH);     // verin recul scie 2
  else digitalWrite(VR2,LOW); // verin recul scie 2

 if (digitalRead(PDE1)==HIGH) // poussoir descente scie 1
  digitalWrite(VD1,HIGH);     // verin descente scie 1
  else digitalWrite(VD1,LOW); // verin descente scie 1

 if (digitalRead(PDE2)==HIGH) // poussoir descente scie 2
  digitalWrite(VD2,HIGH);     // verin descente scie 1
  else digitalWrite(VD2,LOW); // verin descente scie 1

 if (digitalRead(PM1)==HIGH)  // poussoir montée scie 1
  digitalWrite(VM1,HIGH);     // verin montée scie 1
  else digitalWrite(VM1,LOW); // verin montée scie 1

 if (digitalRead(PM2)==HIGH)  // poussoir monté scie 2
  digitalWrite(VM2,HIGH);     // verin monté scie 2
  else digitalWrite(VM2,LOW); // verin monté scie 2

 if (digitalRead(PS)==HIGH){  // bouton serrage
  digitalWrite(VS,HIGH);      // verin de serrage
  digitalWrite(VD,LOW);       // verin desserrage

 if (digitalRead(PD)==HIGH)   // bouton de desserage
  digitalWrite(VD,HIGH);      // verin de desserage
  digitalWrite(VS,LOW);       // verin serrage
}

Je me suis juste occupé des accolades et un peu la présentation.

 

Je ne mets jamais les accolades en fin de ligne, par exemple sur la ligne "while" elle était juste avant le commentaire, je l'ai mis en début de ligne suivante. Même si sur les exemples pour Arduino que je vois elle est en fin de ligne. J'ai appris comme ça parce que ça facilite la lecture du programme, donc si quelqu'un, mike par exemple, peut confirmer que cela ne pose pas de problème sur l'Arduino.



#51 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 08 octobre 2016 - 02:35

Je n'ai pas vu dans ton programme comment tu faisais pour que ton moteur pas à pas tourne soit dans un sens, soit dans l'autre.



#52 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 08 octobre 2016 - 04:45

#include <EEPROM.h>
#include <Stepper.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

//Moteur pas à pas
#define NombrePas 200
#define Pulse 12
#define Dir 13
Stepper stepper(NombrePas, Pulse, Dir);

//Clavier
const byte LIGNES = 4;
const byte COLONNES = 4;

#define C1 32
#define C2 40
#define C3 42
#define C4 44
#define L1 46
#define L2 48
#define L3 50
#define L4 52

char touches [LIGNES][COLONNES] = { // Touche 'A' pour 'Valider'
{'1','2','3','A'}, // Touche 'B' pour 'Changer longueur'
{'4','5','6','B'}, // Touche 'C' pour 'Changer delais'
{'7','8','9','C'}, // Touche 'D' pour 'Delete'
{'*','0','#','D'}  // Touche '#' pour 'Annuler'
};                 // Touche '*' pour 'Initialiser'

byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4};

char touche;
unsigned int valeur; // type modifié
long NBpas // valeur/0.628
unsigned long lDelais;

Keypad clavier = Keypad (makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );

// Afficheur LCD
#define RS 53
#define E 51
#define D4 49
#define D5 47
#define D6 45
#define D7 47

LiquidCrystal lcd(RS, E, D4, D5, D6, D7); 


// Entrées et sorties
#define PDR 14 // poussoir deplacement recul
#define PDA 15 // poussoir deplacement avance
#define PD 16 // poussoir desserrage
#define PS 17 // poussoir serrage 
#define PR2 18 // poussoir scie 2 recul
#define PAV2 19 // poussoir scie 2 avance
#define PM2 20 // poussoir scie 2 montée
#define PDE2 21 // poussoir scie 2 descente
#define PR1 23 // poussoir scie 1 recul
#define PAV1 25 // poussoir scie 1 avance
#define PM1 27 // poussoir scie 1 montée
#define PDE1 29 // poussoir scie 1 descente
#define BM 31 // bouton manuel
#define BA 33 // bouton auto
#define FDC1 39 // capteur fin de course 1
#define FDC2 41 // capteur fin de course 2
#define P 37 // pedale
#define VD1 2 // verin scie 1 dessente 
#define VM1 3 // verin scie 1 montée
#define VA1 4 // verin scie 1 avance
#define VR1 5 // verin scie 1 recul
#define VD2 6 // verin scie 2 descente
#define VM2 7 // verin scie 2 montée
#define VA2 8 // verin scie 2 avance
#define VR2 9 // verin scie 2 recul
#define VS 10 // verin serrage
#define VD 11 // verin desserage





void setup (){
lcd.begin(16,2); // Définition de l'affiheur LCD
delay(10);
lcd.setCursor(0,0);
lcd.print("Bienvenue");
delay (5000);
lcd.clear();
delay(10);

stepper.setSpeed(477); // vitesse moteur pas à pas

// Etat des ports
pinMode(PDR,INPUT); // poussoir deplacement recul
pinMode(PDA,INPUT); // poussoir deplacement avance
pinMode(PD,INPUT); // poussoir desserrage
pinMode(PS,INPUT); // poussoir serrage 
pinMode(PR2,INPUT); // poussoir scie 2 recul
pinMode(PAV2,INPUT); // poussoir scie 2 avance
pinMode(PM2,INPUT); // poussoir scie 2 montée
pinMode(PDE2,INPUT); // poussoir scie 2 descente
pinMode(PR1,INPUT); // poussoir scie 1 recul
pinMode(PAV1,INPUT); // poussoir scie 1 avance
pinMode(PM1,INPUT); // poussoir scie 1 montée
pinMode(PDE1,INPUT); // poussoir scie 1 descente
pinMode(BM,INPUT); // bouton manuel
pinMode(BA,INPUT); // bouton auto
pinMode(FDC1,INPUT); // capteur fin de course 1
pinMode(FDC2,INPUT); // capteur fin de course 2
pinMode(P,INPUT); // pedale
pinMode(VD1,OUTPUT); // verin scie 1 dessente 
pinMode(VM1,OUTPUT); // verin scie 1 montée
pinMode(VA1,OUTPUT); // verin scie 1 avance
pinMode(VR1,OUTPUT); // verin scie 1 recul
pinMode(VD2,OUTPUT); // verin scie 2 descente
pinMode(VM2,OUTPUT); // verin scie 2 montée
pinMode(VA2,OUTPUT); // verin scie 2 avance
pinMode(VR2,OUTPUT); // verin scie 2 recul
pinMode(VS,OUTPUT); // verin serrage
pinMode(VD,OUTPUT); // verin desserage
}



void loop()
{
 while (digitalRead(BA)==HIGH && digitalRead(BM)==LOW) // interrupteur rotatif sur position auto
 {
  if (digitalRead(P)==HIGH) //appuis sur interupteur poussoir pedale
    {
     digitalWrite(VS,HIGH); // serrage
     delay(1000);
     digitalWrite(VA1,HIGH); // avance scie 1
     digitalWrite(VA2,HIGH); // avance scie 2
     delay (1000);
     digitalWrite(VD1,HIGH); // descente scie 1
     digitalWrite(VD2,HIGH); // descente scie 2
     delay (1000);
     digitalWrite(VA1,LOW); // arret avance scie 1
     digitalWrite(VA2,LOW); // arret avance scie 2
     digitalWrite(VR1,HIGH); // recul scie 1
     digitalWrite(VR2,HIGH); // recul scie 2
     delay (1000);
     digitalWrite(VD1,LOW); // arret descente scie 1
     digitalWrite(VD2,LOW); // arret descente scie 2
     digitalWrite(VM1,HIGH); // montée scie 1
     digitalWrite(VM2,HIGH); // montée scie 2
     delay (1000);
     digitalWrite(VR1,LOW); // arret recul scie 1
     digitalWrite(VR2,LOW); // arret recul scie 2
     digitalWrite(VM1,LOW); // arret montée scie 1
     digitalWrite(VM2,LOW); // arret montée scie 2
     delay (1000);
     digitalWrite(VS,LOW); // arret serrage
     digitalWrite(VD,HIGH); // desserrage
     delay (1000);
     digitalWrite(VD,LOW); // arret desserrage 
     delay (1000);
    }
 }

 while (digitalRead(BM)==HIGH && digitalRead(BA)==LOW) //interrupteur rotatif position manuel
 {
  if (digitalRead(PAV1)==HIGH) // poussoir avance scie 1
   digitalWrite(VA1,HIGH); // verin avance scie 1
   else digitalWrite(VA1,LOW); // verin avance scie 1

  if (digitalRead(PAV2)==HIGH) // poussoir avance scie 2
   digitalWrite(VA2,HIGH); // verin avance scie 2
   else digitalWrite(VA2,LOW); // verin avance scie 2

  if (digitalRead(PR1)==HIGH) // poussoir recul scie 1
   digitalWrite(VR1,HIGH); // verin recul scie 1
   else digitalWrite(VR1,LOW); // verin recul scie 1

  if (digitalRead(PR2)==HIGH) // poussoir recul scie 2
   digitalWrite(VR2,HIGH); // verin recul scie 2
   else digitalWrite(VR2,LOW); // verin recul scie 2 

  if (digitalRead(PDE1)==HIGH) // poussoir descente scie 1
   digitalWrite(VD1,HIGH); // verin descente scie 1
   else digitalWrite(VD1,LOW); // verin descente scie 1

  if (digitalRead(PDE2)==HIGH) // poussoir descente scie 2
   digitalWrite(VD2,HIGH); // verin descente scie 1 
   else digitalWrite(VD2,LOW); // verin descente scie 1 

  if (digitalRead(PM1)==HIGH) // poussoir montée scie 1
   digitalWrite(VM1,HIGH); // verin montée scie 1
   else digitalWrite(VM1,LOW); // verin montée scie 1

  if (digitalRead(PM2)==HIGH) // poussoir monté scie 2
   digitalWrite(VM2,HIGH); // verin monté scie 2
   else digitalWrite(VM2,LOW); // verin monté scie 2

  if (digitalRead(PS)==HIGH){ // bouton serrage
   digitalWrite(VS,HIGH); // verin de serrage
   digitalWrite(VD,LOW); // verin desserrage

  if (digitalRead(PD)==HIGH) // bouton de desserage
   digitalWrite(VD,HIGH); // verin de desserage
  digitalWrite(VS,LOW); // verin serrage
 }
 while (digitalRead(BA)==LOW && digitalRead(BM)==LOW) // interrupteur rotatif sur position Réglage{
 {
  touche = clavier.getKey();
  if(touche=='B') // Demande de changement de longueur
    {
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Saisir longueur:");
     delay (1000);
     valeur = Saisir_longueur();
     If (valeur != false)
        {
         // positionnement de la scie mobile
        }
    }
  if(touche=='C') // Demande de changement de délais        {
    {
     lcd.setCursor(0,0);
     lcd.print("Saisir délais:");
     delay (1000);
     lDelais = Saisir_delais();
     If (valeur!= false)
        {
         // Attribution de la valeur au délais
        }
    }
 }

 if (digitalRead(BM)==HIGH && digitalRead(BA)==HIGH) // Défaut du bouton rotatif
 {
  lcd.setCursor (2,0);
  lcd.print("Defaut bouton");
  lcd.setCursor (3,1);
  lcd.print("Manu/Auto"); 
 }
}


//*************** Autres Fonctions du programme *************
//****************** A compléter par nouss08 ****************
unsigned int Saisir_longueur() // retourne la valeur saisie ou False si la touche 'Annuler' a été pressée
{
// Code de saisie de valeur
}

unsigned long Saisir_delais()
{
// Code de saisie de valeur
}//***********************************************************

Je te laisse du boulot :D , il faut bien que tu apprennes

 

Edit : tu verras que je t'ai défini une utilisation pour chacune des touche A, B, C et D, tu peux garder comme ça ou modifier si tu veux.

Edit 2 : correction d'une petite erreur de frappe dan le programme

            la mise en page n'est pas restée :( , mais ça n'entrave pas le fonctionnement du programme.

Edit 3 : j'ai refait la mise en page parce que cela m'a permis de voir que le copier/coller n'avais pas tout copié



#53 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 08 octobre 2016 - 06:18

Bonjour, merci beaucoup, je vois que tu as pas mal bosser sur le programe, je vient de rentrer du boulot, j'essai de regarder a ca demain ;) sinon oui j'ai reçu et instaler le bouton 3 positions par contre il n'y a que 2 contacteur, faut il que j'en commande un troisième? Merci beaucoup. je regarderai voir ce qu'il me reste a faire. Merci encore bonne soiree

#54 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 08 octobre 2016 - 06:24

Pour le programme, j'ai surtout mis de l'ordre :D.

 

Pour le bouton tu as tout ce qu'il faut, et c'est le même câblage que le précédent, la différence c'est que dans sa position centrale, les deux entrée de l'Arduino seront à l'état bas (= LOW), et donc lorsqu'elles seront toue les deux à l'état bas ce ne sera plus considéré comme un défaut du bouton mais comme le mode réglage. J'ai modifié le programme en fonction de ça, même si je te laisse compléter le mode réglage :D .



#55 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 09 octobre 2016 - 11:18

Ok merci, par contre je ne veut pas abuser de ta gentillesse mais peut tu me guider dans ce que je doit refaire au code pour le déplacement car je sèche vraiement. Bonne journee

#56 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 09 octobre 2016 - 12:10

Est-ce que le code que tu avais fait pour le déplacement fonctionnait ?

Si oui, tu le reprends mais sachant qu'il faut tenir compte du fait qu'il doit se déplacer dans un sens si la nouvelle longueur est inférieure à la précédente ou dans l'autre sens si la nouvelle longueur est supérieure à la précédente.

 

Pour le calcul du nombre de pas il faudrait peut-être revoir la formule.

 

Je vais regarder comment faire pour le moteur pas à pas avec l'arduino...

 

 

Edit : j'ai défini une utilisation pour la touche ' * ', ça tombe bien parce que j'avais une fonction que je trouvais pas comment lancer, alors qu'elle est très utile surtout lors de la première utilisation de la machine.



#57 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 09 octobre 2016 - 12:19

Ok merci je vais essayer de voir a ca, je ne sais pas ci le moteur tournais car il n'est pas encore branché, j'essai de faire ca cet après midi . Bonne journee

#58 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 09 octobre 2016 - 01:36

Pour le positionnement de la scie mobile, je verrais ça :

// lire position_actuelle dans l'EEPROM
// si valeur > position_actuelle
             // deplacement = valeur - position_actuelle
             // NbPas = deplacement / PAS
             // PAS = 0,628
             // Tourner de NbPas dans le sens horaire
// si valeur < position_actuelle
             // deplacement = position_actuelle – valeur
             // NbPas = deplacement / PAS
             // PAS = 0,628
             // Tourner de NbPas dans le sens antihoraire
// Ecrire valeur dans l'EEPROM

Je te laisse écrire le code.

Pour la rotation du moteur pas à pas il y a plusieurs façon de faire :

  • soit tu lui demande de tourner du nombre de pas désiré
  • soit tu crées une boucle dans laquelle ton moteur ne tourne que d'un pas, jusqu'à ce qu'il est atteint le nombre de pas désiré ou un fin de course.

Je te conseille la seconde solution parce que dans la première les fins de course ne seront pas lu avant qu'il est effectué le nombre total de pas, même s'il arrive à un fin de course.

 

Le sens horaire et antihoraire sont arbitraire : il faudrait savoir dans quel sens se déplace la scie pour le sens horaire avant d'être sûr, ce détail sera à voir en fonction de la mécanique.



#59 nouss08

nouss08

    Membre occasionnel

  • Membres
  • Pip
  • 146 messages

Posté 09 octobre 2016 - 06:10

merci, la je suis en train d'essayer le moteur en direct et je n'arrive pas a le faire tourner pouver vous m'aider, je reprecise qu'il sagit d'un moteur nema 42 et d'un driver DQ2722MA (http://discountcncparts.com/products/wantai-stepper-digital-driver-dq2722ma-110-220v-7-0a-300-microsteps-matching-nema-42-stepper-motor-cnc-laser-mill/) pour faire les essais je met le code suivant:

#include <Stepper.h>
 
#include <Stepper.h>
#define NombrePas 200
#define Pulse 31,33
#define Dir 27,29
Stepper moteur(NombrePas, Pulse, Dir);
 
void setup()
{
    moteur.setSpeed(30); //30 tours par minute
    //(rappel : ici le moteur fait 200 pas par tour, on fera donc 6000 pas par minute) 
}
 
void loop()
{
    moteur.step(10);
    delay(100);
    moteur.step(-10);
    delay(2000);
}

sur le driver il y a des petits switch et je me demande ci ca ne peut pas venir de ca. quand je met le numero 6 de DP2 sur on le moteur tourne sans fin dans le meme sens. 

concernant les branchement, pour les essais c'est comme dans le code c'est a dire broche 31.33.27 et 29 sinon les branchement prevu c'est A- et B- sur le GND et A+ et B+ sur les broches 12 et 13. je ne sais pas du tous quoi faire.

les fils du moteur:

- jaune -> B+

- rouge-> A+

-bleu -> B-

- vert -> A-

bonne soiree



#60 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 4 540 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 09 octobre 2016 - 07:10

Il faut bien configurer les petits switchs du driver.

Pourquoi 2 pins pour 'Pulse' et 2 pins pour 'Dir' ?

Dans un premier temps, essaie dans ton programme de le faire tourner seulement dans un sens.






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

0 members, 0 guests, 0 anonymous users