Nina SCHWALD
M1 Management de l'Innovation - Nina SCHWALD - Nina.Schwald@etu.sorbonne-universite.fr
1) Introduction à l'impression 3D
Séance 1 - 16/12/2025
Objectifs :
Découvrir l'impression 3D à partir d'un modèle existant
- Se familiariser avec les bases de l'impression 3D en utilisant un modèle digital existant.
- Comprendre comment utiliser le logiciel PrusaSlicer et évaluer l'influence de ses paramètres sur le résultat final.
Outils :
- Logiciel de slicing : PrusaSlicer
- Imprimante 3D : Original Prusa MK4S
- Matériel : PLA Filament
Procédure :
- Télécharger le fichier STL depuis Internet
- Importer le fichier STL dans PrusaSlicer
- Définir les paramètres (voir image)
- Slicer le fichier
- Exporter le fichier bgcode et l'enregistrer sur une clé USB
- Sélectionner le fichier sur l'imprimante 3D et lancer l'impression
Documentation :
Le résultat souhaité : "Sleepy Fat Cat"
(téléchargé depuis Makerworld: https://makerworld.com/de/models/1294114-sleepy-fat-cat?from=search#profileId-1342819)
J'ai opté pour une forme plus complexe afin de pouvoir analyser les limites de l'imprimante 3D.
Le chat que j'ai choisi comporte des éléments très fins (comme les pattes et la queue) et a tendance à glisser pendant l'impression, ce qui m'a permis de tester le système de supports.
L'objectif était de tester activement les limites de l'imprimante, plutôt que de choisir un objet simple.
Modèle importé dans PrusaSlicer :
Paramètres:
Le résultat obtenu (avec support) :
Le résultat final (sans support) :
Observation
Le torse du chat est bien réussi. Les traits délicats du visage sont clairement reconnaissables.
Les couches d'impression sont nettement visibles sur le corps dans les zones plates (nuque et épaule droite).
Des structures de soutien importantes sous le ventre et les pattes ont été nécessaires pour stabiliser les parties en surplomb, et elles ont pu être retirées sans difficulté.
Le plus gros problème a été le déplacement du modèle pendant l'impression. Seule la patte avant droite est correctement imprimée, la patte arrière droite est à moitié manquante et les deux pattes gauches sont fortement décalées. De fins fils se sont formés aux endroits décalés ainsi qu'à l'extrémité de la queue (Stringing).
Interpretation
Les couches d'impression visibles sur le corps du chat sont dues au profil de vitesse choisi. Une hauteur de couche plus fine, de 0,10 mm au lieu de 0,15 mm, aurait rendu la surface plus lisse, au prix d'un temps d'impression plus long.
Le déplacement du modèle est le problème central de cette impression. Il explique à la fois les pattes manquantes et décalées, ainsi que le stringing apparu aux endroits concernés. Le profil « Speed » augmente les vibrations de la tête d'impression, ce qui favorise le glissement sur un modèle à petite surface de contact. Un brim activé aurait amélioré l'adhérence sur le plateau d'impression et probablement empêché le déplacement. Une autre orientation du modèle sur le plateau d'impression aurait également permis d'agrandir la surface de contact et de rendre le modèle plus stable.
Conclusion
Cette première expérience avec l'impression 3D a montré à quel point le choix des paramètres dans PrusaSlicer influence directement le résultat. Le choix d'un modèle complexe comme le chat endormi était délibéré, afin de ne pas se contenter d'une compréhension théorique de ces paramètres, mais d'en observer directement les effets sur le résultat. Cela a fonctionné : le décalage, le stringing et les couches visibles sont tous imputables aux réglages et auraient pu être évités grâce à des ajustements ciblés.
J'ai appris que l'impression 3D est un processus itératif. Une première impression donne rarement un résultat parfait ; elle montre surtout ce qu'il faut ajuster lors de la prochaine tentative. Les erreurs de cette impression ne sont donc pas un échec, mais une étape d'apprentissage.
Pour une prochaine tentative, il serait judicieux d'utiliser le profil « 0,10 mm DETAIL » (si l'on dispose de suffisamment de temps), d'activer le brim et de tester un autre alignement du modèle sur le plateau d'impression. Ces trois ajustements suffiraient à eux seuls à améliorer considérablement le résultat.
2) - Imprimer son propre modèle 3D
Séance 2 - 09/01/2026
Objectifs :
Concevoir et imprimer un modèle 3D qui bouge.
- Comprendre les avantages de Print-in-Place à l'aide d'un exemple.
Outils :
- Logiciel permettant de décrire des modèles 3D à l'aide de code : OpenSCAD
- Logiciel de slicing : PrusaSlicer
- Imprimante 3D : Original Prusa MK4S
- Matériel : PLA Filament
Procédure :
- Télécharger le logiciel OpenSCAD
- Écrire le code dans OpenSCAD
- Rendu dans OpenSCAD
- Exporter au format STL
- Importer le fichier STL dans PrusaSlicer
- Définir les paramètres
- Slicer le fichier
- Exporter le fichier bgcode et l'enregistrer sur une clé USB
- Sélectionner le fichier sur l'imprimante 3D et lancer l'impression
Documentation :
Le modèle que j'ai imaginé se compose d'un axe vertical doté d'embouts fixes plus larges et d'un anneau mobile monté sur cet axe.
Il sera intéressant de voir si l'imprimante parvient à éviter que l'anneau mobile ne fusionne avec l'axe, bien que l'ensemble soit imprimé d'un seul tenant.
OpenSCAD Modélisation
Fonctions utilisées :
difference() - Soustrait une ou plusieurs formes de la première forme.
cylinder() - Crée un cylindre. Prend h (hauteur) et r (rayon) comme paramètres.
translate() - Déplace une forme vers une nouvelle position. Prend un vecteur [x, y, z].
union() - Regroupe tous les éléments géométriques en un seul solide.
// PARAMETERS
$fn = 100; //number of straight fragments used to approximate circle
height = 50; //total height
top_d = 20; //diameter top & bottom cylinder
top_h = 3; //height top & bottom cylinder
shaft_d = 11.5; //diameter inner shaft
ring_outer = 19; //diameter outer ring
ring_inner = 12.00; //diameter inner ring
ring_h = 10; //height ring
// MODEL
union() {
// bottom cylinder
cylinder(d=top_d, h=top_h);
// inner shaft
translate([0,0,top_h])
cylinder(d=shaft_d, h=height-2*top_h);
// top cylinder
translate([0,0,height-top_h])
cylinder(d=top_d, h=top_h);
// movable middle ring
translate([0,0,(height-ring_h)/2]) //centers the ring vertically
difference() {
cylinder(d=ring_outer, h=ring_h);
translate([0,0,-1]) //this plus the h=ring_h+2 prevents rendering artifacts in OpenSCAD preview
cylinder(d=ring_inner, h=ring_h+2);
}
}
Modèle importé dans PrusaSlicer :
Modèle "sliced" dans PrusaSlicer :
Le résultat obtenu (avec support) :
Le résultat final (sans support) :
Observation
L'impression s'est déroulée avec succès. Les formes géométriques des cylindres sont reproduites avec précision. Les surfaces de l'axe et des embouts sont lisses et régulières. Des structures de support ont été nécessaires sous la bague centrale et l'embout supérieur. Celles-ci ont pu être retirées sans laisser de résidus après l'impression. La bague n'est pas soudée à l'axe. Elle peut être déplacée et tournée sans difficulté sur toute la longueur de l'arbre intérieur.
Interpretation
L'écart choisi de 0,5 mm entre le cylindre intérieur et le cylindre extérieur a permis une séparation nette des couches. Il serait intéressant de tester jusqu'à quel point cet écart peut être réduit pour que cela fonctionne encore et pour voir jusqu'où va la précision de l'imprimante. Avec un réglage de 0,15 mm pour le PLA, c'est probablement la limite. Contrairement à l'impression du chat, où le défi résidait dans les détails organiques et les structures de support complexes pour les surplombs, il n'y a eu ici aucun problème avec les structures de support. Celles-ci se sont détachées proprement et sans difficulté. Comme je savais que cette forme était moins complexe, j'ai conservé les mêmes réglages malgré les problèmes de stringing rencontrés avec le chat.
Conclusion
Ce projet a clairement démontré les possibilités offertes par l'impression 3D. Il était intéressant de constater qu'il est possible d'imprimer des objets qu'il serait impossible de réaliser par des moyens mécaniques. Un cylindre creux monté sur un axe avec un écart aussi faible que celui-ci ne pourrait pas être simplement fraisé ou moulé. L'impression 3D contourne ces limites grâce à la construction couche par couche.
3) Introduction à Arduino
Séance 3 - 16/01/2026 (Travail en groupe avec Toufic Bitar)
Objectif :
Se familiariser avec la programmation physique à l'aide de circuits électroniques simples.
- Comprendre comment utiliser le logiciel Arduino IDE et apprendre à programmer
Exercice 1 :
Objectif :
Réaliser un montage pour alimenter une LED et la faire allumer à l'aide d'un programme simple.
Outils :
- Carte Arduino Uno reliée par Câble USB
- Planche à pain
- LED
- Résistances (R)
- Fils de connexion
- Logiciel Arduino IDE
Le Montage
- Connectez pin 12 de l'Arduino à une colonne de la maquette.
- LED : placez l'anode (longue patte) dans la colonne connectée à pin 12.
- Connectez la résistance entre la cathode de la LED (patte courte) et la ligne de masse de la maquette.
- Connectez la broche GND de l'Arduino à cette même ligne de masse.
Le Code
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
digitalWrite(LED_BUILTIN, HIGH);
}
Exercise 2 :
Objectif :
Modifier le code pour que la LED s'allume et s'éteigne à intervalles réguliers.
Le Code
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Exercise 3 :
Objectif :
Modifier le circuit et le code de manière à ce que trois LEDs clignotent à des rythmes différents l'un après l'autre.
Outils :
- Carte Arduino Uno reliée par Câble USB
- Planche à pain
- 3 LEDs
- 3 Résistances (R)
- Fils de connexion
- Logiciel Arduino IDE
Le Montage
- Reliez la broche 13 de l'Arduino à une rangée libre de la maquette.
- Reliez une résistance de cette rangée à une nouvelle rangée.
- LED : insérez l'anode (longue patte) dans la nouvelle rangée de la résistance.
- Connectez la cathode (patte courte) à la barre bleue « - ».
- Répétez ces quatre étapes pour les broches 12 et 11.
- Connectez la broche GND de l'Arduino à la barre « - ».
Le Code
// Définition des broches utilisées pour les LEDs
int ledBluePin = 13;
int ledYellowFirstPin = 12;
int ledYellowSecondPin = 11;
// Configuration des broches comme sorties
void setup() {
pinMode(ledBluePin, OUTPUT);
pinMode(ledYellowFirstPin, OUTPUT);
pinMode(ledYellowSecondPin, OUTPUT);
}
// Fonction continue à l'infini
void loop() {
digitalWrite(ledBluePin, HIGH); // allume la LED bleue
delay(1000); // définit le délai d'attente (1000ms)
digitalWrite(ledBluePin, LOW); // éteint la LED bleue
digitalWrite(ledYellowFirstPin, HIGH); //...
delay(1500); // définit le délai d'attente (1500ms)
digitalWrite(ledYellowFirstPin, LOW);
digitalWrite(ledYellowSecondPin, HIGH);
delay(2000); // définit le délai d'attente (2000ms)
digitalWrite(ledYellowSecondPin, LOW);
}
Exercise 4 :
Objectif :
Modifier le circuit et le code de manière à ce que trois LED clignotent à des rythmes différents - mais cette fois-ci indépendamment les unes des autres.
Le Montage
Comme pour l'exercice 3
Le Code
// Définition des broches utilisées pour les LEDs
int ledBluePin = 13;
int ledYellowFirstPin = 12;
int ledYellowSecondPin = 11;
// Emplacements de mémoire pour les heures du dernier changement (au format unsigned long)
unsigned long previousMillisBlue = 0;
unsigned long previousMillisYellowFirst = 0;
unsigned long previousMillisYellowSecond = 0;
// Définition des intervalles
int intervalBlue = 1000;
int intervalYellowFirst = 2000;
int intervalYellowSecond = 3000;
// Configuration des broches comme sorties
void setup() {
pinMode(ledBluePin, OUTPUT);
pinMode(ledYellowFirstPin, OUTPUT);
pinMode(ledYellowSecondPin, OUTPUT);
}
// boucle infinie
void loop() {
unsigned long currentMillis = millis(); //millis() mesure le temps d'exécution actuel en ms
if (currentMillis - previousMillisBlue >= intervalBlue) { // Vérifier si l'heure actuelle - l'ancienne heure enregistrée >= l'intervalle défini
previousMillisBlue = currentMillis; // Si oui, l'heure actuelle est enregistrée comme nouveau point de départ
digitalWrite(ledBluePin, !digitalRead(ledBluePin)); // L'état actuel du courant au niveau de la broche est lu à l'aide de digitalRead(), puis inversé
}
// De même pour les autres LEDs...
if (currentMillis - previousMillisYellowFirst >= intervalYellowFirst) {
previousMillisYellowFirst = currentMillis;
digitalWrite(ledYellowFirstPin, !digitalRead(ledYellowFirstPin));
}
if (currentMillis - previousMillisYellowSecond >= intervalYellowSecond) {
previousMillisYellowSecond = currentMillis;
digitalWrite(ledYellowSecondPin, !digitalRead(ledYellowSecondPin));
}
}
4) Utilisation d'un capteur
Séance 4 - 30/01/2026 (Travail en groupe avec Toufic Bitar)
Objectif :
Construire un circuit et écrire un programme pour utiliser un capteur.
La LED doit s'allumer lorsqu'un obstacle se trouve devant le capteur et s'éteindre lorsqu'il n'y en a pas.
Outils :
- Carte Arduino Uno reliée par Câble USB
- Planche à pain
- LED
-
Capteur de distance infrarouge
- Résistances (R)
- Fils de connexion
- Logiciel Arduino IDE
Le Montage
- Reliez la broche GND de l'Arduino à la rangée bleue « - » de la maquette à l'aide d'un câble.
- Enfichez la LED bleue sur la maquette.
- Reliez une extrémité de la résistance à la rangée où se trouve la longue patte de la LED.
- Insérez l'autre extrémité de la résistance dans une rangée libre.
- Reliez la broche 13 de l'Arduino à cette extrémité libre de la résistance à l'aide d'un câble.
- Reliez la rangée de la patte courte de la LED à la barrette bleue « - » à l'aide d'un câble.
- Reliez la broche GND du capteur à la barrette bleue « - » à l'aide d'un câble.
- Connectez la broche VCC du capteur directement à la broche 5V de l'Arduino à l'aide d'un câble.
- Connectez la broche SIG du capteur directement à la broche 2 de l'Arduino à l'aide d'un câble.
- Connectez l'Arduino à votre ordinateur à l'aide du câble USB.
Le Code
// Définition des broches utilisées pour le LED et le capteur
int ledPin = 13;
int sensorPin = 2;
// Configuration de broche 13 comme sortie, broche 2 comme entrée de signal
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(sensorPin, INPUT);
}
// boucle infinie
void loop() {
int sensorState = digitalRead(sensorPin); // digitalRead() lit le signal au niveau de la broche du capteur - la valeur est enregistrée dans la variable sensorState
if (sensorState == LOW) { // Lorsque le capteur détecte un obstacle
digitalWrite(ledPin, HIGH); // LED allumée
} else { // Sinon
digitalWrite(ledPin, LOW); // LED éteinte
}
}


















No Comments