Aller au contenu

GO Print

Impression en 2 couleurs ou plus !


inteloide

Messages recommandés

tu peux me faire un copier coller d'un extrait du paquet de lignes dont tu parles stp?

[edit]  Si c'est juste le plugin cura, tu peux simplement déposer le fichier dans ~/.cura/VERSION/plugins

Modifié (le) par lefresh
Lien vers le commentaire
Partager sur d’autres sites

case 601: 
		// Pause for filament change (New code by Inteloide)
		// Syntaxe : 	X[pos] Y[pos] Z[relative lift] : Position parking (en relatif ! doit être positif !)
		//				E[initial retract] : longueur de filament retiré juste avant la pause (doit être négatif !)
		//				L[later retract distance for removal] : longueur de filament (doit être négatif !)
		// 				T[time to wait] : Durée de l'attente (en secondes)
		//				P[pin input to change continue] : Entrée sur laquelle on attent le changement d'état (18=fin de course axe X)
		//				I[Interval between beep] : Intervale entre deux beeps (en secondes, défaut = 5)
		//				D[Beep duration] : Durée de chaque beep (en secondes, défaut = 0.5)
		//				B[pin of the beep] : Pin du beeper (défaut = 27)
		//
		// NB: Par défaut on attend un temps de 180 secondes
		// Exemple de syntaxes :
		// M601 X10 Y10 Z15 E-5 T300 : Remonte de 15mm, va dans un coin du plateau, attends 300 secondes
		// M601 X10 Y10 Z15 E-5 P18 I2 D0.8 B27 : Remonte de 15mm, va dans un coin du plateau, attends appui sur capteur axe X
    {
		// Save positions
			float target[4];
			float lastpos[4];
			target[X_AXIS]=current_position[X_AXIS];
			target[Y_AXIS]=current_position[Y_AXIS];
			target[Z_AXIS]=current_position[Z_AXIS];
			target[E_AXIS]=current_position[E_AXIS];
			lastpos[X_AXIS]=current_position[X_AXIS];
			lastpos[Y_AXIS]=current_position[Y_AXIS];
			lastpos[Z_AXIS]=current_position[Z_AXIS];
			lastpos[E_AXIS]=current_position[E_AXIS];
        
		//retract by E
			if(code_seen('E')) {
			  target[E_AXIS]+= code_value() * global_unit_modifier;
			} else {
			  #ifdef FILAMENTCHANGE_FIRSTRETRACT
				target[E_AXIS]+= FILAMENTCHANGE_FIRSTRETRACT ;
			  #endif
			}
			plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder);

        //lift Z
			if(code_seen('Z')){
			  target[Z_AXIS]+= code_value() * global_unit_modifier;
			} else {
			  #ifdef FILAMENTCHANGE_ZADD
				target[Z_AXIS]+= FILAMENTCHANGE_ZADD ;
			  #endif
			}
			plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder);

        //move xy
			if(code_seen('X')) {
			  target[X_AXIS]+= code_value() * global_unit_modifier;
			} else {
			  #ifdef FILAMENTCHANGE_XPOS
				target[X_AXIS]= FILAMENTCHANGE_XPOS ;
			  #endif
			}
			if(code_seen('Y')) {
			  target[Y_AXIS]= code_value() * global_unit_modifier;
			} else {
			  #ifdef FILAMENTCHANGE_YPOS
				target[Y_AXIS]= FILAMENTCHANGE_YPOS ;
			  #endif
			}
			plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder);
		
		// More retract ?
			if(code_seen('L')) {
			  target[E_AXIS]+= code_value() * global_unit_modifier;
			} else {
			  #ifdef FILAMENTCHANGE_FINALRETRACT
				target[E_AXIS]+= FILAMENTCHANGE_FINALRETRACT ;
			  #endif
			}
			plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder);

        //finish moves
			st_synchronize();
        //disable extruder steppers so filament can be removed
			disable_e0();
			disable_e1();
			disable_e2();
			delay(100);
		
		// Variables générales
			unsigned long currentMillisBeeper = 0; 	// Top de depart pour le chrono du beeper
			unsigned long previousMiliBeeper = 0;  	// Précédent top
			unsigned long startMiliBeeper = 0;  	// Top de départ pour l'attente
			unsigned long temps=180000;				// Durée d'attente
			unsigned long intervalBeeper = 5000;	// Intervale entre chaque beep (en ms)
			unsigned long durationBeeper = 500;		// Durée du beep (en ms)
			int etatBeeper = LOW;                  	// Etat du beeper
			int pinBeeper = 27;			           	// Pin pour le beeper
			int pin_number = 18;					// Pin pour fin attente
			bool wait_for_time=true;
			int pin_target;
		
		// On récupère les paramètres
			if(code_seen('I')) intervalBeeper = code_value()*1000;		// Intervale entre chaque beep (en ms)
			if(code_seen('D')) durationBeeper = code_value()*1000;		// Durée du beep (en ms)
			if(code_seen('B')) pinBeeper = code_value();      			// Pin pour le beeper
			if(code_seen('T')) temps = code_value()*1000; 				// Le temps à attendre en ms
			if(code_seen('P')) {pin_number = code_value(); wait_for_time=false;};	// La pin à attendre
		
		// On active les entrées/sorties
			pinMode(pinBeeper, OUTPUT);		// On active la sortie du beeper
			if (!wait_for_time){				// On active l'entrée si on n'est pas en temps
				pinMode(pin_number, INPUT);
				pin_target = !digitalRead(pin_number);
			}
		// On démarre l'attente
			startMiliBeeper = millis();
		
		bool stop_la_boucle=false;
        while(!stop_la_boucle){
			manage_heater();
			manage_inactivity();
			
			// on fait aller le beeper
				currentMillisBeeper = millis();
				if ((etatBeeper == LOW) && (currentMillisBeeper - previousMiliBeeper >= intervalBeeper)) {
					previousMiliBeeper = currentMillisBeeper; // On garde le moment où on a changé d'état
					etatBeeper = HIGH;                        // On change l'état du beeper
					digitalWrite(pinBeeper, etatBeeper);      // On applique le nouvel état = on fait sonner
				}
				if ((etatBeeper == HIGH) && (currentMillisBeeper - previousMiliBeeper >= durationBeeper)) {
					previousMiliBeeper = currentMillisBeeper; // On garde le moment où on a changé d'état
					etatBeeper = LOW;                         // On change l'état du beeper
					digitalWrite(pinBeeper, etatBeeper);      // On applique le nouvel état
				}
					
			// On regarde si on doit stopper la boucle
				if (!wait_for_time) {//On regarde un changement d'une entrée
					if (digitalRead(pin_number) == pin_target) { stop_la_boucle=true; }
				} else {// On regarde si la tempo est finie
					if 	(currentMillisBeeper-startMiliBeeper>=temps) { stop_la_boucle=true; }
				}
        }
		
		// Finalisation de la boucle d'attente
			digitalWrite(pinBeeper, LOW);  // pour remettre au niveau bas  (0V)  après la boucle d'attente
			pinMode(pinBeeper, INPUT);     // pour remettre en entrée qui est la valeur par défaut

        //return to normal
			if(code_seen('L')) {
			  target[E_AXIS]+= -code_value() * global_unit_modifier;
			} else {
			  #ifdef FILAMENTCHANGE_FINALRETRACT
				target[E_AXIS]+=(-1)*FILAMENTCHANGE_FINALRETRACT ;
			  #endif
			}
			current_position[E_AXIS]=target[E_AXIS]; //the long retract of L is compensated by manual filament feeding
			plan_set_e_position(current_position[E_AXIS]);
			plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); //should do nothing
			plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], target[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); //move xy back
			plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], target[E_AXIS], feedrate/60, active_extruder); //move z back
			plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], lastpos[E_AXIS], feedrate/60, active_extruder); //final untretract
    }
    break;
