Chibi-nah::blog

Des geekeries, de la MAO, de tout et de rien…

Archives

Support pour webcam

TL;DR (trop long, flemme de lire).

Télécharger, découper et imprimer le fichier support-logitech-streamcam.stl.

Contexte

Cela fait plusieurs mois que j'utilise une webcam1, mais son positionnement n'était pas super.

En effet, ayant changé de moniteurs PC et ayant fini par craquer et les positionner sur des bras articulés, je n'avais plus d'emplacement pour poser la webcam.

La solution de la poser au dessus de l'un des écrans n'étant plus possible 2, il m'a fallu trouver une autre solution.

L'une des possibilité était de poser la webcam sur la colonne centrale 3, mais cela ne convenait pas du tout.

Jugez par vous-même. C'est pas terrible.

Modélisation

D'abord, avant de toucher au PC, il faut réfléchir sur la forme de la pièce. Par habitude, j'ai dessiné vite-fait une esquisse sur un cahier. Une partie circulaire qui ira sur le montant, une fente rectangulaire dans laquelle coulissera le support d'origine de la webcam.

Ensuite, armé d'un pied à coulisse, j'ai mesuré le diamètre du montant (~35,5 mm), et aussi le support de la webcam (36 mm × 12 mm).

Jusque là, pas de soucis.

Ayant galéré avec FreeCAD (crash, instable, tutos plus à jour), je suis parti sur OpenSCAD.

OpenSCAD

Avis

Le code présenté ici correspond à la version 2 du support. Une erreur de mesure et l'absence de marge ont fait que la pièce imprimée initialement était en fait trop petite. Les corrections sur les cotes ont été faites.

D'un aspect plutôt austère, cet outil de modélisation a une approche « script ». En résumé, la souris ne sert qu'à regarder la pièce sous différents angles.

La pièce sera composée d'un rectangle, et d'un demi-cercle dépassant de ce rectangle.

On commence par le rectangle (44 mm × 40 mm). Taper dans la zone de texte, dans l'éditeur :

square([44,40]);

Appuyer sur la touche F5. Un rectangle doit apparaître dans la zone de visualisation.

Maintenant, on ajoute un cercle, de diamètre 44 mm :

circle(d=44);

Un appui sur F5 et… ah, ben, c'est pas bon en fait.

Le cercle a été tracé en utilisant les coordonnées x = 0, y = 0, Z = 0 comme point central.

Il faut donc déplacer le centre de ce cercle, disons, de 22 mm sur l'axe des x (axe rouge indiqué dans le coin en bas à gauche, dans la visualisation).

On va utiliser l'instruction translate sur le cercle.

Modifier le code comme suit :

translate([22,0,0]) {
    circle(d=44);
};

Les deux éléments se superposent, ça serait bien de les fusionner réellement.

Modifier le code comme suit :

union() {
    square([44,40]);
    translate([22,0,0]) {
        circle(d=44);
    };
}

Note

Ne pas hésiter à indenter le code pour le rendre plus lisible.

Maintenant, on va enlever de la matière (soustraire), via l'instruction difference.

Le cercle correspondant à la matière à retirer devra avoir son centre positionné au même endroit que le cercle initial ; donc déplacement sur l'axe des x de 22 mm.

On va prendre un peu de marge, et creuser avec un diamètre de 37mm. Il y aura un léger jeu dans la pièce, mais ce n'est pas trop grave 4.

difference() {

    //Pièce de base
    union() {
        square([44,40]);
        translate([22,0,0]) {
            circle(d=44);
        };
    }

    //cercle (matière à retirer)
    translate([22,0,0]) {
        circle(d=37);
    };
}

Note

On peut ajouter des commentaires dans le code. Cela permet de s'y retrouver, ou de tester une petite partie du code, sans impacter le reste.

//ce commentaire tient sur une seule ligne

/*
 * Ce commentaire tient
 * sur plusieurs lignes.
 */

Admettons que l'on veuille juste tester l'instruction difference sur le cercle. On modifierait le code comme ceci :

difference() {

    //Pièce de base
//    union() {
//        square([44,40]);
        translate([22,0,0]) {
            circle(d=44);
        };
//    }

    //cercle (matière à retirer)
    translate([22,0,0]) {
        circle(d=37);
    };
}

