Stanislas Castella-Soeters
M1 Management de l'innovation de l'innovation : 2025 - 2026
stanislas.castella-soeters@etu.sorbonne-universite.fr
Exercise 1 - Impression test : Marque page chat, (16 décembre 2025 - 9 janvier 2026)
Impression test - Marque page en 3D
Exercise 2 - Impression d'un objet plus complexe : Sifflet (
Exercise 3 - Impression d'un objet modélisé sur OpenScad : Maracas avec 4 billes (6 Février 2026)
/* [General Settings] */
// Select what to render
mode = "view_all"; // [view_all, print_half_1, print_half_2, print_tiny_spheres]
/* [Dimensions] */
/* [Détails de la maracas] */
// Longueur total de la maracas (mm)
rattle_length = 100; // [80:150]
// Diamètre de la sphère de la maracas (mm)
head_diameter = 45; // [30:80]
// Diamètre de la poignée (mm)
handle_diameter = 12; // [8:25]
// Épaisseur des parois du maracas (mm).
wall_thickness = 2.4;
/* [Détails des quatres billes] */
// Number of tiny spheres
sphere_count = 4;
// Wall thickness for the tiny spheres
sphere_wall = 0.8;
// Distance to move spheres away from the rattle body
sphere_distance_from_body = 20;
/* [Detail] */
// Smoothness of the curves
$fn = 100;
// --- Calculated Values ---
tiny_sphere_size = head_diameter / 5;
// --- Geometry Modules ---
module rattle_body() {
// We group the geometry and move it UP so the bottom touches Z=0
translate([0, 0, handle_diameter/2])
union() {
// 1. The Hollow Head
translate([0, 0, rattle_length - (head_diameter/2)])
difference() {
sphere(d = head_diameter);
sphere(d = head_diameter - (wall_thickness * 2));
}
// 2. The Handle
cylinder_height = rattle_length - (head_diameter/2) + 2;
translate([0,0,0])
union() {
cylinder(h = cylinder_height, d = handle_diameter);
// The bottom cap
sphere(d = handle_diameter);
}
}
}
module tiny_spheres_set() {
// Generate the row of spheres
for (i = [0 : sphere_count-1]) {
// X spacing: diameter + 5mm gap
x_pos = i * (tiny_sphere_size + 5);
// Z position: Lift up by radius so the bottom touches 0
z_pos = tiny_sphere_size / 2;
translate([x_pos, 0, z_pos])
difference() {
sphere(d = tiny_sphere_size);
sphere(d = tiny_sphere_size - (sphere_wall * 2));
}
}
}
// --- Rendering Logic ---
if (mode == "view_all") {
// 1. Render the Rattle (Base is at Z=0 inside the module)
rattle_body();
// 2. Render the Tiny Spheres
// We move them to the right of the rattle head
translate([head_diameter/2 + sphere_distance_from_body, 0, 0])
tiny_spheres_set();
}
else if (mode == "print_half_1") {
// Lay rattle flat for printing (Left Half)
rotate([0, 90, 0])
difference() {
// We must undo the "standing" translation to rotate it correctly around center
translate([0,0,-handle_diameter/2]) rattle_body();
translate([-500, -1000, -500]) cube([1000, 2000, 1000]);
}
}
else if (mode == "print_half_2") {
// Lay rattle flat for printing (Right Half)
rotate([0, -90, 0])
difference() {
translate([0,0,-handle_diameter/2]) rattle_body();
translate([-500, -1000, -500]) cube([1000, 2000, 1000]);
}
}
else if (mode == "print_tiny_spheres") {
// Render the spheres sitting on the bed
tiny_spheres_set();
}


