Aller au contenu

GO Print

Impression en 2 couleurs ou plus !


inteloide

Messages recommandés

Dans marlin est prévu un Gcode pour le changement de filament :

M600 : http://reprap.org/wiki/G-code/fr#M600:_Filament_change_pause

 

ça n’empêche pas la modif concernant l'appuie sur le bouton du LCD mais ça évite de retaper la macro G-Code a chaque fois ;)

 

Sans LCD il y a ça aussi pour le cablage d'un bouton externe sur une ramps pour la melzi je ne sais pas faut voir ce qui est dispo en pinout:

http://forums.reprap.org/read.php?146,179790,179794#msg-179794

Modifié (le) par rafffel
  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

On était justement en train de bouger sur un nouveau thread plus adapté, si tu sais lire...

Que devrais-je dire de mon thread sur le portique pas droit...

Si je sais lire ?? Pas besoin de lire quoique que ce soit pour savoir que vous auriez du ouvrir un autre thread avant.

Bâ oui voilà :/ c'est pour ça. Beaucoup de hors sujet dans tous les posts récemment, du coup ils perdent de leur intérêts et on se perd aussi. Aucunes prise de tête, mais a force.. :)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, rafffel a dit :

Dans marlin est prévu un Gcode pour le changement de filament :

M600 : http://reprap.org/wiki/G-code/fr#M600:_Filament_change_pause

 

ça n’empêche pas la modif concernant l'appuie sur le bouton du LCD mais ça évite de retaper la macro G-Code a chaque fois ;)

 

Sans LCD il y a ça aussi pour le cablage d'un bouton externe sur une ramps pour la melzi je ne sais pas faut voir ce qui est dispo en pinout:

http://forums.reprap.org/read.php?146,179790,179794#msg-179794

Effectivement le code M600 fait le boulot (M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal])

La ligne "M600 Z-15 E-5" devrait faire le boulot, reste le problème du bouton.

Peut être que le mieux serait de créer une nouvelle instruction qui contient tout en un seul code. Genre : M601

M601 X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] T[break in seconds] P[pin to wait for] D[Beep duration] I[Beep interval]

Et on pourrait alors utiliser :

M601 X10 Y10 Z15 E-5 T180 D1 I5 (Fait une pause de 180 seconds et beep 1 seconde toutes le 5 secondes)

OU

M601 X10 Y10 Z15 E-5 P18 D1 I5 (Fait une pause jusqu'au changement d'état de l'entrée 18 et beep 1 seconde toutes le 5 secondes)

Il faut tout de même l'insérer dans le G-Code (Car Cura by Dagoma ne le fait pas !)

 

 

Lien vers le commentaire
Partager sur d’autres sites

L'idéal serait de proposé la modif sur le M600 via un git pull dans le marlin en dev (car c'est une fonctionnalité qui pourrait s’avère utile pour d'autre personne).

Mais après oui c'est envisageable le M601 est libre donc free yourself =)

Lien vers le commentaire
Partager sur d’autres sites

Visiblement le M600 est spécifique au LCD. Peut être qu'un jour la Disco en aura un part défaut...Donc vaut mieux pas trop y toucher. Et puis le temps que ça soit validé via un git.

Pour l'instant, je voterai plus pour un M601.

Je vais programmer ça et je partage (bon, après les fêtes, hein !)

Après le mieux serait que Dagoma remette les plugins dans sa version simplifiée : comme ça on pourrait le faire directement depuis le logiciel ! (et là plus besoin de modifier le firmware). Je vais essayer de voir ça avec eux.

NB : pour faire la pause, c'est vrai que changer le X et Y c'est mieux, sinon le filament coule sur la pièce en cours d'impression.

 

Lien vers le commentaire
Partager sur d’autres sites

Je suis pas d'accord sur le fond.

Le gcode pour moi est la pour ordonnée des action et non effectué une "macro" surtout que c'est une fonctionnalité qui peut être utile a d'autre (j'entend hors utilisateur dagoma)

Mais bon je plussoie qu'un pull sur le github risque de prendre du temps.

Rien ne t’empêche de faire un fork et de partager le firmware comme la fait richcattell pour le firmware delta.

Mais bon c'est déjà sympa de ta part de faire partagé ;)

 

Lien vers le commentaire
Partager sur d’autres sites

Bon, on va déjà faire en sorte que ça marche ;o)

Voici le code d'une nouvelle instruction M601, qui permet de choisir entre une pause en temps et une pause jusqu'à un changement d'état d'une d'entrée.

Je ne l'ai pas encore testé en conditions réelle, mais à vide, ça semble ok.

J'ai mis tous les temps en secondes pour plus de clarté.

 

    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;

 

Modifié (le) par inteloide
Correction du code
  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Je viens de mettre une petite correction.

Attention les déplacement sont tous en relatifs et le Z doit être positif, sinon boum ! (Il faudrait que je verrouille ça)

Manque aussi la tempo entre l'appui sur le capteur et le redémarrage de l'imprimante.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

Salut !

La prochaine version du plugin permettra d'imprimer depuis SketchUp mais pas encore de générer le fichier gcode => il faut encore passer par Cura.

On pourra aussi suivre l'impression sur Internet (sans besoin d'un raspberry)

@Gauthier : tu as utilisé mon plugin pour faire ton objet ?

