Zarrt Posté(e) Janvier 7, 2017 Posté(e) Janvier 7, 2017 (modifié) Bonjour, Petite amélioration pour pouvoir installer un détecteur de fin de filament. La fonction étant déjà implémentée dans le firmware je pensais que ce ne serait qu’une simple formalité ... mais loin de là la fonction M600 modifiée par Dagoma ne fonctionnant pas franchement. Après quelques déboire et quelques recherche sur le net cela fonctionne à peu près, je dis à peu près car cela est certainement améliorable mais n’étant pas un as du développement je n’ai pas pu aller plus loin. Donc passons au vif du sujet les modifs ... D’abord j’ai modifié le pin.h pour pouvoir utiliser le EndStop –Z pour y connecter le détecteur de fin de filament. Fichier pin.h Ajout à la fin #undef FILRUNOUT_PIN #define FILRUNOUT_PIN 18 Dans Configuratiuon.h Vers ligne 512 Decommenter la ligne #define FILAMENT_RUNOUT_SENSOR pour activer la fonction FilamentRunOutSensor Puis application de valeurs fixe pour fonction M600 #define FILAMENT_RUNOUT_SCRIPT "M600 X10 Y10 Z30 E-4 L0" Enfin le plus gros morceau : Le fichier Marlin_main.cpp L’ajout de code par Dagoma ne fonctionnant pas j’ai repris la partie du code Original de la RC6 et l’ai légèrement modifié. Ci-dessous le code complet à mettre à la place du code existant vers la ligne 6280 #if ENABLED(FILAMENTCHANGEENABLE) /** * M600: Pause for filament change * * E[distance] - Retract the filament this far (negative value) * Z[distance] - Move the Z axis by this distance * X[position] - Move to this X position, with Y * Y[position] - Move to this Y position, with X * L[distance] - Retract distance for removal (manual reload) * * Default values are used for omitted arguments. * */ inline void gcode_M600() { if (degHotend(active_extruder) < extrude_min_temp) { SERIAL_ERROR_START; SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600); return; } float lastpos[NUM_AXIS], fr60 = feedrate / 60; for (int i = 0; i < NUM_AXIS; i++) lastpos = destination = current_position; #if ENABLED(DELTA) #define RUNPLAN calculate_delta(destination); \ plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder); #else #define RUNPLAN line_to_destination(); #endif //retract by E if (code_seen('E')) destination[E_AXIS] += code_value(); #ifdef FILAMENTCHANGE_FIRSTRETRACT else destination[E_AXIS] += FILAMENTCHANGE_FIRSTRETRACT; #endif RUNPLAN; //lift Z if (code_seen('Z')) destination[Z_AXIS] += code_value(); #ifdef FILAMENTCHANGE_ZADD else destination[Z_AXIS] += FILAMENTCHANGE_ZADD; #endif RUNPLAN; //move xy if (code_seen('X')) destination[X_AXIS] = code_value(); #ifdef FILAMENTCHANGE_XPOS else destination[X_AXIS] = FILAMENTCHANGE_XPOS; #endif if (code_seen('Y')) destination[Y_AXIS] = code_value(); #ifdef FILAMENTCHANGE_YPOS else destination[Y_AXIS] = FILAMENTCHANGE_YPOS; #endif RUNPLAN; if (code_seen('L')) destination[E_AXIS] += code_value(); #ifdef FILAMENTCHANGE_FINALRETRACT else destination[E_AXIS] += FILAMENTCHANGE_FINALRETRACT; #endif RUNPLAN; //finish moves st_synchronize(); // suppression de la désactivation des moteurs extrudeur //disable extruder steppers so filament can be removed //disable_e0(); //disable_e1(); //disable_e2(); //disable_e3(); delay(100); LCD_ALERTMESSAGEPGM(MSG_FILAMENTCHANGE); millis_t next_tick = 0; KEEPALIVE_STATE(PAUSED_FOR_USER); while (!lcd_clicked()) { #if DISABLED(AUTO_FILAMENT_CHANGE) millis_t ms = millis(); if (ms >= next_tick) { //lcd_quick_feedback(); next_tick = ms + 2500; // feedback every 2.5s while waiting // ajout buzzer buzz(1000,500); buzz(600,300); //fin ajout buzzer } idle(true); #else current_position[E_AXIS] += AUTO_FILAMENT_CHANGE_LENGTH; destination[E_AXIS] = current_position[E_AXIS]; line_to_destination(AUTO_FILAMENT_CHANGE_FEEDRATE); st_synchronize(); #endif } // while(!lcd_clicked) KEEPALIVE_STATE(IN_HANDLER); //lcd_quick_feedback(); // click sound feedback #if ENABLED(AUTO_FILAMENT_CHANGE) current_position[E_AXIS] = 0; st_synchronize(); #endif //return to normal if (code_seen('L')) destination[E_AXIS] -= code_value(); #ifdef FILAMENTCHANGE_FINALRETRACT else destination[E_AXIS] -= FILAMENTCHANGE_FINALRETRACT; #endif current_position[E_AXIS] = destination[E_AXIS]; //the long retract of L is compensated by manual filament feeding plan_set_e_position(current_position[E_AXIS]); RUNPLAN; //should do nothing lcd_reset_alert_level(); #if ENABLED(DELTA) // Move XYZ to starting position, then E calculate_delta(lastpos); plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder); plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder); #else // Move XY to starting position, then Z, then E destination[X_AXIS] = lastpos[X_AXIS]; destination[Y_AXIS] = lastpos[Y_AXIS]; line_to_destination(); destination[Z_AXIS] = lastpos[Z_AXIS]; line_to_destination(); destination[E_AXIS] = lastpos[E_AXIS]; line_to_destination(); #endif #if ENABLED(FILAMENT_RUNOUT_SENSOR) //filrunoutEnqueued = false; filament_ran_out = false; LCD_ALERTMESSAGEPGM(MSG_LCD_OK); #endif } #endif // FILAMENTCHANGEENABLE Sauvegarder puis flasher la MKS Lorsque le détecteur s’ouvre en l’absence de filament la tête remonte et viens se placer en X10,Y10 un signal sonore retenti et attend le changement de filament lorsque que cela est effectué un appuie sur le bouton de l’écran permet le reprendre l’impression. Effet secondaire de ces modifications l’option changement de filament de l’écran de la Dogoma fonctionne à peu près correctement. Voila ... si vous avez des idées de modification n’hésitez pas. Bon Weekend Modifié (le) Janvier 7, 2017 par Zarrt 1
Desloo Posté(e) Janvier 8, 2017 Posté(e) Janvier 8, 2017 Merci pour le taf. Ca m'a pas l'air simple quand meme !
gilly Posté(e) Janvier 14, 2017 Posté(e) Janvier 14, 2017 Super boulot, je vais essayer de mettre le nez dedans Du coup il faut brancher un petit interrupteur sur la broche "buté fin de course" mais lequel ?
gilly Posté(e) Janvier 14, 2017 Posté(e) Janvier 14, 2017 A priori (je n'ai pas le code sous les yeux) mais lors d'une impression par USB, il y aurai une modification à faire dans configuration.h pour le code fonctionne : Remplacer : #if HAS_FILRUNOUT if (IS_SD_PRINTING && !(READ(FILRUNOUT_PIN) ^ FIL_RUNOUT_INVERTING)) filrunout(); #endif Par : #if HAS_FILRUNOUT// if (IS_SD_PRINTING && !(READ(FILRUNOUT_PIN) ^ FIL_RUNOUT_INVERTING)) if (!(READ(FILRUNOUT_PIN) ^ FIL_RUNOUT_INVERTING)) filrunout(); #endif 1
gilly Posté(e) Janvier 15, 2017 Posté(e) Janvier 15, 2017 Si ca t'intéresse j'ai travailler sur le switch qui servira de détecteur. La pièce viendra juste à côté de l'extrudeur 1
Riako Posté(e) Janvier 16, 2017 Posté(e) Janvier 16, 2017 (modifié) Bien cool ta mod et ton idée ! J'avais vu certain laisse passer le câble au travers d'un capteur capteur fin de course optique, vu ici >>> Et donc aucun frottement sur le filament (bien qu'il n'y en ai quasi pas avec un petit switch ) et que ça ne le gène en rien après l'extrudeur. Modifié (le) Janvier 16, 2017 par Riako
gilly Posté(e) Janvier 16, 2017 Posté(e) Janvier 16, 2017 Le switch a pour avantage de ne pas craindre la poussière. Tu as mis ce style de capteur ?
Riako Posté(e) Janvier 16, 2017 Posté(e) Janvier 16, 2017 Oki, merci pour l'info ! Non pour le moment je suis entre le démontage de ma D200 pour l'upgrade E200 et je n'avais encore rien, donc je suis de près.
gilly Posté(e) Janvier 17, 2017 Posté(e) Janvier 17, 2017 Et voila, ca fonctionne Juste une petite modification pour la declaration du PIN à utiliser, tout est expliquer sur mon thingiverse : Détecteur de fin de filament Merci à Zarrt pour son code.
R3ptor Posté(e) Juin 6, 2017 Posté(e) Juin 6, 2017 Je n'ai pas trouver la réponse malgré mes rechercheS, ou brancher le capteur de fin de filament sur la MKS ?
cams08 Posté(e) Juin 7, 2017 Posté(e) Juin 7, 2017 sur une discoeasy il se branche sur le Z- le pin 18
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant