# ILBER GOKAL

<span style="background-color: rgb(251, 238, 184);">**Séance 1: 16/12/2025 : Découverte de l'impression 3D à partir d'un modèle existant - Ghastling Articulated Desk Toy**</span>

**Objectifs :**

- Se familiariser avec les principes de base de l’impression 3D à partir d’un fichier numérique déjà conçu.
- Identifier le rôle du logiciel de slicing et analyser l’impact des principaux paramètres sur le résultat final.
- Comprendre la gestion de densités de remplissage différentes sur un même plateau pour optimiser la légèreté et la solidité.

**Présentation du projet :** Dans le cadre de ce projet, l’objectif était de réaliser un "Ghastling" (bébé Ghast), un mob issu de la mise à jour Minecraft "Chase the Skies". Contrairement aux modèles précédents, ce projet introduit une dimension mécanique avec des pattes amovibles à clipser ("snap-on"). Ce choix permet de tester la précision dimensionnelle de l'imprimante pour l'assemblage de pièces séparées, ainsi que l'utilisation de réglages avancés comme l'étirage (ironing) pour améliorer la finition de surface.

**Matériel et logiciel utilisés :**

- **Logiciel de slicing :** PrusaSlicer
- **Imprimante 3D :** Original Prusa MK4S
- **Technologie :** FFF
- **Matériel :** PLA

**Processus d'impression :** Le modèle du Ghastling a été importé dans PrusaSlicer. Pour garantir un assemblage parfait et une esthétique optimale, les paramètres suivants ont été appliqués :

- **Orientation :** Face vers le haut (pour la netteté des détails du visage)
- **Température de la buse :** 200 °C
- **Température du plateau :** 60 °C
- **Taux de remplissage (infill) :** 5 % pour le corps (légèreté) et 30 % pour les pattes (solidité)
- **Adhérence :** Bordure (brim) de 5 mm
- **Supports :** Aucun
- **Option de finition :** Étirage (ironing) activé sur la surface supérieure du visage.
- **Temps d’impression estimé :** environ 1 heure

**Résultats et observations :** L'impression s'est déroulée sans encombre. L'utilisation de la bordure (brim) a été déterminante pour maintenir les pattes en place durant toute l'opération. L'option d'étirage (ironing) a permis d'obtenir une surface très lisse sur le dessus de la tête, masquant efficacement les lignes de couches visibles sur les projets précédents. L'assemblage des pattes par clipsage s'est fait sans forcer, validant la précision des réglages et de la machine.

**Conclusion :** Ce projet a permis d'approfondir la maîtrise de PrusaSlicer en manipulant des densités de remplissage variables. Le Ghastling démontre que l'impression 3D permet non seulement de créer des objets décoratifs, mais aussi des jouets articulés fonctionnels avec une finition de surface proche d'un produit industriel.

**Première tentative infructueuse :**

[![IMG_7284.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/scaled-1680-/img-7284.jpg)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/img-7284.jpg)

**Objet terminé :**

[![IMG_7956.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/scaled-1680-/img-7956.jpg)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/img-7956.jpg)

[![A5B001C2-FC65-4795-B7C6-FBC554E2ECEE.JPG](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/scaled-1680-/a5b001c2-fc65-4795-b7c6-fbc554e2ecee.JPG)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/a5b001c2-fc65-4795-b7c6-fbc554e2ecee.JPG)

**Exercice 2 : Création d’un objet en mobilisant un maximum de fonctions OpenSCAD** **Sifflet à bille (Survival Whistle) – Objet Print-in-Place**

**Objectifs :**

- Utiliser la modélisation paramétrique pour créer une chambre de résonance acoustique.
- Maîtriser les fonctions de soustraction pour créer un conduit d'air (fente) et une sortie (fenêtre).
- Concevoir un élément mobile interne (bille) imprimé directement en position libre (Print-in-Place).
- Ajuster les tolérances pour garantir que la bille se détache après l'impression.

**Contexte du projet :** Pour cet exercice, j'ai conçu un sifflet monobloc. La difficulté réside dans la partie supérieure : la "lèvre" (labium) doit être assez fine pour diviser le flux d'air et créer un son, tandis que la bille intérieure doit rester parfaitement sphérique sans coller aux parois. Le paramètre clé est la **clearance = 0.4 mm** autour de la bille centrale.