Lien vers le commentaire
Partager sur d’autres sites

@gauthier.dagoma 

J'en profite pour te poser deux questions sur les modifications de firmware vu que je compte me mettre à l'impression 2 couleurs:

1- Je peux prendre le firmware fourni ici ou j'ai intérêt à prendre une autre version?

http://www.dagoma.fr/tutoriels/mise-a-jour-de-la-carte-electronique/

 

2 - Sur cette page, on peut lire: 

Citation

Mise à jour de la carte électroniqueATTENTION Si vous effectuer cette manipulation sans notre aval, sachez que nous ne pourrons pas assurer de SAV suite à une mauvaise manipulation ou erreur de votre part. – l’équipe dagoma.fr

Je sais que le sujet à été largement débattu mais je n'ai pas vu de post ou une réponse avait été donnée:

Est-ce que cela signifie simplement que vous vous défaussez de tout garantie à partir du moment où on touche au firmware ou simplement que vous ne nous apporterez pas d'aide poussée si on a des soucis avec des customs de firmware?

 

Lien vers le commentaire
Partager sur d’autres sites

Salut @lefresh

Je te conseille d'aller vers une autre version - une des dernières version du marlin poru ce que tu veux faire.

Pour la question de la garantie, la position officielle de dagoma est celle que tu as cite.
Apres on n'est pas non plus complètement idiots et si on peut aider les gens qui essayent de faire grandir la machine on le fait.
Si vous cherchez a savoir si la carte supporte le 220 en direct, la on couvre pas.
Si vous flashez n'importe quoi et que ca brule les drivers parce que vous vouliez voir comment faire un chauffe tasse USB, la aussi on vous laisse un peu seul avec votre demarche.
Mais si c'est pour tenter de mettre deux cartes en cascade pour installer une diamond alors oui on accompagne.

Apres dagoma c'est pas une multinationale avec un gros bouquin qui dit tout comment preparer un burger, installer les chaises, dire bonjour au client, etc. C'est une boite pleine de gens qui sont plutot malins, generalement ouverts et qui ont envie d'aider.
demande a @monchyv62 ce qu'il en pense ;)

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

oui je peux confirmer les gens sont plutot malins et sympa, ouvert à la discution et franchement pas avare sur la visite des locaux et pour montrer les projets

je peux meme dire que le jour ou je susi venu ils acceuillaient une ecole pour leur montrer les machines

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, loukatamiaou a dit :

message adresser a inteloide . j ai installer ta mise a jour du firmware marlin ccp . j aimerai tester ton m601 mais que doije faire avec tout ce codage et ou son les valeur a changer ?

 

Bonjour Loukatamiaou,

Le code M601 doit être insérer dans le fichier dagoma0.g à l'endroit où on veut faire la pause.

J'ai fait un plugin SketchUp pour faciliter cette manipulation. Voir le topic ici :

Je pourrais regarder pour faire un petit exécutable qui permettrai de ne pas avoir à installer SketchUp)

 

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

Bonjour, @loukatamiaou

Si tu veux t'adresser à qqn en particulier, met un @ devant son nom, il recevra une notification.

 

Le plugin est à installer directement dans sketchup (logiciel de conception d'objet), rien à voir avec cura (logiciel qui "découpe" l'objet en couche pour générer dagoma0.g, le fichier lisible par ton imprimante.

 

Pour utiliser la commande M601, tu dois mettre à jour ton imprimante puis insérer le code dans ton Gcode:

Maj de l'imprimante:

Télécharger la bonne version du firmware.

Positionner le code fourni par @inteloide au bon endroit.
Envoyer le firmware modifié 

 

Insertion du M601 dans le Gcode (à la main sans plugin):

Avec cura, en mode couche, tu identifie le numéro de la couche qui doit changer de couleur.

tu édite le Gcode (avec notepad).

Tu trouve la ligne LAYER:<Numéro de ta couche>

Juste avant  ou après cette ligne, tu ajoute le code M601 en fonction de ton besoin (les 2 exemples de inteloide sont:

1

M601 X10 Y10 Z15 E-5 T300

explication: Remonte de 15mm, va dans un coin du plateau, attends 300 secondes

2
M601 X10 Y10 Z15 E-5 P18 I2 D0.8 B27

explication: Remonte de 15mm, va dans un coin du plateau, attends appui sur capteur axe X

 

Voila, bon courage et tien nous informés.

Lien vers le commentaire
Partager sur d’autres sites

@lefresh le plugin que j ai installer sur cura c est pour nommer la couche à laquelle on veut faire une pause c est un plugin qui date de un poste du début de ce sujet. Au sujet du poste de @inteloide j ai bien compris que le plugin qu il a mis est pour sketchup .j utilise sketchup depuis longtemps j ai fait tout les plan du permis de construire de ma maison avec mais pour les stl telecharger j aime pas y a trop de trait je préfère passer avec tinkercad.bref . Le pâté de ligne de code doit ce mettre ou dans le firmware ?

Lien vers le commentaire
Partager sur d’autres sites

@loukatamiaou 

Si tu parle du code fourni en page 2 et qui commence par 

 case 601:      // Pause for filament change (New code by Inteloide)

dans ce cas, tu va dans le fichier marlin_main.cpp et vers la ligne 2500 tu va trouver le case 605 (vive notepad++)

Tu met le code  juste avant.

 

 

 

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...