Lien vers le commentaire
Partager sur d’autres sites

@inteloide bon j ai mis ces lignes dans le marlin_main ccp  entre la case 600 et la case 605 fait la mise a jour du firmware ,introduit la ligne M601 X10 Y10 Z15 E-5 P18 I2 D0.8 B27 juste avant ;layer:15 . rien y fait doit je mettre cette ligne juste apres la layer 

Lien vers le commentaire
Partager sur d’autres sites

Effectivement il semble qu'il y ai un bug : le déplacement se fait sur mon imprimante, mais pas le redémarrage après appui sur l'axe X....J'y regarde

Pour le bipper, il faut le brancher sur la pin A4. J'y reviendrai, je vais déjà regarder le bug.

Lien vers le commentaire
Partager sur d’autres sites

Erreur corrigée !

Voici le fichier: Marlin_main.cpp

Voici la syntaxe que je préconise (voir en bas de ce message pour plus de détail) : M601 X20 Y20 Z5 P18

Pour le branchement du beeper, il faut le faire la pin A4, entre les broches en vert sur l'image :

NB : si pas de beeper une led de la carte MELZI va s'allumer !

56e57bab42f63_Branchementbipper.png.3505

Voici le détail de la "nouvelle" instruction :

// Syntaxe (l'ordre des lettre n'a pas d'importance):  
  //  X[pos] Y[pos] Z[relative lift] : Position parking (par défaut en absolu)
  //  R       : déplacement X et Y de la position parking en relatif (attention Z est toujours en relatif)
  //  B[pin of the beep]   : Pin du beeper (défaut = 27 => Broche A4 sur la carte électronique)
  //  E[initial retract]   : longueur de filament retiré juste avant la pause (doit être négatif !)
  //  L[later retract]   : longueur de filament (doit être négatif !)
  //   T[time to wait]   : Durée de l'attente (en secondes)
  //  P[pin input]    : Entrée sur laquelle on attent le changement d'état (par défaut 18=fin de course axe X)
  //  I[Interval beep]  : Intervale entre deux beeps (en secondes, défaut = 5 sec)
  //  D[Beep duration]   : Durée de chaque beep (en secondes, défaut = 0.5 sec)
  //  H[time in sec]   : Durée de la tempo après changement d'état sur la pin (pour retirer la main)
  //
  // Syntaxe préconisée : M601 X20 Y20 Z5 P18
  //      ="On remonte la tête de 5 mm, on la déplace dans un coin du plateau, on attend l'appui
  //       sur le capteur de l'axe X, puis on relance l'impression après 2 secondes"
  //
  // Exemples de syntaxes :
  //   Avec une tempo :
  //   M601 Z5 T300 E-5  : Remonte de 5mm, attends 300 secondes et relance l'impression
  //   M601 X10 Y10 Z5 T300 E-5  : Remonte de 5mm, va dans un coin du plateau (X=10,Y=10mm), attends 300 secondes et relance l'impression
  //
  //   Sans tempo :
  //   M601 Z5 P18 E-5: Remonte de 5mm, attend appui sur capteur axe X et relance l'impression après 2 secondes
  //   M601 X10 Y10 R Z5 P18 N5 I2 D0.8 B27 E-5: Remonte de 5mm, va dans un coin du plateau en relatif (X+10,Y+10mm), attend appui sur capteur axe X et relance après 5 secondes
  
  