// --- PARAMÈTRES (MODIFIABLES) ---  
$fn = 100; // Haute résolution pour l'acoustique  
d\_exterieur = 20; // Diamètre du sifflet  
largeur\_bec = 15; // Largeur de l'embout buccal  
longueur\_bec = 20; // Longueur de l'embout  
epaisseur = 1.5; // Épaisseur des parois  
d\_bille = 8; // Diamètre de la bille interne (la "pea")  
clearance = 0.4; // Jeu pour que la bille ne colle pas

union() {  
 difference() {  
 union() {  
 cylinder(d = d\_exterieur, h = d\_exterieur, center = true);  
 translate(\[longueur\_bec/2 + 5, 0, 0\])  
 cube(\[longueur\_bec, largeur\_bec, d\_exterieur\], center = true);  
 } sphere(d = d\_exterieur - (epaisseur \* 2));

 translate(\[longueur\_bec/2 + 5, 0, 0\])  
 cube(\[longueur\_bec + 2, largeur\_bec - 4, 3\], center = true);

   
 translate(\[8, 0, 5\])  
 rotate(\[0, -45, 0\])  
 cube(\[10, largeur\_bec - 2, 10\], center = true);  
 } color("Red")   
 translate(\[0, 0, - (d\_exterieur/2 - epaisseur - d\_bille/2) + clearance\])  
 sphere(d = d\_bille);  
}

**Paramètres principaux :**

