Chanfrein avec linear_extrude
On peut facilement faire des chanfreins avec linear_extrude…on peut également faire des formes plus complexes !!
Je vous donne un bout de code à la fin de cet article : vous pourrez l’intégrer dans vos programmes openscad sous forme de module. Je l’ai conçu de manière paramétrique pour qu’il s’adapte aux dimensions de vos chanfreins. Voir les exemples d’utilisation dans l’article.
Linear_extrude s’utilise conjointement avec polygon([ [][][]….[]]) ;
Polygon fait un dessin en 2D et linear_extrude réalise une extrusion selon l’axe des « Z ».
Il faut, donc, commencer par faire le dessin 2D que l’on extrudera ensuite. Pour ce faire on utilise le système de coordonnées cartésiennes dans le plan. On donne les coordonnées de chaque sommet du polygone sous la forme [x,y]. Les différentes coordonnées sont séparées par des virgules ; Ce qui donne quelque chose comme :
polygon([[0,0],[5,0],[0,4]]) ;
Qui réalisera un triangle rectangle avec le sommet de l’angle droit à l’origine du repère et les deux autres sommets sur l’axe des « x » et des « y ».
Pour transformer ce triangle rectangle en chanfrein, il suffira de l’extruder à l’aide de linear_extrude de la longueur désirée (à préciser dans la commande) comme ceci :
linear_extrude(height =10) polygon([[0,0],[5,0],[0,4]]) ; ce qui donne (le triangle rectangle et le chanfrein) : |
|
Si vous avez plusieurs chanfreins de dimensions différentes, vous pouvez créer un module qui vous évitera d’écrire plusieurs fois les mêmes lignes de code. Par exemple :
Module monchanfrein(x,y,h){
linear_extrude(height =h)
polygon([[0,0],[x,0],[0,y]]) ;
}
Ainsi pour faire un chanfrein de 40 mm de long avec une longueur de 5 mm sur « X » et 8 mm sur « Y » il suffira d’une ligne de code :
monchanfrein(5,8,40) ;
évidemment, les autres commandes d’openscad vous permettrons de position ce chanfrein où vous voulez …par exemple :
module monchanfrein(x,y,h){ linear_extrude(height =h) polygon([[0,0],[x,0],[0,y]]) ; } translate([10,0,0]) rotate([0,90,0]) monchanfrein(-5,-8,40) ; |
|
Remarquer les coordonnées négatives qui permettent souvent d’éviter des rotations : ci-dessous quelques exemples en changeant les signes :
module monchanfrein(x,y,h){ linear_extrude(height =h) polygon([[0,0],[x,0],[0,y]]) ; } translate([10,0,0]) rotate([0,90,0]) monchanfrein(5,8,20) ; |
|
module monchanfrein(x,y,h){ linear_extrude(height =h) polygon([[0,0],[x,0],[0,y]]) ; } translate([10,0,0]) rotate([0,90,0]) monchanfrein(-5,8,20) ; |
|
module monchanfrein(x,y,h){ linear_extrude(height =h) polygon([[0,0],[x,0],[0,y]]) ; } translate([10,0,0]) rotate([0,90,0]) monchanfrein(5,-8,20) ; |
|
Pour terminer un exemple des possibilités pour créer des formes plus complexes qu’un simple chanfrein, par exemple avec une ligne brisée :
linear_extrude(height =20) polygon([[0,0],[15,15],[15,20],[0,8],[0,20],[-5,10],[-3,0]]) ; |
|
L’article qui suit est fortement inspiré de celui décrit en suivant ce lien :
https://www.lesimprimantes3d.fr/forum/topic/12221-flash-d%E2%80%99un-bootloader-sur-un-arduino-en-se-servant-du-port-icsp/
L’auteur a fait un excellent travail avec une description minutieuse et très précise …. Ce qui n’est pas toujours le cas sur internet !
Habituellement la procédure décrite est utilisée pour charger le bootloader dans une carte qui n’en possède pas. Je m’en suis inspiré pour installer un programme (par exemple, blink) sur une mega2560 dont le port usb n’était plus reconnu par mon ordinateur : je suppose que la puce 16U2 ou CH340 avait subi les derniers outrages et rendu l’âme.
Il n’y a pas grand-chose à modifier à la procédure décrite dans le lien, si ce n’est à la fin, au moment de charger le bootloader …que l’on ne charge pas.
A la place, on charge le programme souhaité (dans mon cas blink, pour faire clignoter la led).
Partie à modifier en vert, le texte initial et en bleu, les explications spécifiques au chargement de blink
Modifications à partir de la ligne :
Brancher l’USB de « l’Arduino Interface » sur l’ordinateur.
Choisir le programme à charger (Fichiers/exemples/basics/blink) ;
Une fenêtre s’ouvre et dans cette fenêtre :
choisir le modèle d’Arduino CIBLE (dans l’exemple ici un ATmega2560).
Choisir le port COM de « l’Arduino interface ». C’est lui qui est branché en USB sur l’ordinateur !
Et choisir dans Outils / Programmateur : Arduino as ISP
Ensuite cliquer sur Croquis/téléverser avec un programmateur
attendre la fin du téléversement
Il suffit maintenant de débrancher l’USB, les 6 câbles Dupont qui sont sur son port ICSP.
La led devrait clignoter au rythme définit dans le programme
Dans cette leçon nous allons découvrir deux commandes qui vont souvent ensemble : UNION() et DIFFERENCE()
UNION() {.....} : cette commande permet de regrouper plusieurs objets 3D qui sont à l'intérieur des accolades {....} de manière à ce qu'ils soient traités de la même façon.
Je vous donne un exemple concret d'utilisation. Imaginons que vous ayez un cube et un cylindre et que vous souhaitiez faire un trou à l'ensemble formé par ces deux pièces. Vous allez utiliser la commande UNION pour rendre ces deux pièces solidaires et une fois cette préparation faite vous allez pouvoir les percer en appliquant la commande que nous allons voir dans le paragraphe suivant : DIFFERENCE().
DIFFERENCE() {.....} : Cette commande va permettre de faire la différence entre le premier objet qui sera donné entre les accolades {...] et ceux qui suivent.
Cela mérite une explication : on va enlever du premier objet, toutes les parties qui sont en commun avec les objets suivants. Un exemple : on va enlever au "cube" la partie qu'il a en commun avec le cylindre...le résultat sera un trou fait dans le cube.
Dans l'exemple suivant, on va utiliser la commande "union" conjointement avec "difference" ...c'est souvent nécessaire.
On va, par exemple, faire un trou vertical dans l'objet formé par un cube et un cylindre (penché).
Successivement :
** la présentation des trois objets qui vont intervenir
** ce que l'on obtient si l'on omet la commande union : les deux cylindres se soustraient au cube... Ce n'est pas ce que l'on veut!!
** avec la commande "union", seul le cylindre rouge se soustrait à l'ensemble formé par le cube et cylindre penché.
Retour à la leçon précédente Vers la leçon suivante
Dans cette leçon, nous allons utiliser la commande : ROTATE([]);
Comme la commande translate([]), elle est utilisée avant des commandes définissant un objet comme cube([]), cylinder() ...etc.
Elle permet de faire tourner l'objet autour des axes X, Y ou Z d'un certain angle.
Par exemple, rotate([90,0,0]) cylinder(10,5,5,$fn=100); va faire tourner le cylindre autour de l'axe X d'un angle de 90°
Ci dessous, quelques exemples d'utilisation :
On peut combiner les commandes translate et rotate.
Mais attention l'ordre est important :
translate([0,20,0]) rotate([90,0,0]) cylinder(10,5,5,$fn=100);
et
rotate([90,0,0]) translate([0,20,0]) cylinder(10,5,5,$fn=100);
n'auront pas le même effet : voir ci-dessous :
Explication pour comprendre comment on a obtenu la position du cylindre rouge :
Retour vers la leçon précédente Vers la leçon suivante
Dans cette leçon, nous allons utiliser une commande bien utile : TRANSLATE([])
Elle permet de positionner un objet où l'on souhaite dans l'espace.
Exemple :
** si vous demandez cylinder(10,5,5,$fn=100); vous aurez un cyllindre dont l'axe sera centré sur le point de coordonnées (0,0,0) par défaut. C'est à dire que l'axe du cylindre sera le demi-axe [oy) orientation vers le haut, donc.
** si vous demandez translate([5,10,3]) cylinder(10,5,5,$fn=100); vous aurez le même cylindre que ci-dessus, mais cette fois l'axe du cylindre sera la demi-droite d'origine le point de coordonnées (5,10,3) verticale et dirigée vers le haut....en gros vous avez déplacé votre cylindre dans la direction des X de 5mm, dans la direction des Y de 10mm et vers le haut de 3mm.
On utilise constamment cette commande.
Par exemple dans l'exemple ci-dessous, j'ai placé quelques cylindres dans l'espace. Comparez la partie gauche (le programme) avec les commandes "translate" et le résultat sur la partie droite (la position des cylindres colorés par rapport au cylindre initial jaune).
Ce cylindre jaune est positionné à l'origine du repère car non précédé de la commande "translate" dans la partie gauche (programme). Dans cette partie gauche, il correspond à la commande cylinder(10,5,5)
Les commentaires :
Je vous invite également à lire, dans la partie programme (à gauche), ce qui est écrit en bleu-vert. Vous remarquerez que le texte est précédé par "//".
Ce qui est derrière est un commentaire que fait le programmeur pour rendre son programme plus lisible (en expliquant ce qu'il fait) ou pour donner des explications.
Par exemple, j'ai écrit "//le cylindre rouge est déplacé de 20mm sur l'axe X" pour expliquer que les 3 lignes suivantes concernent le cylindre rouge
Les commentaires ne sont pas interprétés par le compilateur...pour le programme ils n'existent pas.