Tu parles du 24V sur les contacts des relais ?

aide programation CNC
#41
Posté 05 octobre 2016 - 07:29
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#42
Posté 05 octobre 2016 - 07:57
#43
Posté 06 octobre 2016 - 08:44
#44
Posté 06 octobre 2016 - 08:51
Fichier(s) joint(s)
#45
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
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é ?
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#46
Posté 06 octobre 2016 - 09:10
#47
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 , 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"
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#48
Posté 06 octobre 2016 - 09:33

#49
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
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#50
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.
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#51
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.
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#52
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 , 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é
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#53
Posté 08 octobre 2016 - 06:18

#54
Posté 08 octobre 2016 - 06:24
Pour le programme, j'ai surtout mis de l'ordre .
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 .
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#55
Posté 09 octobre 2016 - 11:18
#56
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.
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#57
Posté 09 octobre 2016 - 12:19
#58
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.
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
#59
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
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.
Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega + Tronxy VEHO 600 PRO
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users