Elio Antoun
Séance 1 - Découverte de l'impression 3D
1. Objectif de la séance
L’objectif de cette première séance était de découvrir le fonctionnement de l’impression 3D à travers :
-
la recherche d’un modèle existant,
-
son importation dans un logiciel de tranchage (slicer),
-
le choix de paramètres d’impression adaptés,
-
et la préparation du fichier pour l’impression.
2. Recherche d’un modèle 3D
Dans un premier temps, j’ai effectué une recherche sur le web afin de trouver une base de données de modèles 3D prêts à imprimer.
Je me suis orienté vers la plateforme Printables.com, qui regroupe des milliers de modèles partagés par la communauté.
Après avoir exploré plusieurs catégories, j’ai choisi de me concentrer sur des figurines, car elles permettent de tester à la fois :
-
les détails,
-
les volumes,
-
et la stabilité à l’impression.
C’est dans ce cadre que j’ai sélectionné le modèle : “Minecraft Baby Creeper”, conçu par l’utilisateur Shark Byte.
Ce choix s’explique par :
-
sa forme simple mais détaillée,
-
sa taille réduite,
-
son aspect ludique, idéal pour une première prise en main.
3. Importation dans le slicer
Le fichier STL du Baby Creeper a été téléchargé depuis Printables puis importé dans le logiciel PrusaSlicer.
Une fois le modèle chargé :
-
il a été automatiquement positionné sur le plateau,
-
ses dimensions ont été vérifiées,
-
et son orientation n’a pas été modifiée afin de conserver sa stabilité.
Dimensions globales du modèle :
-
X : 114,41 mm
-
Y : 100,69 mm
-
Z : 24 mm
4. Choix des réglages d’impression
L’objectif était d’obtenir une figurine :
-
suffisamment robuste,
-
avec un temps d’impression raisonnable.
Les réglages suivants ont été sélectionnés :
| Paramètre | Valeur |
|---|---|
| Profil | 0.15 mm SPEED |
| Filament | Generic PLA |
| Imprimante | Original Prusa MK4S HF0.4 nozzle |
| Supports | Seulement pour les générateurs de supports |
| Remplissage | 15 % |
| Bordure (brim) | Désactivée |
Ces réglages permettent un bon compromis entre qualité, solidité et rapidité.
5. Conclusion de la séance
Cette séance m’a permis de :
-
comprendre le rôle d’un slicer,
-
manipuler un modèle 3D,
-
choisir des paramètres adaptés,
-
et préparer un fichier pour l’impression.
Elle constitue une première étape essentielle avant de passer à des objets plus complexes et à des conceptions originales lors des séances suivantes.
Séance 2
// Paramètres
$fn = 60; // Résolution (augmente à 100 pour une finition plus lisse)
diametre_interieur = 20;
epaisseur_cage = 3;
espace_jeu = 2; // L'espace pour que la boule bouge librement
// 1. La sphère intérieure (libre)
sphere(d = diametre_interieur);
// 2. La cage extérieure
difference() {
// Sphère externe de la cage
sphere(d = diametre_interieur + (epaisseur_cage * 2) + (espace_jeu * 2));
// On vide l'intérieur pour laisser la place à la boule
sphere(d = diametre_interieur + (espace_jeu * 2));
// On crée des ouvertures pour voir la boule et prouver qu'elle est prisonnière
// Trous sur l'axe X
rotate([0, 90, 0])
cylinder(h = 100, d = 15, center = true);
// Trous sur l'axe Y
rotate([90, 0, 0])
cylinder(h = 100, d = 15, center = true);
// Trous sur l'axe Z
cylinder(h = 100, d = 15, center = true);
}
Séance 3 - Tour de Chute Libre "Spiral Hourglass"
1. Description du projet
Ce projet consiste en la modélisation et la fabrication d'un objet cinétique de type "fidget" : un sablier à spirale. Une bille d'acier descend par gravité le long d'une trajectoire hélicoïdale creusée dans un volume en forme d'hyperboloïde, le tout enfermé dans une coque externe transparente ou évidée.
Objectifs :
-
Étudier la géométrie complexe de l'objet (surfaces courbes et trajectoires hélicoïdales).
-
Réaliser une rétro-ingénierie d'un modèle existant pour le rendre paramétrique.
-
Fabriquer l'objet en impression 3D sans supports.
2. Analyse Technique et Modélisation
Pour dépasser la simple impression de fichiers STL figés, j'ai opté pour une re-conception paramétrique sous OpenSCAD. Cela permet de modifier la taille de la bille, la vitesse de chute (nombre de tours) et les tolérances d'impression.
2.1 Concepts Géométriques
L'objet repose sur deux primitives mathématiques principales :
-
L'Hyperboloïde à une nappe (Le corps) : La forme de "sablier" n'est pas deux cônes, mais une structure continue qui permet une transition fluide pour la bille.
-
L'Hélice (La trajectoire) : La rainure suit une courbe hélicoïdale dont le rayon varie en fonction de la hauteur ($Z$).
2.2 Le Code Paramétrique (OpenSCAD)
Le script suivant génère dynamiquement le noyau interne (Inner Core) et la coque externe (Outer Shell) en s'assurant qu'ils s'emboîtent parfaitement grâce à une variable de clearance (jeu fonctionnel).
Caractéristiques du code :
-
Utilisation de la fonction
hull()itérative pour creuser le chemin de la bille proprement. -
Calcul dynamique du rayon pour suivre la courbure du sablier.
-
Séparation automatique des pièces pour l'export STL.
// Spiral Hourglass Fidget
/* [General Dimensions] */
total_height = 80; // Total height of one segment
max_diameter = 40; // Width at top/bottom
min_diameter = 20; // Width at the narrow waist
wall_thickness = 1.6; // Thickness of the outer shell
clearance = 0.3; // Gap between inner and outer parts
/* [Ball & Path] */
ball_diameter = 9.5; // Size of the ball (standard steel marble)
groove_depth_ratio = 0.6; // How deep the ball sits in the inner core (0-1)
twists = 2.0; // Number of spiral rotations
resolution = 100; // Steps for the spiral generation (Higher = smoother but slower)
/* [Rendering] */
part_to_show = "both"; // [both, inner, outer]
$fn = 60; // Resolution for cylinders/spheres
// --- Derived Calculations ---
R_max = max_diameter / 2;
R_min = min_diameter / 2;
path_radius_offset = (ball_diameter / 2) + 0.5; // Distance from surface for cutting groove
// --- Main Logic ---
if (part_to_show == "inner" || part_to_show == "both") {
translate([-max_diameter/1.5, 0, 0])
Inner_Core();
}
if (part_to_show == "outer" || part_to_show == "both") {
translate([max_diameter/1.5, 0, 0])
Outer_Shell();
}
// --- Modules ---
module Inner_Core() {
difference() {
// 1. The main hourglass body
hourglass_solid(h=total_height, r_start=R_max, r_mid=R_min - clearance);
// 2. The Helical Groove
// We subtract a trail of spheres to make the path
spiral_path(
h=total_height,
r_start=R_max - clearance,
r_mid=R_min - clearance,
turns=twists,
cut_r=ball_diameter/2 + 0.2
);
// 3. Central alignment hole (optional, saves plastic)
cylinder(h=total_height*3, r=4, center=true);
}
}
module Outer_Shell() {
difference() {
// 1. Outer Surface
hourglass_solid(h=total_height, r_start=R_max + wall_thickness, r_mid=R_min + wall_thickness);
// 2. Inner Surface (Hollow out)
// Make slightly larger than the core for clearance
translate([0,0,-0.1])
hourglass_solid(h=total_height + 0.2, r_start=R_max, r_mid=R_min);
// 3. Windows (Optional - lets you see the ball)
// Remove the asterisks below to enable windows
/*
for(i=[0:3]) {
rotate([0,0,i*90])
translate([0,0,total_height/2])
cube([max_diameter*2, 5, total_height*0.6], center=true);
}
*/
}
}
// --- Helper Functions ---
// Generates the Hourglass Body Shape using a Hyperboloid approximation
module hourglass_solid(h, r_start, r_mid) {
// We construct this by stacking thin cylinders to approximate the curve
// This is robust and works without external libraries
step = h / resolution;
union() {
for (i = [0 : resolution - 1]) {
z = i * step;
// Radius at current height Z
r1 = get_radius(z, h, r_start, r_mid);
// Radius at next height
r2 = get_radius(z + step, h, r_start, r_mid);
translate([0, 0, z])
cylinder(h=step, r1=r1, r2=r2);
}
}
}
// Generates the helical cut for the ball
module spiral_path(h, r_start, r_mid, turns, cut_r) {
step_angle = (turns * 360) / resolution;
step_z = h / resolution;
for (i = [0 : resolution - 1]) {
z1 = i * step_z;
ang1 = i * step_angle;
rad1 = get_radius(z1, h, r_start, r_mid);
z2 = (i + 1) * step_z;
ang2 = (i + 1) * step_angle;
rad2 = get_radius(z2, h, r_start, r_mid);
hull() {
translate([rad1 * cos(ang1), rad1 * sin(ang1), z1])
sphere(r=cut_r);
translate([rad2 * cos(ang2), rad2 * sin(ang2), z2])
sphere(r=cut_r);
}
}
}
// Mathematical function for the hourglass curve (Parabolic/Hyperbolic curve)
function get_radius(z, h, r_outer, r_inner) =
let (
// Map Z (0 to h) to -1 to 1
normalized_z = (z - h/2) / (h/2),
// Calculate curve factor (x^2 parabola for simple hourglass)
factor = pow(normalized_z, 2)
)
r_inner + (r_outer - r_inner) * factor;
3. Fabrication
3.1 Paramètres d'Impression (Slicer)
Le modèle est conçu pour être imprimé sans supports, grâce à l'angle progressif de la spirale.
-
Imprimante : Prusa i3 MK3S / MK4 (selon ce que tu as utilisé).
-
Matériau : PLA (pour la rigidité et la précision dimensionnelle).
-
Buse : 0.4mm.
-
Hauteur de couche : 0.2mm (Qualité standard).
-
Remplissage (Infill) : 15% Gyroid (suffisant pour la résistance mécanique).
-
Supports : AUCUN (Impératif pour que la bille roule bien, les supports laisseraient des résidus dans la rainure).
-
Adhérence : Une bordure (Brim) de 5mm est recommandée pour la coque externe (Outer Shell) car la surface de contact est fine.
3.2 Post-Traitement et Assemblage
-
Nettoyage : Retrait de la bordure (brim) au cutter.
-
Test à sec : Insertion de la bille pour vérifier qu'elle roule sans accrocs dans la rainure interne.
-
Assemblage : La coque externe glisse sur le noyau interne. Si le jeu est trop serré, un léger ponçage des arêtes internes peut être nécessaire (ou ajuster la variable
clearancedans le code à 0.4).
4. Retours d'expérience
-
Problème rencontré : Lors du premier test, la bille se bloquait à mi-parcours.
-
Analyse : La tolérance entre la bille et la rainure était trop juste (0.1mm), et les imperfections de l'impression (Z-seam) créaient des frictions.
-
Solution : Modification du code pour augmenter le diamètre de découpe (
cut_r = ball_diameter/2 + 0.2) et augmentation de la résolution$fnpour lisser la courbe.






