2. Conception Assistée par Ordinateur (CAO)#
Cette semaine, nous avons découvert plusieurs logiciels de conception assistée par ordinateur (CAO). Ces outils permettent de créer et manipuler des modèles géométriques d’objets. Ils sont super pratiques pour préparer une fabrication ou tester des prototypes avant de les réaliser en vrai.
2.1 Logiciels CAO#
Les 3 logiciels principaux présentés en cours sont les suivants :
-
Openscad
-
FreeCad
-
Inkscape
Il en existe d’autres bien évidemment comme tinkerCAD, par exemple.
2.2 Objet Compliant#
Il nous a été demandé de créer un objet compliant à l’aide de ces logiciels. Un objet compliant c’est un objet flexible ou déformable qui peut changer de forme sous l’effet d’une force et revient à sa forme initiale une fois cette force relâchée. Il est souvent utilisé dans des mécanismes où on a besoin de mouvement sans pièces rigides, comme dans certains ressorts ou pinces flexibles.
2.3 Choix du logiciel et de l’objet#
L’objet compliant que j’ai choisi de modéliser est le suivant (en vert sur l’image) :
Cet objet a été trouvé sur Thangiverse, les informations concernant la licence de ce dernier y sont présentes.
Afin d’ouvrir le fichier stl de l’objet et l’observer plus précisément (dimensions,…), il est possible de l’ouvrir avec Paint 3D par exemple.
2.4 OpenSCAD#
Ensuite, une fois l’objet choisi, il faut le modéliser, le logiciel que j’ai choisi pour ce faire est openSCAD.
La première étape est bien évidemment d’installer le logiciel, il est possible de le faire via ce lien.
Une fois le logiciel installé, il est possible de créer la pièce en saisissant du texte dans la partie gauche de l’interface. Effectivement, il est possible de déplacer, assembler, ou soustraire des formes entre elles. Je vais présenter ces aspects plus en détails dans la suite de ce module.
2.5 Modélisation de l’objet#
Pour modéliser l’objet, voici les étapes suivies:
- Création de la base (parallélépipède rectangle).
- Création des cylindres qui serviront de trous pour le lego.
- Création des parallélépipèdes rectangles qui serviront à créer le relief au mileu de la forme.
- Etablir la différence entre la base et les différents reliefs de celle-ci + arrondissement des bords de la base.
2.5.1 Création de la base#
2.5.1.1 Variables#
Pour que le code soit lisible et propre, l’idéal est de commencer par définir les variables importantes comme les dimensions des formes géométriques au début du code.
2.5.1.2 Modules#
Afin de stocker une certaine forme géométrique, un module peut être créé comme présent dans le code ci-dessous. C’est un peu l’équivalent d’une variable mais pour des objets. De plus, afin de centrer ma forme au niveau des axes d’openSCAD, une translation a été effectuée.
size = 5;
longueur = 30;
largeur = 7 ;
hauteur = 3 ;
rayon_arrondi = largeur/2;
fact_ouv = 4.5;
// Création d'un module nommé base
module base() {
translate([-longueur/2, -largeur/2, -hauteur/2]) // Faire translater se module dans les axes d'une distance [x,y,z]
{
cube([longueur, largeur, hauteur]); // Particularité de l'objet du module base, (ici ca sera un cube de dimensions [x,y,z])
}
}
Ma base étant un ‘cube’ de dimensions définies plus haut, il est en réalité un parallélépipède rectangle.
2.5.2 Création des quatres cylindres#
Par la suite, quatres cylindres ont été créés, cylindreg
, cylindregg
, cylindred
et cylindredd
qui formeront les 4 trous visibles sur l’objet final.
2.5.3 Création des parallélépipèdes rectangles#
Afin de créer le creux au milieu de l’objet, trois cubes ont été modélisés et translatés aux endroits correspondants. Dans la dernière partie de la modélisation de l’objet, la manière avec laquelle la base va être trouée sera expliquée.
module carre_milieu(){
translate([-longueur/(2*fact_ouv),-largeur/2,0]){
cube([longueur/fact_ouv,largeur,hauteur/2]);
}
}
module petit_carre_milieu_g(){
translate([longueur/(4*fact_ouv),-largeur/2,-hauteur/2.7]){
cube([longueur/(4*fact_ouv),largeur,hauteur/2]);
}
}
module petit_carre_milieu_d(){
translate([-2*longueur/(4*fact_ouv),-largeur/2,-hauteur/2.7]){
cube([longueur/(4*fact_ouv),largeur,hauteur/2]);
}
}
La variable fact_ouv représente la fraction du cube qui sera dédiée à la partie centrale (creuse).
Voici à quoi ressemblent les 2 cubes: petit_carre_milieu_d()
et petit_carre_milieu_g()
En y ajoutant le carre_milieu()
, voici à quoi ressemblent ces trois cubes:
2.5.4 Différences et lissage des bords#
Maintenant que tous les éléments permettant de creuser dans la base ont étés modélisés, il est possible de creuser notre objet. Pour ce faire, une fonction difference()
d’openSCAD permet de soustraire différents objets les uns aux autres.
Voici comment il est possible de soustraire les 7 formes présentées précédemment à la base.
// Utilisation de difference() pour creuser l'objet
difference() {
base(); // le module que je veux creuser (ma base)
// Enumération de tous les modules que je veux soustraire à cette base
cylindreg();
cylindregg();
cylindredd();
cylindred();
carre_milieu();
petit_carre_milieu_g();
petit_carre_milieu_d();
}
De plus, afin d’arrondir les bords, deux cylindres supplémentaires ont été créés avant l’appel de difference()
et placés aux extrémités de ma base()
.
module cylindre_bordsd(){
translate([longueur/2,0,-hauteur/2]){
cylinder(h=hauteur,r= largeur/2, $fn = 100);
}
}
module cylindre_bordsg(){
translate([-longueur/2,0,-hauteur/2]){
cylinder(h=hauteur,r= largeur/2, $fn = 100);
}
}
Ensuite, avec la fonction union()
il est possible d’unir différents objets les uns aux autres afin de ne former plus qu’un. En placant ces deux cylindres de part et d’autres de la base et en les unissant, la base prend la forme voulue suivante :
// Regrouper ma base et mes deux cylindres pour former un seul objet
union(){
base();
cylindre_bordsg();
cylindre_bordsd();
}
Dans mon code, difference()
ainsi que union()
sont réalisés ensemble et permettent d’obtenir l’objet final.
difference() {
union(){
base();
cylindre_bordsg();
cylindre_bordsd();
}
cylindreg();
cylindregg();
cylindredd();
cylindred();
carre_milieu();
petit_carre_milieu_g();
petit_carre_milieu_d();
}
2.6 Difficultées rencontrées#
Cette section contiendra les quelques problèmes ou points importants à savoir pour ne pas reproduire les mêmes erreurs que celles que j’ai commises.
2.6.1 openSCAD filaments F6#
Pour mettre à jour les modifications apportées au code, il est possible d’appuyer sur la touche F5 du clavier. Cependant, parfois il se peut que des sortes de filaments apparaissent et empêchent de voir clairement la pièce comme sur la photo suivante :
Pour régler ce problème, il faut appuyer sur la touche F6 de son clavier.
2.6.2 Dimensions objet#
Dans une ancienne version de mon objet, les dimensions de ce dernier ne correspondaient pas exactement avec celles des legos de tests. (Legos réalisés par un autre étudiant et qui permettront de tester mon objet compliant après impression).
Il est donc indispensable, dès le départ, de s’assurer que l’objet compliant ait les dimensions correspondantes avec le reste des objets. Dans la documentation d’Altay, il est possible de trouver les dimensions conventionnelles pour les legos.
Notez bien : Certaines captures d’écran effectuées pour le chapitre suivant ne correspondent pas à la version finale de l’objet étant donné que c’est au moment durant lequel il fallait imprimer que je me suis rendu compte des problèmes de dimensions.
2.7 Licence#
Il est indispensable de donner une licence à son travail openSCAD, effectivement, il est important de spécifier quels sont les choses que nous autorisons lors d’une potentielle utilisation de notre création. Il est possible de trouver les différents types de licences sur ce site.
Afin de choisir la bonne licence, il est possible de répondre à 6 questions via le lien suivant, et la licence correspondant à vos réponses vous sera directement proposée. Voici pour ma part les différentes réponses :
Au début de mon code, j’ai donc spécifié la licence que je souhaite imposer.
2.8 Annexes#
2.8.1 Objet avec Binôme#
Étant donné que j’ai rejoint le cours en retard, je n’ai pas pû choisir de binôme, car ceux-ci étaient déjà formés et que le cours suivant était directement la formation à l’impression 3D. Cependant, afin de tout de même créer un objet lié avec celui de quelqu’un, j’ai demandé à un des étudiants de m’envoyer le code du lego qu’il a créé pour reprendre les dimensions de son lego et de reproduire mon objet openScad directement à partir de ce dernier. Son lego peut être visible dans le module 3.
2.8.2 Code#
Voici le code complet utilisé (sans les commentaires présent plus haut) :
//This work © Lamouchi Mohamed, 2024, is licensed under CC BY 4.0
size = 5;
longueur = 30;
largeur = 7 ;
hauteur = 3 ;
rayon_arrondi = largeur/2;
fact_ouv = 4.5;
module base() {
translate([-longueur/2, -largeur/2, -hauteur/2]) {
cube([longueur, largeur, hauteur]);
}
}
module cylindreg() {
translate([-longueur/2, 0, -hauteur/2]) {
cylinder(h = hauteur, r = largeur / 3, $fn = 100);
}
}
module cylindregg() {
translate([-longueur /4, 0, -hauteur/2]) {
cylinder(h = hauteur, r = largeur / 3, $fn = 100);
}
}
module cylindred() {
translate([longueur/4, 0, -hauteur/2]) {
cylinder(h = hauteur, r = largeur / 3, $fn = 100);
}
}
module cylindredd() {
translate([longueur/2, 0, -hauteur/2]) {
cylinder(h = hauteur, r = largeur / 3, $fn = 100);
}
}
module carre_milieu(){
translate([-longueur/(2*fact_ouv),-largeur/2,0]){
cube([longueur/fact_ouv,largeur,hauteur/2]);
}
}
module petit_carre_milieu_g(){
translate([longueur/(4*fact_ouv),-largeur/2,-hauteur/2.7]){
cube([longueur/(4*fact_ouv),largeur,hauteur/2]);
}
}
module petit_carre_milieu_d(){
translate([-2*longueur/(4*fact_ouv),-largeur/2,-hauteur/2.7]){
cube([longueur/(4*fact_ouv),largeur,hauteur/2]);
}
}
module cylindre_bordsd(){
translate([longueur/2,0,-hauteur/2]){
cylinder(h=hauteur,r= largeur/2, $fn = 100);
}
}
module cylindre_bordsg(){
translate([-longueur/2,0,-hauteur/2]){
cylinder(h=hauteur,r= largeur/2, $fn = 100);
}
}
difference() {
union(){
base();
cylindre_bordsg();
cylindre_bordsd();
}
cylindreg();
cylindregg();
cylindredd();
cylindred();
carre_milieu();
petit_carre_milieu_g();
petit_carre_milieu_d();
}