C'était juste pour l'exemple.

Décommenter le code.

On va maintenant découper la fente. On ajoute une nouvelle différence dans l'ensemble, avec un rectangle de 37 mm × 13 mm, et centré par rapport au rectangle, mais décalé par rapport au cercle.

difference() {
    difference() {

        //Pièce de base
        union() {
            square([44,40]);
            translate([22,0,0]) {
                circle(d=44);
            };
        }

        //cercle (matière à retirer)
        translate([22,0,0]) {
            circle(d=37);
        };
    }
    //rectangle (matière à retirer)
    translate([3.5,22,0]) {
        square([37,13]);
    };
}

Maintenant, il faut donner du « volume » à la pièce. On va faire alors une extrusion linéaire, via linear_extrude, d'une hauteur de 50 mm.

linear_extrude(height=50) {
    difference() {
        difference() {

            //Pièce de base
            union() {
                square([44,40]);
                translate([22,0,0]) {
                    circle(d=44);
                };
            }

            //cercle (matière à retirer)
            translate([22,0,0]) {
                circle(d=37);
            };
        }
        //rectangle (matière à retirer)
        translate([3.5,22,0]) {
            square([37,13]);
        };
    }
}

Note

Ne pas hésiter à changer l'angle de vue avec la souris.

On a presque fini avec la modélisation.

Pour éviter que ce support ne tombe, ça serait bien de boucher l'une des extrémités circulaire.

On va alors ajouter un cylindre dans la partie circulaire, d'une épaisseur de 5 mm.

union() {
    linear_extrude(height=50) {
        difference() {
            difference() {

                //Pièce de base
                union() {
                    square([44,40]);
                    translate([22,0,0]) {
                        circle(d=44);
                    };
                }

                //cercle (matière à retirer)
                translate([22,0,0]) {
                    circle(d=37);
                };
            }
            //rectangle (matière à retirer)
            translate([3.5,22,0]) {
                square([37,13]);
            };
        }
    }

    //cylindre servant de « bouchon »
    translate([22,0,0]) {
        cylinder(h=5, d=44);
    }
}

On a presque fini.

Appuyer sur F6 pour calculer le rendu (F5 ne fait qu'un aperçu).

Appuyer ensuite sur F7 pour générer un fichier .stl.

Le fichier .scad est disponible ici : support-logitech-streamcam.scad. ; tout comme le fichier .stl support-logitech-streamcam.stl.

La partie modélisation est terminée.

Préparation de l'impression 3D

Bien, maintenant que l'on a notre fichier stl, on va pouvoir l'imprimer ? En fait, non. Il y a une étape intermédiaire : transformer un modèle 3D en un fichier interprétable par l'imprimante, le fichier gcode5.

Prenez votre logiciel préféré 6, et importez le fichier .stl.

Faire les réglages habituels, je n'entrerai pas dans les détails, ça change d'une imprimante 3D à l'autre7.

Faire le découpage/trancher/slicer (le mot peut varier).

Ne pas hésiter à visualiser le résultat couche par couche.

Enfin, générez le G-Code, et l'envoyer à l'imprimante (via Octoprint, avec une microSD, etc).

Impression 3D

Patienter quelques heures, le temps que la machine imprime la pièce8.

Résultat

Résultat en images :

Et une fois en place :

Conclusion

Créer une pièce en plastique à partir de rien, ce n'est pas compliqué. C'est juste un peu long, mais le résultat en valait la peine.

--

  1. Logitech Streamcam
  2. Parce que trop fin
  3. celle maintenant les deux bras articulés
  4. Au pire, on peut caler avec un morceau de carton, bristol, feuille pliée…
  5. Ce fichier contient les instructions comme chauffe la buse à telle température, avance le plateau (bed) de 30 mm sur l'axe des x, etc.
  6. pour moi, c'est PrusaSlicer, basé sur Slic 3r
  7. Je me suis fait des profils d'impression, celui que j'utilise le plus, c'est épaisseur 0,2mm, rapide, avec remplissage rectiligne à 30%. Ce réglage me convient pour la plupart des trucs que j'imprime
  8. 4 heures et 20 minutes pour moi, avec une Ender 3 Pro