Lien vers le commentaire
Partager sur d’autres sites

@inteloide : Par contre il y a t'il moyen de remettre après changement de fil les axes à l'endroit ou ils étaient ? Je bouge au moins un axe à chaque fois (X) quand je change de fil. Je ne connais pas trop encore le format de fichier je débute c'est pour ça que je te demande

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, c'est un problème.
Le problème vient du fait que les moteurs sont "désactivés" durant le changement de filament. S'il ne l'étaient pas, il serait quasi impossible de bouger les axes.
Je vais regarder pour éviter de désactiver les moteurs.

En attendant la solution de lefresh est valable mais il peut y avoir un décalage en X (car la mise en référence, fait avec le capteur mécanique, ne doit pas être super précise).
En tout cas, pour le faire, il faut donc mettre dans le fichier gcode les deux instructions suivantes, dans le même ordre :
M601 X20 Y20 Z5 P18
G28 X
 
Inteloide
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Voici une nouvelle version du fichier marlin qui maintient les moteurs activés => plus possible de bouger les axes pendants le changement de filament.

Marlin_main.cpp

L'instruction reste la même ( M601 X20 Y20 Z5 P18 ) mais plus besoin d'ajouter le  G28 X dans le fichier gcode.

Inteloide

  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Impressionnant! Fou comme ça parait facile ainsi! O_o

Merci beaucoup pour ce travail et ce partage @inteloide !

@MatC Je veux ça dans les news de la semaine si pas déjà fait! xD (aie, pas taper chef! :P )

Modifié (le) par Weiling
Lien vers le commentaire
Partager sur d’autres sites

Merci pour ce message, ça fait du bien d'aider une communauté et d'avoir des retours positifs !

Il faudrait pouvoir recompiler tout dans un nouveau post car quelqu'un qui prend le sujet en cours doit relire tout le fil...(impossible d'éditer le premier post pour le mettre à jour)

L'idéal serait de pouvoir faire une espèce de fiche qui ré-explique toute la démarche. 

