Elio Antoun
Séance 1 - Découverte de l'impression 3D : Minecraft Baby Creeper Figurine
1. La Recherche
J'ai recherché sur le web une base de donnée de modèles 3D prêt à imprimer. Je suis tombé sur le site printables.com.
J'ai décidé de baser ma recherche sur des figurines, je suis tombé sur le modèle de Baby Creeper
Choix des réglages optimisés pour assurer un modèle assez robuste avec un temps d'impression rapide.
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 - Spiral Hourglass Fidget
// Spiral Hourglass Fidget / Freefall Tower
// Recreating the mechanism from the provided files
/* [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;




