Support pour webcam
===================

:date: 2022-01-18
:tags: Impression 3D, modélisation 3D
:slug: support-pour-webcam
:url: support-pour-webcam

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

Télécharger, découper et imprimer le fichier `support-logitech-streamcam.stl <images/supportWebcam/support-logitech-streamcam.stl>`_.

Contexte
--------

Cela fait plusieurs mois que j'utilise une webcam[ref]Logitech Streamcam[/ref], 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 [ref]Parce que trop fin[/ref], il m'a fallu trouver une autre solution.

L'une des possibilité était de poser la webcam sur la colonne centrale [ref]celle maintenant les deux bras articulés[/ref], mais cela ne convenait pas du tout.

. image:: images/supportWebcam/image1.jpg

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).

. image:: images/supportWebcam/support.jpg

Jusque là, pas de soucis.

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

OpenSCAD
~~~~~~~~

. warning:: 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.

. image:: images/supportWebcam/openScad1.jpg


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 :

. code-block:: javascript

   square([44,40]);

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

. image:: images/supportWebcam/openScad2.jpg

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

. code-block:: javascript

   circle(d=44);

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

. image:: images/supportWebcam/openScad3.jpg

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 :

. code-block:: javascript

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

. image:: images/supportWebcam/openScad4.jpg

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

Modifier le code comme suit : 

. code-block:: javascript

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

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

. image:: images/supportWebcam/openScad5.jpg


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 [ref]Au pire, on peut caler avec un morceau de carton, bristol, feuille pliée…[/ref].

. code-block:: javascript

   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);
       };
   }

. image:: images/supportWebcam/openScad6.jpg


. 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.

. code-block:: JavaScript

   //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 : 

. code-block:: JavaScript

   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);
       };
   }


. image:: images/supportWebcam/openScad7.jpg

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.

. code-block:: javaScript

   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]);
       };
   }

. image:: images/supportWebcam/openScad8.jpg

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.

. code-block:: JavaScript

   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]);
           };
       }
   }

. image:: images/supportWebcam/openScad9.jpg

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

. image:: images/supportWebcam/openScad10.jpg

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.

. code-block:: JavaScript

   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);
       }
   }


. image:: images/supportWebcam/openScad11.jpg

. image:: images/supportWebcam/openScad12.jpg


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.

. image:: images/supportWebcam/openScad13.jpg


Le fichier .scad est disponible ici : `support-logitech-streamcam.scad <images/supportWebcam/support-logitech-streamcam.scad>`_. ; tout comme le fichier .stl `support-logitech-streamcam.stl <images/supportWebcam/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 gcode[ref]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.[/ref].


Prenez votre logiciel préféré [ref]pour moi, c'est PrusaSlicer, basé sur Slic 3r[/ref], et importez le fichier .stl.

. image:: images/supportWebcam/slicer1.jpg

Faire les réglages habituels, je n'entrerai pas dans les détails, ça change d'une imprimante 3D à l'autre[ref]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[/ref].

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

. image:: images/supportWebcam/slicer2.jpg

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

. image:: images/supportWebcam/slicer3.jpg

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èce[ref]4 heures et 20 minutes pour moi, avec une Ender 3 Pro[/ref].

. image:: images/supportWebcam/print.jpg


Résultat
~~~~~~~~

Résultat en images :

. image:: images/supportWebcam/print2.jpg

. image:: images/supportWebcam/print3.jpg

. image:: images/supportWebcam/print4.jpg

Et une fois en place : 

. image:: images/supportWebcam/resultat1.jpg

. image:: images/supportWebcam/resultat2.jpg

. image:: images/supportWebcam/resultat3.jpg


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.

--