Tuto OpenSCAD, coupleur paramétrable

Je m’essaie doucement à OpenSCAD. Si vous ne connaissez pas encore, c’est un logiciel de conception 3D paramétrique pour les gars qui ont au moins 25mm de barbe (ou les filles qui ont un minimum de 5mm de poils aux pattes). Comparé à SolidWorks auquel je suis assez habitué, c’est… du roots! Pour modéliser une pièce, il faut écrire un programme.

Il y a les formes de base, comme cube() ou cylinder(), des fonctions booléennes comme union() ou difference(), des fonctions de transformation, comme translate() ou rotate(). Et bien sûr beaucoup d’autres fonctionnalités que je n’ai pas testées, pour faire des révolutions, des extrusions en suivant un chemin et plein d’autres.

Vous vous souvenez de mon coupleur 5/8mm? Hé bien je l’ai refait dans OpenSCAD pour le rendre paramétrable à souhait et utilisable dans le module Customizer de Thingiverse (https://www.thingiverse.com/thing:299663).

Résultat fini

openscadcc_1

Classe, non ? Et concis, parce que le programme ne fait que 122 lignes (formaté et tout).

Après plusieurs expérimentations d’OpenSCAD, je me suis rendu compte qu’il était TRES important de travailler par modules. C’est l’équivalent des fonctions dans n’importe quel langage de programmation. Ca paermet de structurer le code, et d’éviter de se répéter (la règle fondamentale du DRY -> Don’t Repeat Yourself).

Nous allons écrire le premier module, qui va simplement dessiner le…

Cylindre principal

Facile. Dans ce module, nous appelons la fonction native cylinder(), en lui passant des paramètres nommés : h, r, center et $fn.

h est la hauteur du cylindre r est son rayon center indique si le cylindre doit être centré sur l’axe Z $fn est la résolution, c’est à dire le nombre de segments qui composent le cylindre.

Pour appeler ce module, nous devrons fournir le diamètre. La hauteur et la résolution sont fixées dans des variables globales au début du programme (ils deviendront des paramètres dans le customizer de Thingiverse).

Si on appelle main_cylinder(24), nous obtenons le résultat suivant :

openscadcc_2

On peut voir que notre cylindre est automatiquement centré en X et Y, et que sa base est sur le plan Z=0.

Voici le programme complet. Comme je l’ai mis sur Thingiverse, j’ai fait les commentaires en anglais, et comme je suis une grosse feignasse, je ne les traduirai pas!

Un cylindre, c’est bien beau mais ça ne fait pas tout; il va falloir le percer. Nous allons pour cela utiliser la fonction booléenne difference().

Perçage du cylindre principal

Créons un deuxième cylindre, de diamètre plus petit et de la même hauteur que notre cylindre principal : [codesyntax lang= »php »]

[/codesyntax]

Si on appelle successivement

on verra toujours seulement notre cylindre principal. Le petit est « dedans ». En revanche, si on écrit :

openscadcc_3

Voilà qui devient intéressant! Par contre on peut voir au niveau du trou que c’est assez bizarre:

openscadcc_4Ce zigouigoui est causé par une épaisseur nulle, et ça peut poser des problèmes par la suite, lors du tranchage de l’objet (facettes fantômes, normales inversées… que du bonheur…) Alors pour éviter ça, on va juste rallonger le 2ème cylindre de 1mm en haut et en bas, et ça va aller tout de suite mieux. En plus, ça va nous permettre d’utiliser la fonction translate(), car doit rallonger la hauteur du cylindre de 2mm, et le décaler vers le bas de 1mm. Voici le programme complet:

J’appelle cette constante ozp (offset-zero-planes), et nous allons l’utiliser à plusieurs endroits par la suite. C’est une bonne chose de prévoir ceci dès le début, comme ça on n’aura pas de surprises avec le STL par la suite.

Ce qui nous donne :

openscadcc_5

Cool! Propre et tout 🙂

Maintenant c’est pas le tout, mais nous voulons deux diamètres pour notre trou central. Nous allons écrire deux modules, qui prennent en paramètre les diamètres respectifs et qui vont percer le cylindre en haut et en bas. On va aussi créer un module main() dans lequel les opérations de différence sont faites, ce qui nous donne le programme suivant:

Et voici le résultat (dans une vue fil de fer par en dessous, pour bien voir le décalage à l’intérieur)

openscadcc_6

Ouvertures latérales

Occupons nous maintenant de l’ouverture du côté des vis de serrage (avec dans l’idée que sa largeur devra être paramétrable dans le customizer thingiverse).

Nous allons pour cela définir un parallélépipède rectangle avec la fonction cube(), en lui donnant ses 3 dimensions. Et nous allons décaler ce cube avec translate() pour qu’il vienne se positionner au bon endroit. On n’oublie pas le paramètre ozp pour éviter les facettes fantômes, et nous créons un nouveau paramètre opening_width (largeur de l’ouverture).

Nous allons dans la foulée réaliser la rainure en face, qui est composée d’un cylindre et d’un pavé. Nous ajoutons le paramètre articulation_thickness, qui correspond à l’épaisseur de matière qui relie les deux parties du coupleur.

On ajoute ces deux modules dans le module main(), on sort encore quelques paramètres et voici le programme complet:

openscadcc_7

Bien! Maintenant, passons aux…

Emplacements des boulons de serrage

Pour les trous des boulons, nous allons écrire un module qui prend en paramètre la hauteur (z), et qui crée une empreinte de boulon. On calcule un offset Y pour que l’empreinte tombe au milieu de la partie pleine du coupleur. Puis on perce le trou principal (diamètre: bolt_diameter), l’empreinte de l’écrou (nut_diameter, avec une résolution de 6 segments… futé :), et enfin l’empreinte de la rondelle ou de la tête de la vis (washer_diameter).

Le module main() devient :

Résultat

openscadcc_1

Pour aller plus loin, jetez vous sur le tutoriel de RepRapide.fr!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Es-tu capable de répondre à ça? * Time limit is exhausted. Please reload the CAPTCHA.