Inteloide

  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai essayé de suivre mais la je suis perdu.

 

J'ai mis a jour le firmware de la Dago en intégrant dans le Marlin le dernier Marlin_main.cpp de @inteloide . Il a remplacer l'original. Est ce normal ?

J'ai créer un cube test via Cura (pas Cura by Dagoma) et généré le Gcode : dagoma0.g

J'ai mis dans le dagoma0.g le code M601 X20 Y20 Z5 P18 juste avant la ligne : layer:5 (dans mon cas de test)

A l'allumage de la dago elle s'est bloquée contre le contacteur X et j'ai du éteindre d'urgence.

J'ai remis la tête au centre de X et rallumé mais elle a fait un petit bond a droite et plus rien, elle bouge plus et l'impression ne démarre pas.

Qu'est-ce que j'ai fait de mal ou raté ?

J'avoue qu'un petit résumé de la procédure sera utile.

Lien vers le commentaire
Partager sur d’autres sites

Oula, pas normal ça....

Là je suis en train de lancer une impression de 7 heures où la pause est à la couche 51 (pour un total de 99 couches) alors j'espère que ça ne va pas planter !

J'avais fait des essais en lançant une commande dans mon plugin SketchUp et ça fonctionnait à merveille.

Aussi l'impression que je viens de lancer n'a pas plantée au démarrage, donc... étrange ton problème.

Je renvoi le fichier au cas où il y ait eu un bug à l'envoi : Marlin_main.cpp

 

Je vais effectivement faire une procédure en PDF, néanmoins ce qu'il faut faire :

- Éteindre l'imprimante

- Télécharger une version de Marlin sur le site de Dagoma (celle qui correspond à votre imprimante + capteur de l'axe Z)

- Dans le Marlin il y a plein de fichiers, il faut remplacer le fichier Marlin_main.cpp par celui de je donne.

- il faut connecter l'imprimante en usb et faire le changement des cavaliers sur la carte Melzi (voir procédure Dagoma)

- Il faut lancer le logiciel Arduino (lien sur le site de dagoma) et ouvrir le fichier Marlin.ino

- "Téléverser" le programme dans la carte Melzi avec le logiciel Arduino.

- A la fin du téléversement, débrancher le câble usb de l'imprimante

- remettre les cavaliers dans leur état d'origine

Et voilà, l'imprimante est prête.

 

Inteloide

Lien vers le commentaire
Partager sur d’autres sites

@inteloide C'est exactement ce que j'ai fait.

Et maintenant même en ayant remis le firmware de base non modifié, au démarrage quand la tête ne touche pas le contacteur X elle fait un petit coup a droite et plus rien,

et quand par exemple j'appuie avec mon doigt sur le contacteur X au démarrage la tête part a gauche et ne s'arrête plus sauf si j'enlève mon doigt du contacteur.

J'espère ne pas avoir flingué la carte !

Modifié (le) par Picaboubx
Lien vers le commentaire
Partager sur d’autres sites

Il semble que tout soit inversé.

En plus de histoire du contacteur X qui stop la tête quand il est relâché, 

Je viens de tester l'impression via l'usb.

au démarrage la tête fait un petit coup a droite, s'arrête (donc pas contre le contacteur comme d'hab), chauffe, puis a la température descend pendant que le plateau part vers l'ARRIERE au lieu de l'avant d'habitude.

Résultat le Palpeur ne trouve pas le plateau et boum.

Donc il y a un vrai problème avec ma carte suite a la mise a jour avec la version proposée. ET le firmware de base n'a pas résolu le pb.

J'ai les boules :-(

Modifié (le) par Picaboubx
Lien vers le commentaire
Partager sur d’autres sites

il y a 2 minutes, Picaboubx a dit :

qu'elle est mon erreur ?

ne pas avoir suivi les conseil que tu donnes sur ton site :

( AVERTISSEMENT : NE LE FAITE PAS SI VOUS NE SAVEZ PAS CE QUE VOUS FAITE ! )

Lien vers le commentaire
Partager sur d’autres sites

à l’instant, plexy a dit :

ne pas avoir suivi les conseil que tu donnes sur ton site :

( AVERTISSEMENT : NE LE FAITE PAS SI VOUS NE SAVEZ PAS CE QUE VOUS FAITE ! )

merci c'est constructif. Et j'ai suivi les infos données à priori

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
  • Sur cette page :   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
  • YouTube / Les Imprimantes 3D .fr

×
×
  • Créer...