Détection de fin de fil ou de blocage

Les améliorations de vos imprimantes
Avatar de l’utilisateur
Jacques
Site Admin
Messages : 5616
Inscription : jeu. oct. 23, 2014 3:02 pm
Imprimante 3D : Witbox, Witbox 2 et Hephestos
Localisation : Aix en Provence
Contact :

il y a un sujet ici http://tunell.us/
Le PDF en bas de page contient le code à ajouter pour Marlin
Le système est plus complexe car il mesure le passage du filament, sa coupure ou son blocage.

Sans aller jusque là, on peut à moindre frais ne détecter que le manque de fil et peut être aussi son blocage par une tension trop forte
Une vidéo du fonctionnement ici http://vimeo.com/109085970

Cette réalisation est intéressante car le blocage de fil est un problème souvent rencontré (problème d'épaisseur)

Si quelqu'un a un peu de temps, ca ne semble pas très compliqué à réaliser. Pour ma part il ne manque que de trouver dans le code la définition de Aux-2 D44
C'est ce signal qui servira à envoyer la commande M600 pour intervention ou changement du fil
Il faudrait essayer simplement en mettant le code et en mettant D44 à la masse et observer la réaction de l'imprimante
Des idées d'améliorations https://www.thingiverse.com/Premium/designs
Une question, une précision, un manque de pièces détachées, posez vos questions ici même.
Avatar de l’utilisateur
Jacques
Site Admin
Messages : 5616
Inscription : jeu. oct. 23, 2014 3:02 pm
Imprimante 3D : Witbox, Witbox 2 et Hephestos
Localisation : Aix en Provence
Contact :

Ici se trouve le PDF décrivant les modifications
Marlin Filament Monitoring 201014 %281%29.pdf
(311.98 Kio) Téléchargé 546 fois
le code à ajouter dans Marlin_main.cpp (version 1.3.1)
Valable pour la Witbox et l'Hephestos

Juste avant void loop
// Filament monitor mod
boolean FC_Flag = false; // initialise flag to enque M600 command once per alarm
et à la fin de void loop mais avant la dernière parenthèse.
// filament monitor mod - Ziggy 14/10/2014
//
// note FC_Flag variable must be global
//
if (digitalRead(44) == LOW) { // check filament monitor alarm pin
  if (FC_Flag == false) { // not already triggered ?
    enquecommand_P(PSTR("M600")); // trigger a filament change
    FC_Flag = true; //
  }
else FC_Flag = false; // reset for next alarm
// --------------
Au final ca donnera ca :
  #ifdef DIGIPOT_I2C
    digipot_i2c_init();
  #endif
}
// Filament monitor mod
boolean FC_Flag = false; // initialise flag to enque M600 command once per alarm

void loop()
{
if (stop_buffer == false) {
    if (buflen < (BUFSIZE-1)) {
      get_command();
    }
else {
      switch (stop_buffer_code) {
      case 1:
        enquecommand_P(PSTR("M25"));
        break;
      case 2:
        enquecommand_P(PSTR("M600"));
        break;
      default:
        break;
      }
      stop_buffer_code = 0;
}

#ifdef SDSUPPORT
card.checkautostart(false);
#endif // SDSUPPORT

if(buflen) {

#ifdef SDSUPPORT
if(card.saving) {
if(strstr_P(cmdbuffer[bufindr], PSTR("M29")) == NULL) {
card.write_command(cmdbuffer[bufindr]);
if(card.logging) {
process_commands();
else {
SERIAL_PROTOCOLLNPGM(MSG_OK);
}
      } else {
card.closefile();
SERIAL_PROTOCOLLNPGM(MSG_FILE_SAVED);
      }
else {
process_commands();
}
#else
process_commands();
#endif //SDSUPPORT

buflen = (buflen-1);
bufindr = (bufindr + 1) % BUFSIZE;
}

// --------------
// filament monitor mod - Ziggy 14/10/2014
//
// note FC_Flag variable must be global
//
if (digitalRead(44) == LOW) { // check filament monitor alarm pin
  if (FC_Flag == false) { // not already triggered ?
    enquecommand_P(PSTR("M600")); // trigger a filament change
    FC_Flag = true; //
  }
else FC_Flag = false; // reset for next alarm
// --------------

                          //check heater every n milliseconds
manage_heater();
manage_inactivity();
Hardware :
Le switch de détection se branchera sur la carte RAMPS connecteur AUX 2 sur la broche GND et D44
Le switch devra rester fermé quand il y a du fil et ouvert en cas de manque de fil.
FC switch.JPG
Fonctionnement :
En cas de manque de fil, l'imprimante lancera la routine M600.
La tête se déplace en X10 et Y10 et affiche "Press et unload Fil"
Appuyez sur le sélecteur et enlever le fil puis réappuyez sur le sélecteur
Au message "Load new filament", insérer le nouveau fil, il va rentrer tout seul et il faut l’arrêter en ré-appuyant sur le sélecteur. Attention à ne pas le laisser forcer trop le moteur car il pousse très fort :twisted:
L'impression reprendra alors à l'endroit ou elle en était.

Reste plus qu'a dessiner le détecteur qui pourra détecter le manque de fil ainsi qu'un blocage mécanique de la bobine.
Il y en a un ici http://www.thingiverse.com/thing:83274 mais bof

Bon, ce que je reproche à ce système c'est la procédure de changement du fil qu'il faut savoir utiliser.
Il n'y a plus le buzzer pour annoncer le changement et il faut faire attention de ne pas déplacer la tête en changeant le fil. On n'a qu'une minute pour le faire avant que le moteur X se relache...
Ensuite en cas de blocage du fil, il faudra enlever le fil et le remettre.
Peut être faut-il remplacer le M600 par une autre qui ne ferait que déplacer la tête en 0-0 et mettre en pause l'imprimante.
En fait la procédure M600 est à finaliser mais elle fonctionne
Des idées d'améliorations https://www.thingiverse.com/Premium/designs
Une question, une précision, un manque de pièces détachées, posez vos questions ici même.
bryceletarmo
Contributeur
Messages : 93
Inscription : lun. janv. 12, 2015 3:14 pm
Imprimante 3D : Prusa I3 Hephestos

je n'ai pas pu mettre le nez dans l'arduino donc je ne sais pas si c'est possible, mais je crois qu'il faudrait :

Sur Hephestos :

- prevoir/deplacer le 0,0 du X,Y à l’arrière. ce qui permet d'aller le chercher sans que le portique vienne toucher la piece en cours.
- avant un changement de fil ou lorsque l'absence de fil apparaît, enregistrer la ligne de code ou les coordonnées ou la balise pour pouvoir y retourner + tard.
- faire le changement de fil sans se prendre la tete
- refaire un 0,0,0
- reprendre l'impression où elle en était.

je sais pas si refaire le 0,0,0 va gnerer un artefact à la reprise... quel est le taux de reproductibilité de la chose...

chuis nul en prog...

A++

Brice
Avatar de l’utilisateur
Jacques
Site Admin
Messages : 5616
Inscription : jeu. oct. 23, 2014 3:02 pm
Imprimante 3D : Witbox, Witbox 2 et Hephestos
Localisation : Aix en Provence
Contact :

On pourrait refaire un 0 XY mais pas Z car on risquerait de toucher la pièce en fabrication avec le corps de la buse.
De toutes les facons il n'y a que le risque de bouger le Y, moins le X et encore mois le Z.
Sauf problème de buse il n'y a pas de raison de bouger la tête au changement du fil et ca se passe généralement bien.
Maintenant, si on refaisait le O XY il y aurait le risque d'obtenir un très très léger décalage mais visible à la reprise.
C'est un choix qui a été pris de ne pas le faire, mais rien ne nous empêche de modifier la M600.
Des idées d'améliorations https://www.thingiverse.com/Premium/designs
Une question, une précision, un manque de pièces détachées, posez vos questions ici même.
Répondre