- Diamètre du sifflet : 20 mm
- Diamètre de la bille interne : 8 mm
- Jeu mécanique (Clearance) : 0.4 mm
- Épaisseur de paroi : 1.5 mm
- Résolution ($fn) : 100 (pour une étanchéité à l'air maximale)

**Matériaux / Outils / Logiciels :**

- **Modélisation :** OpenSCAD
- **Slicer :** PrusaSlicer
- **Imprimante :** Original Prusa MK4S
- **Filament :** PLA (Orange pour la visibilité)
- **Température buse :** 210 °C (Température réduite pour éviter la fusion de la bille)
- **Infill :** 15%
- **Supports :** Aucun (le sifflet est conçu pour s'auto-supporter)

**Étapes de fabrication :**

1. Écriture du code OpenSCAD avec une attention particulière sur l'angle de la lèvre (45°).
2. Exportation STL et vérification de l'étanchéité du maillage.
3. Placement vertical sur le plateau dans PrusaSlicer.
4. Lancement de l'impression.
5. Post-traitement : Utilisation d'un petit tournevis pour "libérer" la bille interne collée par les micro-supports de la première couche.

**Problèmes rencontrés lors de l’impression :** Le principal défi a été le **"Bridging"** (pontage) sur le dessus de la chambre interne. Si le filament s'affaisse trop, il peut tomber sur la bille et la bloquer définitivement.

- **Cause probable :** Vitesse de refroidissement insuffisante sur les couches de fermeture.
- **Solution :** Augmenter la ventilation (fan speed) à 100% lors du passage sur le vide de la chambre.

**Améliorations envisagées :**

- Ajouter un anneau d'attache (keychain loop) via une fonction `torus` ou `difference` de cylindres.
- Réduire la hauteur de couche à 0.10 mm pour rendre la lèvre du sifflet plus tranchante et le son plus strident.

**Conclusion :** Ce projet démontre qu'OpenSCAD permet de créer des objets dont la complexité est interne. Le sifflet est un excellent test de **précision pneumatique** : une simple fuite d'air due à une mauvaise fusion des couches rendrait l'objet inutile. C'est l'équilibre parfait entre géométrie simple et fonction mécanique complexe.

**Objet terminé :**

Voici une réécriture harmonisée de vos exercices Arduino, en conservant la structure rigoureuse de vos comptes-rendus précédents (Objectifs, Matériel, Montage, Code, Analyse).

## Exercice 4 : Pilotage de sorties numériques – Clignotement alterné de deux LEDs

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-exercice-4-%3A-pilotag-1" inline-copy-host="">Exercice 4 : Pilotage de sorties numériques – Clignotement alterné de deux LEDs</div>### Objectif

L'objectif de cet exercice est de maîtriser le contrôle de plusieurs sorties numériques indépendantes sur une carte Arduino. Contrairement à un clignotement synchrone, ce programme impose un cycle alterné entre deux LEDs, simulant un système de balisage simple.

### Matériel utilisé

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-microcontr%C3%B4leur-%3A-ar" inline-copy-host="">- **Microcontrôleur :** Arduino Uno
- **Composants :** 2 LEDs, 2 résistances de 220 <span class="math-inline" data-index-in-node="42" data-math="\Omega">$\\Omega$</span>
- **Interface :** Breadboard et fils de connexion
- **Logiciels :** Arduino IDE &amp; TinkerCAD (simulation)

</div>### Montage du circuit

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-c%C3%A2blage-des-anodes-%3A" inline-copy-host="">1. **Câblage des anodes :** La LED 1 est connectée à la broche numérique **13** et la LED 2 à la broche **12**.
2. **Protection :** Une résistance de 220 <span class="math-inline" data-index-in-node="35" data-math="\Omega">$\\Omega$</span> est placée en série sur chaque LED pour limiter l'intensité du courant sous 5 V.
3. **Masse commune :** Les cathodes sont reliées au rail **GND** de l'Arduino.

</div>### Code source

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk--3" inline-copy-host=""></div><div _ngcontent-ng-c2446650269="" class="code-block ng-tns-c2446650269-88 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwip84O-rf-SAxUAAAAAHQAAAAAQjQI" decode-data-ved="1" id="bkmrk-c%2B%2B" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_dc00bd21e7b95da3","c_7dd1d89c08719962",null,"rc_ef7091df0d254b6c",null,null,"fr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2446650269="" class="code-block-decoration header-formatted gds-title-s ng-tns-c2446650269-88 ng-star-inserted"><span class="ng-tns-c2446650269-88">C++</span><div _ngcontent-ng-c2446650269="" class="buttons ng-tns-c2446650269-88 ng-star-inserted"><button aria-label="Copier le code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c2446650269-88 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c2446650269="" class="formatted-code-block-internal-container ng-tns-c2446650269-88"><div _ngcontent-ng-c2446650269="" class="animated-opacity ng-tns-c2446650269-88"></div></div></div>```
void setup() {
  pinMode(13, OUTPUT); // Configuration de la LED 1
  pinMode(12, OUTPUT); // Configuration de la LED 2
}

void loop() {
  digitalWrite(13, HIGH); // Allume LED 1
  digitalWrite(12, LOW);  // Éteint LED 2
  delay(1000);            // Pause 1s
  
  digitalWrite(13, LOW);  // Éteint LED 1
  digitalWrite(12, HIGH); // Allume LED 2
  delay(1000);            // Pause 1s
}

```

<div _ngcontent-ng-c2446650269="" class="code-block ng-tns-c2446650269-88 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwip84O-rf-SAxUAAAAAHQAAAAAQjQI" decode-data-ved="1" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_dc00bd21e7b95da3","c_7dd1d89c08719962",null,"rc_ef7091df0d254b6c",null,null,"fr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2446650269="" class="formatted-code-block-internal-container ng-tns-c2446650269-88"><div _ngcontent-ng-c2446650269="" class="animated-opacity ng-tns-c2446650269-88"></div></div></div><div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk--5" inline-copy-host=""></div>### Analyse et Résultats

Le cycle de boucle (`loop`) permet un basculement d'état binaire entre les deux broches. L'utilisation de la fonction `delay()` bloque le processeur pendant 1000 ms, ce qui est suffisant pour ce projet mais limite la réactivité du système pour des tâches plus complexes. Le résultat obtenu est une alternance parfaite et régulière des deux sources lumineuses.

## Exercice 5 : Acquisition de données et signalisation – Capteur ultrasonique HC-SR04

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk--6" inline-copy-host=""></div><div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-exercice-5-%3A-acquisi-1" inline-copy-host="">Exercice 5 : Acquisition de données et signalisation – Capteur ultrasonique HC-SR04</div>### Objectif

Cet exercice vise à intégrer un capteur d'entrée (Input) pour piloter des actionneurs de sortie (Output). Il s'agit de convertir un signal physique (onde sonore) en une donnée numérique (distance en cm) afin de créer un système de signalisation visuelle par paliers.

### Matériel utilisé

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-capteur-%3A-ultrasoniq" inline-copy-host="">- **Capteur :** Ultrasonique HC-SR04
- **Signalisation :** 3 LEDs (Verte, Jaune, Rouge) + 3 résistances 220 <span class="math-inline" data-index-in-node="65" data-math="\Omega">$\\Omega$</span>
- **Microcontrôleur :** Arduino Uno

</div>### Montage du circuit

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-capteur-%3A-vcc-%285v%29%2C-" inline-copy-host="">- **Capteur :** VCC (5V), GND (GND), **Trig (A0)**, **Echo (A1)**.
- **LEDs :** Connectées aux broches **11, 12 et 13**.
- **Principe :** Le capteur utilise les broches analogiques A0/A1 configurées ici en mode numérique pour déclencher et lire l'écho.

</div>### Algorithme et Calcul

Le système repose sur la vitesse du son dans l'air (<span class="math-inline" data-index-in-node="52" data-math="v \approx 343 \text{ m/s}">$v \\approx 343 \\text{ m/s}$</span> ou <span class="math-inline" data-index-in-node="81" data-math="0,0343 \text{ cm/µs}">$0,0343 \\text{ cm/µs}$</span>). La distance est obtenue par la formule :

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-%24%24d-%3D-%5Cfrac%7Bt-%5Ctimes" inline-copy-host=""><div data-path-to-node="23"><div class="math-block" data-math="d = \frac{t \times 0,0343}{2}">$$d = \frac{t \times 0,0343}{2}$$</div></div></div>*(Le diviseur 2 correspond au trajet aller-retour de l'onde).*

### Code source

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk--7" inline-copy-host=""></div><div _ngcontent-ng-c2446650269="" class="code-block ng-tns-c2446650269-89 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwip84O-rf-SAxUAAAAAHQAAAAAQjgI" decode-data-ved="1" id="bkmrk-c%2B%2B-1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_dc00bd21e7b95da3","c_7dd1d89c08719962",null,"rc_ef7091df0d254b6c",null,null,"fr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2446650269="" class="code-block-decoration header-formatted gds-title-s ng-tns-c2446650269-89 ng-star-inserted"><span class="ng-tns-c2446650269-89">C++</span><div _ngcontent-ng-c2446650269="" class="buttons ng-tns-c2446650269-89 ng-star-inserted"><button aria-label="Copier le code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c2446650269-89 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c2446650269="" class="formatted-code-block-internal-container ng-tns-c2446650269-89"><div _ngcontent-ng-c2446650269="" class="animated-opacity ng-tns-c2446650269-89"></div></div></div>```
long readUltrasonicDistance(int triggerPin, int echoPin) {
  pinMode(triggerPin, OUTPUT);
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  pinMode(echoPin, INPUT);
  return pulseIn(echoPin, HIGH);
}

void setup() {
  pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT);
}

void loop() {
  float distance = 0.01723 * readUltrasonicDistance(A0, A1);

  // Logique de signalisation
  digitalWrite(11, (distance > 100) ? HIGH : LOW);
  digitalWrite(12, (distance > 50 && distance <= 100) ? HIGH : LOW);
  digitalWrite(13, (distance > 20 && distance <= 50) ? HIGH : LOW);
  
  delay(10); // Stabilité de lecture
}

```

<div _ngcontent-ng-c2446650269="" class="code-block ng-tns-c2446650269-89 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwip84O-rf-SAxUAAAAAHQAAAAAQjgI" decode-data-ved="1" id="bkmrk--8" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_dc00bd21e7b95da3","c_7dd1d89c08719962",null,"rc_ef7091df0d254b6c",null,null,"fr",null,1,null,null,1,0]]"><div _ngcontent-ng-c2446650269="" class="formatted-code-block-internal-container ng-tns-c2446650269-89"><div _ngcontent-ng-c2446650269="" class="animated-opacity ng-tns-c2446650269-89"></div></div></div><div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk--9" inline-copy-host=""></div>### Analyse et Conclusion

La simulation sur TinkerCAD a validé la logique des seuils avant le passage au réel. Le système réagit en temps réel :

<div _ngcontent-ng-c4117132306="" aria-busy="false" aria-live="polite" class="markdown markdown-main-panel stronger enable-updated-hr-color preserve-whitespaces-in-response" dir="ltr" id="bkmrk-zone-de-s%C3%A9curit%C3%A9-%28%3E-" inline-copy-host="">1. **Zone de sécurité (&gt; 100 cm) :** LED 1 active.
2. **Zone d'approche (50-100 cm) :** LED 2 active.
3. **Zone critique (20-50 cm) :** LED 3 active.
    
    Ce projet démontre l'efficacité d'Arduino pour transformer une mesure invisible (ultrasons) en une information visuelle exploitable pour un utilisateur.

</div>[![f29f2e8d-9fcc-4cc2-b8c7-b8087e7c7583.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/scaled-1680-/f29f2e8d-9fcc-4cc2-b8c7-b8087e7c7583.jpg)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/f29f2e8d-9fcc-4cc2-b8c7-b8087e7c7583.jpg)

[![IMG_7294 2.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/scaled-1680-/img-7294-2.jpg)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/img-7294-2.jpg)

[![967f8f25-5e7a-4ea5-9307-1a5d7905f639.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/scaled-1680-/967f8f25-5e7a-4ea5-9307-1a5d7905f639.jpg)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2026-03/967f8f25-5e7a-4ea5-9307-1a5d7905f639.jpg)