-
Compteur de contenus
79 -
Inscrit(e) le
-
Dernière visite
Tout ce qui a été posté par inteloide
-
Essaye d'utiliser directement la variable X_STOP_PIN au lieu de mettre un chiffre. C'est ce que j'utilise dans mon firmware pour la D200 avec écran Discoled. En regarde dans le firmware de la DiscoEasy avec écran, il semble que X_STOP_PIN existe aussi.
-
Bonjour à tous ! Je m'étais écarté un peu de mon imprimante ces derniers temps. J'y reviens tout doucement. Je vois que le sujet avance bien et que certains font de belles réalisations. Tant mieux ! En attendant de me replonger dans le code, une petite aide pour giloumv : le numéro de pin pour le fin de course en X doit être 18 sur une D200. Je vais reprendre mon travail sur le détecteur de fin de filament via une modif du firmware qui permet de faire aussi la pause programmée dans le gcode. Dès que ça avance, je partage! @+ Inteloide
-
Salut à tous, Pour ceux qui suivent mes posts, ils savent que j'étais en train de proposer une box qui fait la même chose. Certes, je n'ai pas beaucoup avancé mais je pense avoir eu l'idée en premier...ou pas loin. Alors je contre-attaque : je lance une "pas_box" ! C'est une box qu'on n'a pas besoin d'acheter ! Revanche pour ceux qui ont acheté une disco dans sa première version : ma pas_box n'utilise qu'un capteur fin de course que vous avez dû sûrement démonter pour le remplacer par un inductif. Ça vous intéresse ? Allez en pièce jointe la notice d'installation... Le firmware arrive bientôt Inteloide Inventeur de la "pas_box" Procédure installation fin filament.pdf
-
Juste une petit question : tu veux faire une pause n'importe quand (au moment où tu l'auras décidé) ou en un point bien précis prévu à l'avance (à la 20ième couche par exemple) ? La différence est énorme : Dans le premier cas, aucune instruction ou plugin Cura pourra le gérer car il faut que l'imprimante regarde en permanence l'état de l'entrée de ton capteur. Dans le deuxième cas, effectivement le plugin Cura peut faire le job (moyennant une petite modif)
-
Oui il existe des entrées sur la carte Melzi. L'avantage du fin de course c'est qu'on a pas besoin d'acheter un capteur ;o) Sur la box de détection de fin de filament que je développe, le met un capteur en parallèle d'un des capteurs fin de courses. L'avantage c'est que je n'utilise pas d'entrée sortie supplémentaire et donc je suis entièrement compatible avec les autres box (genre pour l'ajout d'un d'écran).
-
Salut ! Pas de problème pour intégrer la gestion de la ventilation. Si tu sais programmer, envoi moi le code modifié et on compilera nos deux codes. Pour la programmation, il faut que l'on rajoute une option (genre "F" pour "Fan") si l'option existe, à la fin de la mise en bonne température via l'option "S" (="S0" en l'occurence) on programme l'arrêt de la ventilation ("fanSpeed = 0;" dans le code de la version avec écran). Si tu as un peu de temps, programme le en utilisant mon code, sinon, je le ferai. Inteloide
-
...Bon revenons à nos moutons et laissons un peu les discussions autour du forum à part. @stereoxfr : merci pour l'astuce pour ta box. Je suis en train de finaliser la box pour la détection du filament. Je verrais avec Dagoma pour la gestion des différentes combinaisons du firmware avec les box. PS : je suis en vacances, sans ma discovery...sniff. Alors forcément je n'avance plus trop sur le sujet.
-
@r2d2 Dans tous les cas, 5-6 secondes ce n'est pas la mort : seulement qq millimètre de filament seront consommé, ce qui devrait permettre d'arrêter l'impression à tend en cas de fin de bobine. Par contre, si on veut appuyer pour faire le changement de couleur à un endroit bien précis...bah là c'est raté (en même temps, ça demanderai un timing de malade, digne de Griezmann ;o) )
-
Essaye de remplacer toutes les instances de "global_unit_modifier" par le chiffre "1", ça devrait fonctionner. Chez moi ça compile sans erreur. Dans la version avec l'écran, le "global_unit_modifier" n'existe pas, je l'ai remplacé avec succès par un 1 => ça devrait donc fonctionner. Allez, hop, retour au match !
-
je suis sur le coup, pendant la mi-temps ;o)
-
Bonsoir, Voici une version qui fonctionne avec l'écran BoxOled. Installation : Vous connaissez maintenant la procédure (voir sinon dans mes précédents posts) mais j'insiste que cette version du firmware et pour celle avec l'écran BoxOled. Fonctionnement : 1- durant l'impression, appuyer, en donnant une impulsion d'une demi seconde environ, sur le capteur à lame de l'axe X. 2- L'imprimante fait une pause (comme une commande M601 X20 Y20 Z5 P18) 3- pour reprendre l'impression, il faut appuyer de nouveau sur le même capteur. Pour ma part j'ai entre 6 et 7 secondes d'attente entre l'appui et la pause effective. Je joins aussi un modèle qui va vous permettre de tester facilement le programme (c'est un fichier dagoma0.g à mettre sur la carte SD) qui fait la mise en référence des axes et fait juste des mouvements d'avance et recule pendant lesquels vous pouvez faire votre pause (pas de chauffe, pas de ventilateur). Vous noterez aussi une petit tempo entre la mise en références des axes X et Y et celle de l'axe Z. C'est du au fait que je vérifie l'état du capteur X quand la buse est à plus de 10mm du bord et j'ai besoin de stabiliser l'état de l'entrée (probablement pour le même problème que la latence pour la pause). Ceci permet de s’affranchir de savoir si le capteur de l'axe X et normalement ouvert ou normalement fermé. Je pense que c'est optimisable. Pour la box, je regarde pour finaliser la pièce qui va à l'entrée de l'extrudeur, je vérifie le code pin de la broche A3, je teste le tout et je diffuse. La box ne devrait contenir qu'un capteur fin de course type celui de l'axe X, du câble et de la visserie qui va avec. PS : je ferai bien sûr la version firmware sans écran et autres versions à la demande. Merci de votre retour. Inteloide dagoma0.g Marlin_main.cpp
-
Idem : temps écoulé. Pour le freeze je l'avais même avant le disable_z...Peut être à cause des vibrations ? !
-
Le firmware a de gros problème. Généralement l'écran se freeze après qqn minutes d'utilisation (on voit le symbole du ventilateur qui ne tourner plus). Pour ma part en changeant le DISABLE_Z, c'est encore pire, je ne vois même plus la montée en température jusqu'au bout... Je suis un peu déçu...
-
Salut ! Même soucis pour moi ! J'ai eu 2 fois le bug ce matin (Heating Fail) puis plus rien, sans avoir changer le firmware entre temps.
-
La programmation est en cours. J'ai modifié le firmware de la version avec écran BoxOled pour que l'impression face une pause quand on appuie sur le capteur de l'axe X. Je rencontre juste un problème : il y a une certaine latence (5 à 10 secondes) entre l'impression et l'arrêt effectif de l'imprimante (sûrement liée à un temps de scrutation des entrées sur la carte électronique, un petit paramètre bien caché dans un coin...) En parallèle, je vais proposer une box, pour faire un petit module qui viendra s'ajouter à l'entrée du bloc extruder. Il contiendra un capteur qui détectera la fin du filament et coupera l'impression (fera une pause) automatiquement. Voici une photo en avant première. Encore deux trois points de conception à finaliser, un peu de programmation à corriger, quelques essais, et ça devrait le faire. PS : pour ceux qui comme moi avait une imprimante avec 2 capteurs pour la mise en référence en Z : gardez les bien au chaud ;o) @ bientôt !
-
Excellent idée les gars ! J'ai déjà une piste pour le programmer. Je vous tiens au jus !
-
Réponse donnée à l'instant : plus vite de que La Redoute !
-
Envoi mon ton firmware, je te le modifirai directement !
-
Bonjour, Si tu veux faire une simple pause en l'ajoutant dans le fichier GCODE (c'est à dire que l'imprimante fera la pause quand elle atteindra cette instruction, et non quand tu appuieras à n'importe quel moment durant l'impression, alors tu peux ajouter l'instruction suivante : M601 P18 L'imprimante ne bougera pas jusqu'à l'appui sur le capteur de l'axe X. Maintenant, si tu veux que l'imprime à n'importe quel moment (avec le risque de s'arrêter si pendant l'impression elle s'approche trop près du bord et déclenche le capteur), alors c'est une autre paire de manche. Si tel est ton besoin, je peux y regarder.
-
Salut à tous ! A mon tour de me lancer dans la fabrication d'un caisson. Voici le mien pour l'instant : C'est un caisson réaliser en MDF épaisseur 10mm. Les plaques de plexi font 2,5 mm d'épaisseur (le tout trouvé à Brico dépôt = pas cher) J'ai fait l'arrière incliné sur le dessus car mon bureau est dans une pièce sous pente (45°) : je gagne de la place. J'ai pour l'instant laisser les films de protection sur les plexis. La porte est maintenue par des charnière non-imprimée (j'ai + confiance et vu le prix d'une charnière...) La porte est maintenue étanche par des joints sur le pourtour. Le dessus s'ouvre aussi...reste à en trouver l'intérêt, en fait ;o) Dans le bas du caisson un revêtement anti vibration, qui alourdi très fortement le caisson mais qui réduit drastiquement les vibrations et le phénomène de résonance. Pour le dévidoir, j'ai réalisé une pièce à imprimer (une simple tige) J'ai aussi réalisé un petit trou sur le panneau latéral pour pouvoir passer un fil depuis l'extérieur du caisson (en cas de fil qui n'est pas sur une bobine) On peut noter que la position de la bobine n'est pas idéale, peut-être le mieux eu été qu'elle soit à l'extérieur du caisson Sur le côté droit, le plexi coulisse, ce qui permet d'accéder facilement à l'extrudeur (sur mon imprimante, je suis obligé de "pousser" à la main un peu de filament), notamment en cas de changement de filament. La porte se ferme via deux aimants (toujours brico dépôt) Reste à intégrer : - une poignée à la porte - les lumières (elles arrivent de Chine dans qq jours) - un support pour l'écran LCD en façade - une prise USB femelle (pour les mises à jour du firmware) - un bouton ON/OFF en façade aussi - les boutons pour la mise à jour du firmware en façade aussi - des petits supports pour les outils (spatules, lecteur carte SD, petite pince pour retirer le filament) - mettre en peinture le tout - un rapsberry pi et la future caméra ...bref encore un peu de boulot. Dans les choses à ne pas reproduire sur un prochain caisson : - visser par l'intérieur ça fait plus beau - faire le caisson plus haut (j'ai dû raboter une traverse pour que l'imprimante passe avec le tapis anti vibrations. - la bobine à l'extérieur ? (il y a débat) - peut être faire une partie fixe sur le devant du caisson pour pouvoir y intégrer l'écran, les boutons et autre Pour info, je dessine le caisson sur SketchUp, si quelqu'un est intéressé, qu'il me fasse signe. Inteloide
-
Pour la version avec l'écran, voici le code à mettre aux environs de la ligne 5426, en replacement de tout le code de l'instruction "inline void gcode_M601() {" PS : attention certaines options de l'instruction ont changées (option R devient V et B devient A), mais la ligne à mettre dans le gcode reste : M601 X20 Y180 Z5 P18. Pour modifier la température, il faut rajouter S205 en remplaçant 205 par la température voulue (ex : M601 X20 Y180 Z5 P18 S205) Note : je ne l'ai pas testé. Une fois testé, je posterai le fichier marlin directement inline void gcode_M601() { // Pause pour changer de filament (Par Inteloide) // Syntaxe (l'ordre des lettre n'a pas d'importance): // X[pos] Y[pos] Z[relative lift] : Position parking (par défaut en absolu) // V : déplacement X et Y de la position parking en relatif (attention Z est toujours en relatif) // A[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) // S[température] : Température de la buse souhaitée après la pause // // 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 // 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(); } 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]+= abs(code_value()); } 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 float distance; if(code_seen('X')) { distance=code_value(); if(code_seen('V')) { target[X_AXIS]+= distance; } else { target[X_AXIS] = distance; } } else { #ifdef FILAMENTCHANGE_XPOS target[X_AXIS]= FILAMENTCHANGE_XPOS ; #endif } if(code_seen('Y')) { distance=code_value(); if(code_seen('V')) { target[Y_AXIS]+= distance; } else { target[Y_AXIS] = distance; } } 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(); } 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) unsigned long temp_after_break=2000; // Tempo après le changement d'état de la pin 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('A')) 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 if(code_seen('H')) {temp_after_break = code_value()*1000;}; // Tempo après le changement d'état de la pin // 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(); //=> mis en commentaire pour éviter que les moteurs se désactive et qu'on puisse bouger la tête par erreur. enable_x();enable_y();enable_z(); // 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 // Tempo pour retirer sa main if (!wait_for_time) { delay(temp_after_break); } // On met la bonne température if(code_seen('S')) { gcode_M109(); } //return to old position the extruder if(code_seen('L')) { target[E_AXIS]+= -code_value(); 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]); } else { #ifdef FILAMENTCHANGE_FINALRETRACT target[E_AXIS]+=(-1)*FILAMENTCHANGE_FINALRETRACT ; 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]); #endif } //return to old position 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 unretract }
-
Pas de soucis normalement : l'instruction M601 n'a aucune influence sur la température (afin de pouvoir retirer le filament). Par contre, je ne pense pas que ce soit le plus judicieux, car si tu change la consigne de température avant, la buse de l'imprimante va rester en contact avec la pièce imprimé le temps de faire la régulation de température => tu risques d'avoir un défaut d'aspect. Remarque que c'est la même chose si on met l'instruction après la pause : l'imprimante va revenir au point de départ, puis va réguler la température ! => donc il faut que je modifie le firmware pour faire la régulation de température après la pause quand l'imprimante n'est pas encore revenue à sa position initiale.
-
Bonjour, Je regarde pour ajouter sur mon site le fichier marlin_main.cpp pour les différentes version du firmware. Je n'ai pas regardé les différences à maintenant, mais normalement dans ce fichier, il n'y en a pas. Seul les fichiers de configuration doivent changer. Je vous tient au jus !
-
Si ça peut aider : - en bidouillant un plugin pour SketchUp, pour imprimer directement depuis ce logiciel, je me suis rendu compte que j'avais des problèmes de saccades qui généraient un défaut d'aspect similaire (gouttelettes). En augmentant le buffer le transfert des commandes (via le port USB) le défaut s’atténue (sans disparaître, snif, ce n'est pas pour tout de suite l'impression vie SketchUp). - j'ai eu le même soucis en installant Octoprint, la version d'Octopi pour mettre sur un raspberry pour lequel il y a d'autres programmes sur la carte SD. Je pense donc aussi que ces défaut ont un lieu avec l'activité du processeur (la communication via l'USB ou l'écran LCD, doivent ralentir le traitement). On pourrait dès lors proposer des solutions : - ne pas afficher les coordonnées X et Y (franchement, ça sert à quelqu'un ?) - diminuer la fréquence de rafraîchissement de l'écran. Hormis la partie impression en deux couleurs, je n'ai pas encore mis les mains dans le firmware de l'écran, mais ça me titille de plus en plus. Si je peux aider, ça sera avec plaisir.
-
Bonjour, Sans avoir désactivé le DISABLE_Z, avec le nouveau firrmware pour l'écran LCD, il me semble que je ne peux plus tourner les tiges de l'axe Z durant l'impression (vu lors d'une impression cette après midi). Ce qui prouve que même sans le désactiver le firmware maintient les moteurs de l'axe Z sous tension. Quelqu'un a-t-il fait le même constat ?