Effervecreanet

Pour un monde plus net

Création de l'ébauche

Je commence par piloter l'imprimante en mode manuel pour avoir une idée de comment je peux faire ma pièce. Ce que j'ai fait n'étant pas trop mal j'obtiens les instructions moteur 3d suivantes.

gcode plusieurs parties pièce

Agrandir l'image

L'image dessus correspond à ce que je dois répéter pour avoir un premier niveau de remplissage. Ensuite, il s'agira de répéter cette partie avec 1) un retour à 0.000 sur l'axe Z et 2) un augmentation de la hauteur sur l'axe Y. Et 3) trouver le bon remplissage sur l'axe E ou la buse d'extrusion.

Pour finir, il faudra introduire le cadre ou bordure sur le tour du rectangle pour caler la carte de visite dedans.

rectangle imprimé 3d

Après de multiples essais infructeux, j'arrive à ce que vous pouvez voir ci-dessus. Il ne reste donc plus qu'à introduire le cadre de bordure. Je ne vais pas réécrire comment je fais cette étape, pour les plus curieux c'est ici.

Écriture du programme C

Le code C définitif qui génère le gcode définitif pour imprimer le support de carte est ce qui suit:

#include <stdio.h>

#define STEP_X 0.700

#define STEP_Y 0.200

#define STEP_Z 0.010

#define STEP_E 0.200

#define IMAX_E  1

#define EXTRUDE(E) do { \

                        printf("G1 E%.3f\n", E); \

                        E += STEP_E; \

                    } while(0)

static float X, Y, Z, E = 0.000;

void surface_edge_border(void) {

    int layer = 0;

    printf("; surface edge border\n");

    for(Y; Y <= 10.801; Y += STEP_Y)

        printf("G1 F200 Y%.3f\n", Y);

    

    while (layer < 21) {

        for (X; X < 37.101; X += STEP_X)

            printf("G1 F200 X%.3f\n", X);

        EXTRUDE(E);

        EXTRUDE(E);

        for (Z; Z > -0.501; Z -= STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        for (Z; Z > -1.001; Z -= STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        for (Z; Z > -2.001; Z -= STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        for (Z; Z > -2.541; Z -= STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        for (X; X > -0.001; X -= STEP_X)

            printf("G1 F200 X%.3f\n", X);

        

        EXTRUDE(E);

        EXTRUDE(E);

        EXTRUDE(E);

        EXTRUDE(E);        

        if (layer < 2) {

            EXTRUDE(E);

            EXTRUDE(E);

            EXTRUDE(E);

        }

        for (Z; Z < -2.539; Z += STEP_Z)

            printf("G1 F20 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        if (layer < 2) {

            EXTRUDE(E);

            EXTRUDE(E);

        }

        for (Z; Z < -1.001; Z += STEP_Z)

            printf("G1 F20 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        if (layer < 2) {

            EXTRUDE(E);

            EXTRUDE(E);

        }

        for (Z; Z < -0.499; Z += STEP_Z)

            printf("G1 F20 Z%.3f\n", Z);

        EXTRUDE(E);

        EXTRUDE(E);

        

        if (layer < 2) {

            EXTRUDE(E);

            EXTRUDE(E);

        }

        for (Z; Z < 0.001; Z += STEP_Z) {

            if (Z > -0.030) {

                Y += STEP_Y;

                printf("G1 F200 Y%.3f\n", Y);

            }

            printf("G1 F20 Z%.3f\n", Z);

        }

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        layer++;

    }

    return;

}

void base_filled_rectangle(void) {

    int layer = 0;

    int max_E = IMAX_E, cnt_E;

    for(cnt_E = 0; cnt_E < max_E; cnt_E++)

        EXTRUDE(E);

    while (layer < 7) {

        if (layer == 2)

            max_E += 4;

        

        if (layer == 6)

            max_E -= 2;

        while(Z > -2.541) {

            for (X; X < 37.101; X += STEP_X)

                printf("G1 F200 X%.3f\n", X);

            for(cnt_E = 0; cnt_E < max_E; cnt_E++)

                EXTRUDE(E);

            Z -= STEP_Z;

            printf("G1 F200 Z%.3f\n", Z);

            Z -= STEP_Z;

            printf("G1 F200 Z%.3f\n", Z);

        

            for(cnt_E = 0; cnt_E < max_E; cnt_E++)

                EXTRUDE(E);

            for (X; X > -0.001; X -= STEP_X)

                printf("G1 F200 X%.3f\n", X);

            for(cnt_E = 0; cnt_E < max_E; cnt_E++)

                EXTRUDE(E);

            Z -= STEP_Z;

            printf("G1 F200 Z%.3f\n", Z);

            Z -= STEP_Z;

            printf("G1 F200 Z%.3f\n", Z);

        

        }

        for (Z; Z < -2.539; Z += STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        for(cnt_E = 0; cnt_E < max_E; cnt_E++)

            EXTRUDE(E);

        for (Z; Z < -1.001; Z += STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        for(cnt_E = 0; cnt_E < max_E; cnt_E++)

            EXTRUDE(E);

        

        for (Z; Z < -0.499; Z += STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        

        for(cnt_E = 0; cnt_E < max_E; cnt_E++)

            EXTRUDE(E);

        for (Z; Z < 0.001; Z += STEP_Z)

            printf("G1 F200 Z%.3f\n", Z);

        

        for(cnt_E = 0; cnt_E < max_E; cnt_E++)

            EXTRUDE(E);

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        Y += STEP_Y;

        printf("G1 F200 Y%.3f\n", Y);

        

        layer++;

    }

}

void marlin_init(void) {

    printf("G90\n");

    printf("M106 S225\n");

    printf("M109 S225\n");

    return;

}

void marlin_finish(void) {

    printf("M106 S0\n");

    printf("M109 S0\n");

   

    for (Z; Z < 0.777; Z += STEP_Z)

        printf("G1 F200 Z%.3f\n", Z);

    

    return;

}

int main(int argc, char **argv) {    

    marlin_init();

    base_filled_rectangle();

    surface_edge_border();

    marlin_finish();

    return 1;

}

Pièce finit

Le résultat définitif est ce que vous pouvez voir plus bas:

Photo: rectangle support carte 1

Photo: rectangle support carte 2

Photo: rectangle support carte 3

Fichier à télécharger: support_carte.c et support_carte.g

Je copie support_carte.g sur la carte SD que je mets dans le module SD de l'imprimante et ...

Photo: écran discoeasy

j'imprime.

Problèmes rencontrés

Une des difficultés majeures est qu'on ne peut pas comparer des nombres avec virgule. Par exemple, pour faire un test sur le nombre 0.444 il faut tester si 0.444 est inférieur à 0.4441 ou supérieur à 0.4439. Un autre probléme est que pour imprimer le rectangle tour de bordure il faut trouver la bonne hauteur sur l'axe d'épaisseur. Trouver le bon résultat demande une certaine patience.

Photo: supports carte imprimés

Lien connexe: http://www.effervecrea.net/pilotage-et-impression-rectangle-3D

 

Début de la page
contact  mentions légales