diff --git a/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json b/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json index 98fe951..adb187d 100644 --- a/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json +++ b/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json @@ -1 +1 @@ -{"uuid":"a9474a83-43b3-484c-950e-37a27ff663fe","slug":"game-watch-diy-fabrication","title":"Game & Watch DIY — Fabrication","author":"cedric@abonnel.fr","published":false,"published_at":"2026-05-13 18:08","created_at":"2026-05-13 18:12:54","updated_at":"2026-05-13 21:56:47","revisions":[],"cover":"","files_meta":{"9ae9bc58c13ca70c-56046.jpg":{"author":"","source_url":"https://images.freeimages.com/images/previews/9df/nature-1370816.jpg"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"fablab","content":"# Game & Watch DIY — Fabrication\n\n> Document de travail consolidant le prototypage Arduino, la conception du PCB sous KiCad, les règles de conception et la préparation des fichiers pour la CNC.\n\n---\n\n## 1. Rappel : prototypage\n\n### 1.1 Liste du matériel\n\n- 1 × Arduino Uno\n- 1 × écran LCD 16 broches (non I²C)\n- 3 × boutons poussoirs\n- 1 × buzzer\n- 1 × résistance 220 Ω\n- 1 × potentiomètre 10 kΩ *(facultatif — voir remarque ci-dessous)*\n\n### 1.2 Câblage\n\n**Écran LCD** — câblage identique au projet n° 11 du livre de référence ; consulter les pages 116 et 117 pour le détail des broches.\n\nUne variante sans potentiomètre a été testée (LCD branché directement à la masse) mais elle a été abandonnée.\n\n**Boutons poussoirs** — montés en pull-up interne :\n\n```\nGND → Poussoir → broches 7, 8, 9 (avec INPUT_PULLUP dans le code)\n```\n\nPour comprendre le principe du montage pull-up : \n\n**Buzzer** — deux broches : l'une à la masse, l'autre sur la broche 6 (qui assure également l'alimentation lors du pilotage par `tone()`). Voir notamment le projet n° 6, p. 71.\n\n### 1.3 Type de jeu\n\nJeu d'arcade type *Asteroids*.\n\n### 1.4 Code de référence\n\n```cpp\n#include \nLiquidCrystal lcd(12, 11, 5, 4, 3, 2);\n\n// ---- Buzzer ----\nconst int PIN_BUZZER = 6;\ninline void beepShoot() { tone(PIN_BUZZER, 2000, 40); } // court\ninline void beepHit() { tone(PIN_BUZZER, 1200, 80); } // moyen\ninline void beepOver() { tone(PIN_BUZZER, 400, 600); } // long\n\n// ---- Boutons ----\nconst int boutonTir = 7;\nconst int boutonHaut = 8;\nconst int boutonBas = 9;\n\n// ---- Affichage ----\nbyte CH_VAISSEAU[8] = {\n B00100, B01110, B11111, B11111, B01110, B00100, B00100, B00000\n};\nbyte CH_MISSILE[8] = {\n B00100, B00100, B00100, B11111, B00100, B00100, B00100, B00000\n};\nbyte CH_ENNEMI[8] = {\n B11111, B10101, B11111, B01010, B11111, B10101, B11111, B00000\n};\n\nint vaisseauLigne = 1; // 0..1\n\nstruct Ennemi { int colonne; int ligne; bool actif; };\nconst int MAX_ENNEMIS = 3;\nEnnemi ennemis[MAX_ENNEMIS];\n\nstruct Projectile { int colonne; int ligne; bool actif; };\nconst int MAX_TIRS = 6;\nProjectile tirs[MAX_TIRS];\n\nunsigned long dernierDeplacement = 0;\nunsigned long intervalDeplacement = 500;\n\nunsigned long dernierTir = 0;\nconst unsigned long delaiTir = 180;\n\nint score = 0;\n\nvoid setup() {\n pinMode(boutonTir, INPUT_PULLUP);\n pinMode(boutonHaut, INPUT_PULLUP);\n pinMode(boutonBas, INPUT_PULLUP);\n pinMode(PIN_BUZZER, OUTPUT);\n\n lcd.begin(16, 2);\n lcd.createChar(0, CH_VAISSEAU);\n lcd.createChar(1, CH_MISSILE);\n lcd.createChar(2, CH_ENNEMI);\n lcd.print(\"Vaisseau Pret!\");\n delay(600);\n lcd.clear();\n\n randomSeed(analogRead(A0));\n for (int i = 0; i < MAX_ENNEMIS; i++) ennemis[i].actif = false;\n for (int i = 0; i < MAX_TIRS; i++) tirs[i].actif = false;\n}\n\nvoid loop() {\n unsigned long now = millis();\n\n if (digitalRead(boutonHaut) == LOW) vaisseauLigne = 0;\n else if (digitalRead(boutonBas) == LOW) vaisseauLigne = 1;\n\n // Tir multi-missiles + bip\n if (digitalRead(boutonTir) == LOW && now - dernierTir >= delaiTir) {\n int idx = slotTirLibre();\n if (idx >= 0) {\n tirs[idx].actif = true;\n tirs[idx].colonne = 1;\n tirs[idx].ligne = vaisseauLigne;\n dernierTir = now;\n beepShoot();\n }\n }\n\n if (now - dernierDeplacement > intervalDeplacement) {\n dernierDeplacement = now;\n\n // Déplacer les tirs\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n tirs[t].colonne++;\n if (tirs[t].colonne > 15) tirs[t].actif = false;\n }\n\n // Déplacer les ennemis + détection des collisions\n for (int i = 0; i < MAX_ENNEMIS; i++) {\n if (!ennemis[i].actif) continue;\n ennemis[i].colonne--;\n\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n if (ennemis[i].colonne == tirs[t].colonne\n && ennemis[i].ligne == tirs[t].ligne) {\n ennemis[i].actif = false;\n tirs[t].actif = false;\n score++;\n beepHit();\n break;\n }\n }\n\n if (ennemis[i].colonne <= 0) {\n beepOver();\n gameOver();\n }\n }\n\n // Apparition d'ennemis\n int actifs = 0;\n for (int i = 0; i < MAX_ENNEMIS; i++) if (ennemis[i].actif) actifs++;\n if (actifs < MAX_ENNEMIS && random(0, 10) > 7) {\n for (int i = 0; i < MAX_ENNEMIS; i++) if (!ennemis[i].actif) {\n ennemis[i].actif = true;\n ennemis[i].colonne = 15;\n ennemis[i].ligne = random(0, 2);\n break;\n }\n }\n\n updateLCD();\n }\n}\n\nint slotTirLibre() {\n for (int i = 0; i < MAX_TIRS; i++) if (!tirs[i].actif) return i;\n return -1;\n}\n\nstatic inline void printIfOnScreen(int col, int row, uint8_t ch) {\n if (col >= 0 && col <= 15 && row >= 0 && row <= 1) {\n lcd.setCursor(col, row);\n lcd.write(ch);\n }\n}\n\nvoid updateLCD() {\n lcd.clear();\n lcd.setCursor(10, 0); lcd.print(\"S:\"); lcd.print(score);\n\n printIfOnScreen(0, vaisseauLigne, 0); // vaisseau\n\n // Tirs\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n if (tirs[t].colonne >= 0 && tirs[t].colonne <= 15) {\n lcd.setCursor(tirs[t].colonne, tirs[t].ligne);\n lcd.write((uint8_t)1); // missile\n }\n }\n\n // Ennemis\n for (int i = 0; i < MAX_ENNEMIS; i++) {\n if (!ennemis[i].actif) continue;\n if (ennemis[i].colonne >= 0 && ennemis[i].colonne <= 15) {\n lcd.setCursor(ennemis[i].colonne, ennemis[i].ligne);\n lcd.write((uint8_t)2); // ennemi\n }\n }\n}\n\nvoid gameOver() {\n lcd.clear();\n lcd.setCursor(3, 0); lcd.print(\"GAME OVER\");\n lcd.setCursor(4, 1); lcd.print(\"Score:\"); lcd.print(score);\n while (true) {}\n}\n```\n\n---\n\n## 2. Tutoriel : préparation sous KiCad\n\n### 2.1 Atelier — KiCad → PCB → CNC\n\n> ⚠️ Tutoriel expérimental : à revérifier, tester et adapter au besoin.\n\nSite officiel : — éditeur de PCB libre et gratuit.\n\n### 2.2 Création du projet\n\nDeux possibilités :\n\n- **Projet vierge** : *Fichier → Nouveau projet*\n- **Projet « shield Arduino »** : *Fichier → Nouveau projet à partir d'un modèle → Arduino UNO Shield*\n\nL'exemple suivant porte sur la création d'un shield Arduino Uno comportant 3 LED, 3 résistances de 220 Ω et 3 boutons.\n\nEnregistrer le projet dans un dossier dédié (ici, `shieldDynalab`). Il contient deux fichiers principaux :\n\n- `*.kicad_sch` — conception du circuit électronique (schéma)\n- `*.kicad_pcb` — agencement des composants sur le circuit imprimé et dessin des pistes\n\nOuvrir le fichier `.kicad_sch`. Le modèle Arduino Uno Shield contient déjà les broches correspondant aux pins de l'Arduino.\n\n### 2.3 Ajout des composants\n\nCliquer sur le bouton **Ajouter un symbole** (barre d'outils de droite, en haut). Dans le champ de recherche, saisir le nom du composant *en anglais* (par exemple `led`).\n\nSélectionner le composant dans la liste : son symbole électrique s'affiche dans le volet de droite. Puis, via le menu déroulant **Pas d'empreinte par défaut**, sélectionner l'empreinte qui correspond au composant physique (par exemple via la référence constructeur ou les dimensions).\n\n> **Empreinte** : espace physique occupé par le composant sur le PCB ainsi que la position de ses broches.\n\n- **SMD** *(Surface Mount Device)* — composant monté en surface\n- **THT** *(Through-Hole Technology)* — composant traversant\n\nVérifier que l'empreinte qui s'affiche en dessous semble cohérente, valider, puis poursuivre avec les autres composants (par exemple une résistance 220 Ω).\n\nSi une empreinte n'est pas trouvée dans la liste déroulante, ce n'est pas grave : il sera possible de l'attribuer plus tard, par exemple pour le bouton poussoir.\n\n### 2.4 Attribution des empreintes a posteriori\n\nPour attribuer une empreinte aux composants qui n'en ont pas encore, utiliser le bouton **Assigner des empreintes**. Une fenêtre liste tous les composants du projet ; il devient possible :\n\n- de modifier les empreintes déjà attribuées,\n- d'en attribuer de nouvelles depuis la liste à droite (recherche par mot-clé ou référence, en anglais ; double-clic pour valider).\n\nEn cas de doute, faire un *clic droit* sur le nom de l'empreinte → **Affichage de l'empreinte sélectionnée**, pour vérifier visuellement la cohérence.\n\nSi un composant n'existe pas dans la bibliothèque, il est possible de fabriquer une empreinte personnalisée à partir de zéro.\n\n### 2.5 Conception du circuit\n\nDans l'espace de travail, survoler un composant et utiliser les raccourcis suivants :\n\n| Touche | Action |\n|---|---|\n| `M` | *Move* — déplacer le composant |\n| `R` | *Rotate* — pivoter le composant |\n| `Ctrl + D` | *Duplicate* — dupliquer le composant (cliquer ailleurs pour le poser) |\n\nLe bouton **Ajouter un fil** (barre d'outils de droite) permet de relier les broches entre elles.\n\nSurvoler les noms des broches de l'Arduino et faire `Ctrl + D` pour les dupliquer à proximité du module en cours de conception (par exemple le module LED). Procéder de même pour la masse (GND).\n\nLe bouton **Annotation de la schématique** renomme automatiquement les composants pour éviter les conflits.\n\nAjouter des **indicateurs de non-connexion** sur toutes les broches qui ne seront reliées à rien : cela évite les erreurs lors du contrôle des règles électriques (ERC).\n\n> *Point à vérifier* : sur quelles broches exactement faut-il placer ces indicateurs ?\n\nIl est possible de sélectionner plusieurs composants à la fois pour les dupliquer en bloc (utile lorsqu'un même sous-module se répète sur le circuit).\n\n### 2.6 Passage à l'éditeur de PCB\n\nUne fois le schéma terminé : **sauvegarder**, puis cliquer sur **Commuter vers l'éditeur de PCB** (barre d'outils en haut). Cela ouvre le fichier `.kicad_pcb`.\n\nAu départ, l'éditeur ne contient pas encore les composants du schéma. Pour les importer : **Outils → Mettre à jour le PCB depuis le schéma**.\n\nLes composants apparaissent à l'écran, reliés par des « chevelus » aux broches correspondantes. Reste à les positionner, les orienter et les router de manière à éviter les croisements de pistes (le casse-tête commence ici).\n\n### 2.7 Paramétrage des contraintes (CNC)\n\nAvant de tracer les pistes, paramétrer les contraintes liées à la CNC : **Options du CI → Contraintes**.\n\nModifier les valeurs minimales pour permettre le passage de la fraise lors de l'isolation des pistes. Se baser sur les diamètres de fraises disponibles.\n\n### 2.8 Tracé des pistes\n\nLe bouton de tracé de piste permet de dessiner les connexions. Au clic sur une broche, l'écran s'assombrit et seules les broches reliées électriquement restent éclairées, ce qui facilite l'identification des connexions à réaliser.\n\n- **Trait rouge** : la piste elle-même\n- **Contour gris** : la zone d'isolation minimum\n\nKiCad maintient automatiquement la distance minimale par rapport aux autres broches et pistes.\n\n**Choix de la couche** — bien sélectionner la couche dans la liste de droite *avant* de tracer :\n\n- `F.Cu` *(front)* — pistes en cuivre côté composants\n- `B.Cu` *(back)* — pistes en cuivre côté soudure\n\nVérifier le rendu via **Affichage → Visualisation 3D** pour s'assurer que le résultat est physiquement réalisable et cohérent.\n\n> 💡 **Cas de la gravure CNC** : le cuivre ne traverse pas la plaque au niveau des perçages. Les pistes doivent donc être placées de l'autre côté par rapport aux composants. On travaille donc sur la couche `B.Cu`.\n>\n> Faire les pistes sur `F.Cu` donne certes un rendu plus clair, mais ne permet pas de souder les composants une fois la plaque gravée à la CNC.\n\n### 2.9 Export des fichiers de fabrication\n\n**Pistes (Gerber)** : *Fichier → Fichier de fabrication → Gerber `.gbr`*. Sélectionner les couches concernées, tracer ; la fenêtre du bas confirme l'enregistrement.\n\n**Perçages (Excellon)** : *Fichier → Fichier de fabrication → Fichier de perçage `.drl`*. Créer le fichier de perçage ET le plan de perçage.\n\n### 2.10 Conversion Gerber → SVG\n\nUtiliser **FlatCam** : il permet d'ouvrir des fichiers Gerber, de définir le diamètre et le type de fraise utilisée, et de générer automatiquement le tracé vectoriel du chemin que la CNC empruntera. Il est également possible d'ajouter manuellement des traits si nécessaire.\n\nÉtapes :\n\n1. Import des fichiers Gerber\n2. Paramétrage de l'isolation\n3. Création de la géométrie\n4. Adaptation manuelle du tracé si besoin\n5. Géométrie sélectionnée → **Export SVG** ou **DXF**, ou bien génération directe du chemin CNC\n\nTutoriel vidéo : \n\n### 2.11 Ressources complémentaires\n\nDocumentation KiCad en français sur Fabmanager : \n\n---\n\n## 3. Atelier 2 — déroulé\n\n1. Retour sur les règles de conception\n2. Retour d'expérience sur le projet\n3. Préparation des fichiers pour la CNC\n4. Usinage sur CNC\n5. **Et après ?** Exposition, autres ateliers, création d'un club ?\n\n---\n\n## 4. Règles de conception du PCB\n\n### 4.1 Points abordés ensemble\n\n#### 1. Type de fabrication et couches utilisées\n\nPCB simple face : les pistes sont gravées sur la face cuivre inférieure, les composants traversants sont placés sur la face supérieure. Dans KiCad, router donc les pistes sur la couche `B.Cu`.\n\n#### 2. Types de composants électroniques\n\n- **CMS** (Composants Montés en Surface) = **SMD** (*Surface Mount Device*) : même chose, en français et en anglais.\n- **THT** (*Through-Hole Technology*) : composants traversants.\n\n#### 3. Outils de vérification dans KiCad\n\n- **DRC** (*Design Rule Check*) : contrôle du respect des règles de conception du PCB.\n- **ERC** (*Electrical Rule Check*) : contrôle de la cohérence électrique du schéma.\n\n#### 4. Gestion des entrées non connectées\n\nNe pas laisser d'entrée non connectée (dite « flottante ») : cela peut entraîner des comportements imprévisibles. Sur un microcontrôleur, une broche inutilisée peut rester non connectée à condition d'être correctement configurée par programmation (en sortie, ou avec un état défini par exemple en pull-up/pull-down interne).\n\n#### 5. Routage et angles des pistes\n\nÉviter les angles à 90°, privilégier les angles à 45°. Cela améliore la qualité de fabrication et limite les discontinuités électriques, particulièrement sur les signaux rapides.\n\n#### 6. Gestion des interférences\n\nÉloigner les éléments susceptibles de générer des interférences (liaisons USB, signaux rapides, lignes d'horloge) des entrées analogiques (notamment audio).\n\nRègle générale : plus un signal est rapide, plus il est susceptible de générer ou de subir des interférences. Dans ce cas, privilégier des pistes courtes. À l'inverse, pour des signaux lents (bouton poussoir, LED, commande de relais, UART à faible débit), il est possible de déporter le composant avec des pistes plus longues sans risque significatif.\n\n#### 7. Notion de routage soigné\n\nUn routage soigné consiste à tracer les pistes de manière logique et maîtrisée :\n\n- privilégier des trajets courts et directs,\n- éviter les boucles inutiles,\n- limiter les croisements entre signaux sensibles et signaux bruyants,\n- conserver une proximité cohérente avec la masse pour assurer un bon retour de courant.\n\nUn tracé clair et structuré facilite également la lecture, la maintenance et le dépannage du circuit.\n\n#### 8. Routage des signaux USB\n\nLes lignes D+ et D− doivent avoir des longueurs identiques afin de préserver les caractéristiques du signal différentiel et maintenir une impédance cohérente.\n\n#### 9. Intérêt des PCB multicouches\n\nLorsque cela est possible, un PCB à quatre couches est une solution idéale : les couches internes dédiées à l'alimentation et à la masse améliorent la stabilité électrique et réduisent les interférences (notamment grâce à leur effet capacitif).\n\n#### 10. Prototypage avec Arduino et intégration\n\nUne carte Arduino Uno est un dispositif complet adapté au prototypage rapide.\n\nDans une mise en œuvre intégrée, il est possible de ne conserver que le microcontrôleur — par exemple l'ATmega328P — accompagné des éléments minimaux nécessaires à son fonctionnement :\n\n- un quartz (généralement 16 MHz) avec ses deux condensateurs associés,\n- une résistance de pull-up sur la broche `RESET`,\n- les condensateurs de découplage pour l'alimentation.\n\nPour faciliter l'usage, monter le microcontrôleur sur un support DIP (support tulipe) : cela permet de le retirer aisément pour le reprogrammer sur une carte Arduino.\n\n### 4.2 Bonnes pratiques supplémentaires (bonus à vérifier)\n\n#### 11. Découplage des alimentations\n\nChaque circuit intégré doit posséder un condensateur de découplage (typiquement 100 nF) placé au plus près de ses broches `VCC` et `GND`. Cela absorbe les variations rapides de courant, stabilise la tension et évite les comportements aléatoires difficiles à diagnostiquer. Pratique particulièrement importante pour les microcontrôleurs et les circuits logiques rapides.\n\n#### 12. Plan de masse (GND)\n\nPlutôt que de relier la masse uniquement par des pistes fines, utiliser une zone de cuivre continue. Cela réduit les interférences électromagnétiques, améliore le retour de courant et simplifie le routage.\n\nDans le cas d'une gravure CNC, cette pratique est facilement réalisable : le plan de masse correspond au reste de cuivre non gravé, isolé autour des pistes et pastilles. Dans KiCad, on peut remplir la carte avec un *copper pour* (zone cuivrée) affectée à `GND` et relier tous les points de masse.\n\n#### 13. Boucle de courant et retour de masse\n\nUn signal électrique forme toujours une boucle complète : aller + retour. Si le chemin de retour n'est pas proche de la piste du signal, le circuit peut capter ou émettre du bruit. Toujours garder un retour de masse continu et proche pour tous les signaux, en particulier les signaux rapides ou sensibles.\n\n#### 14. Largeur des pistes adaptée au courant\n\nToutes les pistes ne doivent pas avoir la même largeur :\n\n- les signaux logiques peuvent passer sur des pistes fines,\n- les pistes d'alimentation et celles transportant un courant important doivent être plus larges pour éviter surchauffe, chute de tension ou destruction de la piste.\n\nIl existe des calculateurs en ligne pour déterminer la largeur adaptée selon le courant et l'épaisseur du cuivre.\n\n#### 15. Points de test pour le débogage\n\nPrévoir sur le PCB des points de test accessibles pour mesurer rapidement la tension d'alimentation, vérifier les signaux critiques et suivre les lignes de communication importantes.\n\nConcrètement, ce sont de petites pastilles ou trous métallisés sur lesquels on peut poser la sonde d'un multimètre ou d'un oscilloscope. Cela facilite le dépannage sans avoir à dessouder des composants.\n\n#### 16. Dissipation thermique\n\nCertains composants génèrent de la chaleur (régulateurs de tension, transistors de puissance). Pour éviter la surchauffe et préserver la fiabilité du circuit, prévoir une surface de cuivre suffisante pour dissiper cette chaleur :\n\n- pistes plus larges connectées aux broches concernées,\n- raccordement de ces broches à des zones de cuivre étendues qui agissent comme dissipateurs thermiques.\n\nL'objectif est d'offrir un chemin efficace d'évacuation de la chaleur vers le PCB.\n\n#### 17. Séparation des alimentations\n\nSi le circuit comporte des parties analogiques, numériques et de puissance, séparer les plans ou pistes d'alimentation pour chaque domaine. Par exemple, les moteurs et autres charges fortes peuvent disposer de leur propre piste, tandis que la logique numérique et l'analogique sensible utilisent des pistes ou zones distinctes.\n\nMême si toutes les alimentations proviennent de la même source, cette séparation physique sur le PCB limite les interférences et améliore la stabilité du circuit.\n\n---\n\n## 5. Application au projet\n\n### 5.1 Processus itératif (retour d'expérience)\n\n#### Conception du PCB\n\n**#1 — Listing des composants**\n\nInventorier l'ensemble des composants nécessaires.\n\n**#2 — Premiers choix de conception**\n\n- forme globale du PCB,\n- composants accessibles ou non,\n- répartition face supérieure / face inférieure,\n- type d'alimentation (ne pas oublier la batterie !).\n\n**#3 — Test de positionnement et d'implantation réelle** *(si possible)*\n\n- repérer les conflits potentiels (ponts notamment),\n- prendre les mesures critiques,\n- définir la forme et la taille du PCB.\n\n**#4 — Schématisation sous KiCad**\n\n> 💡 Travailler si possible sur un double écran.\n\n- positionner et anticiper a minima l'implantation des éléments ;\n- l'objectif n'est pas nécessairement de produire un schéma facilement lisible, mais un schéma exploitable pour le routage ;\n- éviter au maximum les croisements ;\n- relier directement les composants à la broche source (ne pas chercher à les relier entre eux dans un premier temps) ;\n- si besoin, utiliser l'empreinte d'un autre composant (exemple : une batterie peut être représentée par l'empreinte d'une résistance).\n\nÀ explorer : sous KiCad, les broches `GND` d'un Arduino ne sont pas reliées entre elles. Affecter un `GND` symbolique à chacune via des labels.\n\n**#5 — Routage sous KiCad (éditeur de PCB)**\n\nDernier moment pour vérifier les empreintes — vérifier notamment que le pas est bien un multiple de 2,54 mm.\n\n> ⚠️ Après création des pistes, déplacer un composant rompt les connexions. Implanter donc précisément les composants dès le départ (au besoin, double-clic + saisie des coordonnées).\n\nPour Arduino : supprimer si nécessaire les limites de la carte.\n\n- imaginer les premiers regroupements de pistes (vrai aussi pour la masse) et les ajuster progressivement sur le schéma ;\n- éviter les **prisons** (deux broches éloignées reliées par une boucle qui bloque l'accès aux autres broches) → privilégier les pistes en parallèle ;\n- pour le passage des pistes, modifier les empreintes si nécessaire (par exemple suppression d'un perçage) : *double-clic sur l'empreinte → Éditer l'empreinte → Créer une nouvelle bibliothèque personnalisée (la placer en favoris) → la modifier puis enregistrer sous cette nouvelle bibliothèque* ;\n- garder en tête qu'il est possible de faire passer des pistes **sous** les composants ;\n- dans certains cas, créer des ponts filaires (parfois inévitable).\n\n> **Important** : définir la couche `Edge.Cuts` (contour du PCB).\n\n**#6 — Réaffectation des broches**\n\nObjectif : faciliter le routage.\n\n- veiller à la capacité de chaque broche ;\n- bon à savoir : sur Arduino, les broches analogiques peuvent être réaffectées en numérique ;\n- noter toutes les modifications pour adapter le code en conséquence.\n\n**#7 — Modification du code**\n\nReporter les réaffectations de broches dans le code source.\n\n**#8 — Nouveau prototypage** *(facultatif)*\n\n#### Préparation des fichiers pour l'usinage\n\n**#9 — Export des fichiers Gerber et Excellon**\n\nExporter a minima : `B.Cu` + `Edge.Cuts` + `.drl`.\n\n**#10 — Traitement dans FlatCam**\n\nGénération des fichiers SVG.\n\n**#11 — Traitement dans Inkscape** *(facultatif)*\n\nFusionner les « combos », supprimer les contours superflus.\n\n### 5.2 Liste des équipements et positionnement\n\n- Shield Arduino custom avec PCB **débordant du form factor** standard.\n- L'écran déborde de **8 mm minimum vers le haut** ; les broches sont à **4 mm minimum** du bord de la carte.\n- **Pile 9 V** pour alimentation sur `Vin` (anticiper l'emplacement d'un futur interrupteur d'alimentation). Branchement filaire sur le PCB via une cosse de raccordement, à droite des broches de l'écran.\n- **Potentiomètre de contraste** : utile uniquement pour la mise au point, pas besoin d'être accessible une fois la carte dans son boîtier. Position classique conservée, mais il sera caché sous le capot.\n- **Port USB de l'Arduino** : accessible pour reprogrammation.\n- **Bouton reset** : ajout d'un bouton dédié pour relancer le jeu (ou aménager la forme du PCB pour conserver l'accès au bouton reset d'origine de l'Arduino).\n- **Buzzer** : monté en face arrière du PCB. Attention à :\n - ce que la position des mains lors du jeu ne bouche pas le son,\n - ce qu'il ne touche pas / ne court-circuite pas les broches en sous-face de l'écran (le centrer sur la hauteur, l'aligner à gauche sur le bord du module écran).\n\n#### Dimensions du PCB\n\n| | Hauteur | Largeur |\n|---|---|---|\n| Idéal | 78 mm | 80 mm |\n| Plaque à graver disponible | 70 mm | 100 mm |\n| **PCB final retenu** | **65 mm** | **80 mm** |\n\n### 5.3 Schéma KiCad — réaffectation des broches\n\n#### Boutons\n\n| Bouton | Broche Arduino | Rôle |\n|---|---|---|\n| SW1 | D12 (+ GND) | Bouton **haut** |\n| SW2 | D13 (broche 3 du SW2 sur GND, « 14 » à côté du 13) | Bouton **bas** |\n| SW3 | A0 (broches 1 et 3) + GND (broches 2 et 4, à côté du 5 V) | Bouton **tir** |\n\n#### Buzzer\n\n- Broche **D11** + GND.\n\n#### Écran LCD\n\n| Broche LCD | Broche Arduino |\n|---|---|\n| D7 | D10 |\n| D6 | D9 |\n| D5 | D8 |\n| D4 | D7 |\n| E | D5 |\n| RS | D6 |\n| RW | GND |\n\n#### Masses\n\n`VSS` du LCD, GND du buzzer, GND de SW1 et GND de SW2 sont tous reliés à la masse commune.\n\n> ⚠️ **Important** : sur l'écran LCD, il faudra **souder un pont** entre `R/W` et `VSS` pour relier `R/W` à la masse.\n\n---\n\n## 6. Tutoriel : préparation pour la CNC\n\n### 6.1 Création d'un PCB à la CNC (gravure « à l'anglaise »)\n\n**Logiciels utilisés :**\n\n- KiCad — version 9.0\n- FlatCam — version bêta 8.994\n- Inkscape\n- Easel (pilotage de la CNC)\n\n### 6.2 Étapes dans KiCad\n\n#### Règles de conception → contraintes\n\nVérifier :\n\n- le **diamètre des pads** : 3 mm (double-clic sur les pads → *Propriétés*) ;\n- la **distance entre pads** : 2,54 mm.\n\n> Proposition : passer à 2,34 mm (= 2,54 − 2 × 0,1) pour ménager une marge ?\n\n#### Ajouter le contour du circuit\n\n- sélectionner la couche `Edge.Cuts`,\n- utiliser par exemple l'outil **Rectangle**, clic simple.\n\n#### Export des fichiers de fabrication\n\n*Fichier → Fichiers de fabrication → Gerber → Tracer*, puis créer les **fichiers de perçage** (Excellon).\n\n> ⚠️ Ne pas oublier d'exporter la couche `Edge.Cuts`.\n\n### 6.3 FlatCam\n\n**Téléchargement** : \n\n> En date du 01/04/2026, la version 8.994 est disponible avec un `.exe` pour Windows.\n\n#### 1. Ouvrir FlatCam\n\n#### 2. Charger les fichiers\n\n- **Open Gerber** pour le fichier de la face cuivre + `Edge.Cuts`,\n- **Open Excellon** pour les fichiers de perçage :\n - `PTH` → perçage des composants,\n - `NPTH` → autres perçages.\n\n#### 3. Convertir Gerber et Excellon en géométries\n\n- sélectionner les fichiers,\n- *Edit → Conversion → Convert Any to Geo*.\n\n#### 4. Joindre les contours aux géométries\n\n**Pour les pistes** : sélectionner `B.Cu` + `Edge.Cuts` → *Edit → Join Objects → Join Geo / Gerber / Excellon*. Cela génère une nouvelle géométrie « Combo… ».\n\n**Pour les perçages** : même opération avec `PTH.drl` + `Edge.Cuts`.\n\n> ⚠️ Il n'est *a priori* pas possible de joindre efficacement les géométries `PTH.drl` et `B.Cu` directement : le fichier de pistes efface / écrase le fichier de perçage.\n\n#### Variante (ancienne version)\n\nAjouter manuellement une forme contour sur toutes les géométries :\n\n1. sélectionner la géométrie → *Properties → Geometry Editor* ;\n2. choisir l'outil souhaité (par exemple **Rectangle**) ;\n3. dessiner le contour.\n\nToutes les géométries doivent partager le même contour pour garantir leur alignement par la suite.\n\n#### 5. Exporter les géométries « Combo » en SVG\n\nSélectionner chaque géométrie puis *File → Export → SVG* (autant de fichiers SVG que de géométries).\n\n### 6.4 Inkscape *(facultatif)*\n\n1. Ouvrir les fichiers SVG « Combo » et faire copier / coller.\n2. Appliquer un **effet miroir** si nécessaire (réfléchir au résultat attendu).\n3. Séparément, **dégrouper** puis **unir** les pistes d'un côté, les perçages de l'autre.\n4. Regrouper chacun avec son contour respectif.\n5. Aligner les deux fichiers via leurs contours.\n6. Supprimer les contours superflus pour n'en conserver qu'un seul.\n7. Enregistrer le tout dans un seul fichier SVG final.\n\n> Option : conserver 2 contours est possible mais sans réel intérêt.\n\n### 6.5 Easel — usinage CNC\n\n#### Préparation du projet\n\n1. *Nouveau projet* → donner un nom au projet (cliquer sur *Untitled*).\n2. Régler l'unité en **millimètres**.\n3. Spécifier le **matériau PCB** et ses dimensions — **surtout l'épaisseur** (PCB du Lab = **1,4 mm**).\n\n> ⚠️ Appliquer un **miroir** si nécessaire (réfléchir au résultat).\n>\n> Vérifier la bonne superposition des SVG si besoin.\n\n#### Gravure des pistes\n\n> ⚠️ Vérifier de nouveau l'effet miroir.\n>\n> Important : **monter la fraise** et faire un **homing**.\n\n**Fraise utilisée** : V-bits → *Other* → **pointe javelot 30°, 0,125 in (⅛ pouce)**.\n\n**Cut settings** *(onglet Manual)* :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 60 mm/min |\n| Plunge rate | 60 mm/min |\n| Depth per pass | 0,05 mm |\n\n**Import du SVG** : *Project → Import SVG*. Le placer à l'origine via `Ctrl + A` puis position `X = 0`, `Y = 0` (veiller à avoir un remplissage interne sur la couche extérieure, ou équivalent).\n\nSupprimer le contour et, au besoin, les trous de perçage. Combiner les pistes : `Ctrl + A` puis *Edit → Combine*.\n\n**Définir la profondeur de passe et le mode** : `Ctrl + A` → *Cut* → `Depth = 0,1 mm` *(à vérifier — proposition : 0,2 mm ?)* → **Cut outside shape path**.\n\n#### Perçages\n\n> ⚠️ Vérifier l'effet miroir.\n>\n> 💡 Préparer le fichier pendant que la fraise refroidit !\n\n- monter la fraise et faire un homing ;\n- *Probe* → **Use Last XY Zero** ;\n- ré-importer le SVG, le placer à `(0, 0)` (ou `Ctrl + Z`), puis supprimer le contour et les pistes ;\n- au besoin, supprimer aussi tout reste de contour ou de pistes.\n\n**Fraise utilisée** : 1/32 in (0,03125 in).\n\n**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ ajouter `0,2 mm` via **Add depth**) → **Cut inside shape path**.\n\n**Cut settings** :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 300 mm/min |\n| Plunge rate | 100 mm/min |\n| Depth per pass | 0,4 mm |\n\n#### Découpe du contour\n\n- **Work Zero** : *Manual* → **Use Last Position** ;\n- ré-importer le SVG à `(0, 0)`, supprimer perçages et pistes (ou tracer directement le contour avec les outils d'Easel).\n\n**Fraise utilisée** : 1/32 in.\n\n**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ `0,2 mm` supplémentaires) → **Cut outside shape path**.\n\n> Sans les **tabs** ?\n\n**Cut settings** :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 300 mm/min |\n| Plunge rate | 100 mm/min |\n| Depth per pass | 0,4 mm |\n\n#### Fixation de la plaque PCB\n\n> 💡 Conseil : travailler **en bas à gauche** de la fraiseuse.\n\n---\n\n## 7. Et après ?\n\nÀ définir : exposition, autres ateliers, création d'un club, prolongements logiciels et matériels…\n\n---\n\n## Notes éditoriales (à traiter)\n\n- Harmoniser / reprendre la cohérence des notes encore en suspens.\n- Vérifier les points marqués `?` (notamment indicateurs de non-connexion, valeur de profondeur à 0,1 ou 0,2 mm, pas à 2,34 ou 2,54 mm).\n- Compléter la section « Et après ? ».\n- Réinsérer les illustrations du document original aux emplacements pertinents (KiCad, FlatCam, Easel).","featured":false,"tags":[]} \ No newline at end of file +{"uuid":"a9474a83-43b3-484c-950e-37a27ff663fe","slug":"game-watch-diy-fabrication","title":"Gawfgbsdfg","author":"cedric@abonnel.fr","published":false,"featured":false,"published_at":"2026-05-13 18:08","created_at":"2026-05-13 18:12:54","updated_at":"2026-05-15 22:57:05","revisions":[{"n":1,"date":"2026-05-15 22:57:05","comment":"Titre modifié, contenu modifié","title":"Game & Watch DIY — Fabrication"}],"cover":"","files_meta":{"9ae9bc58c13ca70c-56046.jpg":{"author":"","source_url":"https://images.freeimages.com/images/previews/9df/nature-1370816.jpg"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"fablab","tags":[],"content":"# Gawfgbsdfg\n\n> Document de travail consolidant le prototypage Arduino, la conception du PCB sous KiCad, les règles de conception et la préparation des fichiers pour la CNC.\n\n---\n\n## 1. Rappel : prototypage\n\n### 1.1 Liste du matériel\n\n- 1 × Arduino Uno\n- 1 × écran LCD 16 broches (non I²C)\n- 3 × boutons poussoirs\n- 1 × buzzer\n- 1 × résistance 220 Ω\n- 1 × potentiomètre 10 kΩ *(facultatif — voir remarque ci-dessous)*\n\n### 1.2 Câblage\n\n**Écran LCD** — câblage identique au projet n° 11 du livre de référence ; consulter les pages 116 et 117 pour le détail des broches.\n\nUne variante sans potentiomètre a été testée (LCD branché directement à la masse) mais elle a été abandonnée.\n\n**Boutons poussoirs** — montés en pull-up interne :\n\n```\nGND → Poussoir → broches 7, 8, 9 (avec INPUT_PULLUP dans le code)\n```\n\nPour comprendre le principe du montage pull-up : \n\n**Buzzer** — deux broches : l'une à la masse, l'autre sur la broche 6 (qui assure également l'alimentation lors du pilotage par `tone()`). Voir notamment le projet n° 6, p. 71.\n\n### 1.3 Type de jeu\n\nJeu d'arcade type *Asteroids*.\n\n### 1.4 Code de référence\n\n```cpp\n#include \nLiquidCrystal lcd(12, 11, 5, 4, 3, 2);\n\n// ---- Buzzer ----\nconst int PIN_BUZZER = 6;\ninline void beepShoot() { tone(PIN_BUZZER, 2000, 40); } // court\ninline void beepHit() { tone(PIN_BUZZER, 1200, 80); } // moyen\ninline void beepOver() { tone(PIN_BUZZER, 400, 600); } // long\n\n// ---- Boutons ----\nconst int boutonTir = 7;\nconst int boutonHaut = 8;\nconst int boutonBas = 9;\n\n// ---- Affichage ----\nbyte CH_VAISSEAU[8] = {\n B00100, B01110, B11111, B11111, B01110, B00100, B00100, B00000\n};\nbyte CH_MISSILE[8] = {\n B00100, B00100, B00100, B11111, B00100, B00100, B00100, B00000\n};\nbyte CH_ENNEMI[8] = {\n B11111, B10101, B11111, B01010, B11111, B10101, B11111, B00000\n};\n\nint vaisseauLigne = 1; // 0..1\n\nstruct Ennemi { int colonne; int ligne; bool actif; };\nconst int MAX_ENNEMIS = 3;\nEnnemi ennemis[MAX_ENNEMIS];\n\nstruct Projectile { int colonne; int ligne; bool actif; };\nconst int MAX_TIRS = 6;\nProjectile tirs[MAX_TIRS];\n\nunsigned long dernierDeplacement = 0;\nunsigned long intervalDeplacement = 500;\n\nunsigned long dernierTir = 0;\nconst unsigned long delaiTir = 180;\n\nint score = 0;\n\nvoid setup() {\n pinMode(boutonTir, INPUT_PULLUP);\n pinMode(boutonHaut, INPUT_PULLUP);\n pinMode(boutonBas, INPUT_PULLUP);\n pinMode(PIN_BUZZER, OUTPUT);\n\n lcd.begin(16, 2);\n lcd.createChar(0, CH_VAISSEAU);\n lcd.createChar(1, CH_MISSILE);\n lcd.createChar(2, CH_ENNEMI);\n lcd.print(\"Vaisseau Pret!\");\n delay(600);\n lcd.clear();\n\n randomSeed(analogRead(A0));\n for (int i = 0; i < MAX_ENNEMIS; i++) ennemis[i].actif = false;\n for (int i = 0; i < MAX_TIRS; i++) tirs[i].actif = false;\n}\n\nvoid loop() {\n unsigned long now = millis();\n\n if (digitalRead(boutonHaut) == LOW) vaisseauLigne = 0;\n else if (digitalRead(boutonBas) == LOW) vaisseauLigne = 1;\n\n // Tir multi-missiles + bip\n if (digitalRead(boutonTir) == LOW && now - dernierTir >= delaiTir) {\n int idx = slotTirLibre();\n if (idx >= 0) {\n tirs[idx].actif = true;\n tirs[idx].colonne = 1;\n tirs[idx].ligne = vaisseauLigne;\n dernierTir = now;\n beepShoot();\n }\n }\n\n if (now - dernierDeplacement > intervalDeplacement) {\n dernierDeplacement = now;\n\n // Déplacer les tirs\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n tirs[t].colonne++;\n if (tirs[t].colonne > 15) tirs[t].actif = false;\n }\n\n // Déplacer les ennemis + détection des collisions\n for (int i = 0; i < MAX_ENNEMIS; i++) {\n if (!ennemis[i].actif) continue;\n ennemis[i].colonne--;\n\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n if (ennemis[i].colonne == tirs[t].colonne\n && ennemis[i].ligne == tirs[t].ligne) {\n ennemis[i].actif = false;\n tirs[t].actif = false;\n score++;\n beepHit();\n break;\n }\n }\n\n if (ennemis[i].colonne <= 0) {\n beepOver();\n gameOver();\n }\n }\n\n // Apparition d'ennemis\n int actifs = 0;\n for (int i = 0; i < MAX_ENNEMIS; i++) if (ennemis[i].actif) actifs++;\n if (actifs < MAX_ENNEMIS && random(0, 10) > 7) {\n for (int i = 0; i < MAX_ENNEMIS; i++) if (!ennemis[i].actif) {\n ennemis[i].actif = true;\n ennemis[i].colonne = 15;\n ennemis[i].ligne = random(0, 2);\n break;\n }\n }\n\n updateLCD();\n }\n}\n\nint slotTirLibre() {\n for (int i = 0; i < MAX_TIRS; i++) if (!tirs[i].actif) return i;\n return -1;\n}\n\nstatic inline void printIfOnScreen(int col, int row, uint8_t ch) {\n if (col >= 0 && col <= 15 && row >= 0 && row <= 1) {\n lcd.setCursor(col, row);\n lcd.write(ch);\n }\n}\n\nvoid updateLCD() {\n lcd.clear();\n lcd.setCursor(10, 0); lcd.print(\"S:\"); lcd.print(score);\n\n printIfOnScreen(0, vaisseauLigne, 0); // vaisseau\n\n // Tirs\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n if (tirs[t].colonne >= 0 && tirs[t].colonne <= 15) {\n lcd.setCursor(tirs[t].colonne, tirs[t].ligne);\n lcd.write((uint8_t)1); // missile\n }\n }\n\n // Ennemis\n for (int i = 0; i < MAX_ENNEMIS; i++) {\n if (!ennemis[i].actif) continue;\n if (ennemis[i].colonne >= 0 && ennemis[i].colonne <= 15) {\n lcd.setCursor(ennemis[i].colonne, ennemis[i].ligne);\n lcd.write((uint8_t)2); // ennemi\n }\n }\n}\n\nvoid gameOver() {\n lcd.clear();\n lcd.setCursor(3, 0); lcd.print(\"GAME OVER\");\n lcd.setCursor(4, 1); lcd.print(\"Score:\"); lcd.print(score);\n while (true) {}\n}\n```\n\n---\n\n## 2. Tutoriel : préparation sous KiCad\n\n### 2.1 Atelier — KiCad → PCB → CNC\n\n> ⚠️ Tutoriel expérimental : à revérifier, tester et adapter au besoin.\n\nSite officiel : — éditeur de PCB libre et gratuit.\n\n### 2.2 Création du projet\n\nDeux possibilités :\n\n- **Projet vierge** : *Fichier → Nouveau projet*\n- **Projet « shield Arduino »** : *Fichier → Nouveau projet à partir d'un modèle → Arduino UNO Shield*\n\nL'exemple suivant porte sur la création d'un shield Arduino Uno comportant 3 LED, 3 résistances de 220 Ω et 3 boutons.\n\nEnregistrer le projet dans un dossier dédié (ici, `shieldDynalab`). Il contient deux fichiers principaux :\n\n- `*.kicad_sch` — conception du circuit électronique (schéma)\n- `*.kicad_pcb` — agencement des composants sur le circuit imprimé et dessin des pistes\n\nOuvrir le fichier `.kicad_sch`. Le modèle Arduino Uno Shield contient déjà les broches correspondant aux pins de l'Arduino.\n\n### 2.3 Ajout des composants\n\nCliquer sur le bouton **Ajouter un symbole** (barre d'outils de droite, en haut). Dans le champ de recherche, saisir le nom du composant *en anglais* (par exemple `led`).\n\nSélectionner le composant dans la liste : son symbole électrique s'affiche dans le volet de droite. Puis, via le menu déroulant **Pas d'empreinte par défaut**, sélectionner l'empreinte qui correspond au composant physique (par exemple via la référence constructeur ou les dimensions).\n\n> **Empreinte** : espace physique occupé par le composant sur le PCB ainsi que la position de ses broches.\n\n- **SMD** *(Surface Mount Device)* — composant monté en surface\n- **THT** *(Through-Hole Technology)* — composant traversant\n\nVérifier que l'empreinte qui s'affiche en dessous semble cohérente, valider, puis poursuivre avec les autres composants (par exemple une résistance 220 Ω).\n\nSi une empreinte n'est pas trouvée dans la liste déroulante, ce n'est pas grave : il sera possible de l'attribuer plus tard, par exemple pour le bouton poussoir.\n\n### 2.4 Attribution des empreintes a posteriori\n\nPour attribuer une empreinte aux composants qui n'en ont pas encore, utiliser le bouton **Assigner des empreintes**. Une fenêtre liste tous les composants du projet ; il devient possible :\n\n- de modifier les empreintes déjà attribuées,\n- d'en attribuer de nouvelles depuis la liste à droite (recherche par mot-clé ou référence, en anglais ; double-clic pour valider).\n\nEn cas de doute, faire un *clic droit* sur le nom de l'empreinte → **Affichage de l'empreinte sélectionnée**, pour vérifier visuellement la cohérence.\n\nSi un composant n'existe pas dans la bibliothèque, il est possible de fabriquer une empreinte personnalisée à partir de zéro.\n\n### 2.5 Conception du circuit\n\nDans l'espace de travail, survoler un composant et utiliser les raccourcis suivants :\n\n| Touche | Action |\n|---|---|\n| `M` | *Move* — déplacer le composant |\n| `R` | *Rotate* — pivoter le composant |\n| `Ctrl + D` | *Duplicate* — dupliquer le composant (cliquer ailleurs pour le poser) |\n\nLe bouton **Ajouter un fil** (barre d'outils de droite) permet de relier les broches entre elles.\n\nSurvoler les noms des broches de l'Arduino et faire `Ctrl + D` pour les dupliquer à proximité du module en cours de conception (par exemple le module LED). Procéder de même pour la masse (GND).\n\nLe bouton **Annotation de la schématique** renomme automatiquement les composants pour éviter les conflits.\n\nAjouter des **indicateurs de non-connexion** sur toutes les broches qui ne seront reliées à rien : cela évite les erreurs lors du contrôle des règles électriques (ERC).\n\n> *Point à vérifier* : sur quelles broches exactement faut-il placer ces indicateurs ?\n\nIl est possible de sélectionner plusieurs composants à la fois pour les dupliquer en bloc (utile lorsqu'un même sous-module se répète sur le circuit).\n\n### 2.6 Passage à l'éditeur de PCB\n\nUne fois le schéma terminé : **sauvegarder**, puis cliquer sur **Commuter vers l'éditeur de PCB** (barre d'outils en haut). Cela ouvre le fichier `.kicad_pcb`.\n\nAu départ, l'éditeur ne contient pas encore les composants du schéma. Pour les importer : **Outils → Mettre à jour le PCB depuis le schéma**.\n\nLes composants apparaissent à l'écran, reliés par des « chevelus » aux broches correspondantes. Reste à les positionner, les orienter et les router de manière à éviter les croisements de pistes (le casse-tête commence ici).\n\n### 2.7 Paramétrage des contraintes (CNC)\n\nAvant de tracer les pistes, paramétrer les contraintes liées à la CNC : **Options du CI → Contraintes**.\n\nModifier les valeurs minimales pour permettre le passage de la fraise lors de l'isolation des pistes. Se baser sur les diamètres de fraises disponibles.\n\n### 2.8 Tracé des pistes\n\nLe bouton de tracé de piste permet de dessiner les connexions. Au clic sur une broche, l'écran s'assombrit et seules les broches reliées électriquement restent éclairées, ce qui facilite l'identification des connexions à réaliser.\n\n- **Trait rouge** : la piste elle-même\n- **Contour gris** : la zone d'isolation minimum\n\nKiCad maintient automatiquement la distance minimale par rapport aux autres broches et pistes.\n\n**Choix de la couche** — bien sélectionner la couche dans la liste de droite *avant* de tracer :\n\n- `F.Cu` *(front)* — pistes en cuivre côté composants\n- `B.Cu` *(back)* — pistes en cuivre côté soudure\n\nVérifier le rendu via **Affichage → Visualisation 3D** pour s'assurer que le résultat est physiquement réalisable et cohérent.\n\n> 💡 **Cas de la gravure CNC** : le cuivre ne traverse pas la plaque au niveau des perçages. Les pistes doivent donc être placées de l'autre côté par rapport aux composants. On travaille donc sur la couche `B.Cu`.\n>\n> Faire les pistes sur `F.Cu` donne certes un rendu plus clair, mais ne permet pas de souder les composants une fois la plaque gravée à la CNC.\n\n### 2.9 Export des fichiers de fabrication\n\n**Pistes (Gerber)** : *Fichier → Fichier de fabrication → Gerber `.gbr`*. Sélectionner les couches concernées, tracer ; la fenêtre du bas confirme l'enregistrement.\n\n**Perçages (Excellon)** : *Fichier → Fichier de fabrication → Fichier de perçage `.drl`*. Créer le fichier de perçage ET le plan de perçage.\n\n### 2.10 Conversion Gerber → SVG\n\nUtiliser **FlatCam** : il permet d'ouvrir des fichiers Gerber, de définir le diamètre et le type de fraise utilisée, et de générer automatiquement le tracé vectoriel du chemin que la CNC empruntera. Il est également possible d'ajouter manuellement des traits si nécessaire.\n\nÉtapes :\n\n1. Import des fichiers Gerber\n2. Paramétrage de l'isolation\n3. Création de la géométrie\n4. Adaptation manuelle du tracé si besoin\n5. Géométrie sélectionnée → **Export SVG** ou **DXF**, ou bien génération directe du chemin CNC\n\nTutoriel vidéo : \n\n### 2.11 Ressources complémentaires\n\nDocumentation KiCad en français sur Fabmanager : \n\n---\n\n## 3. Atelier 2 — déroulé\n\n1. Retour sur les règles de conception\n2. Retour d'expérience sur le projet\n3. Préparation des fichiers pour la CNC\n4. Usinage sur CNC\n5. **Et après ?** Exposition, autres ateliers, création d'un club ?\n\n---\n\n## 4. Règles de conception du PCB\n\n### 4.1 Points abordés ensemble\n\n#### 1. Type de fabrication et couches utilisées\n\nPCB simple face : les pistes sont gravées sur la face cuivre inférieure, les composants traversants sont placés sur la face supérieure. Dans KiCad, router donc les pistes sur la couche `B.Cu`.\n\n#### 2. Types de composants électroniques\n\n- **CMS** (Composants Montés en Surface) = **SMD** (*Surface Mount Device*) : même chose, en français et en anglais.\n- **THT** (*Through-Hole Technology*) : composants traversants.\n\n#### 3. Outils de vérification dans KiCad\n\n- **DRC** (*Design Rule Check*) : contrôle du respect des règles de conception du PCB.\n- **ERC** (*Electrical Rule Check*) : contrôle de la cohérence électrique du schéma.\n\n#### 4. Gestion des entrées non connectées\n\nNe pas laisser d'entrée non connectée (dite « flottante ») : cela peut entraîner des comportements imprévisibles. Sur un microcontrôleur, une broche inutilisée peut rester non connectée à condition d'être correctement configurée par programmation (en sortie, ou avec un état défini par exemple en pull-up/pull-down interne).\n\n#### 5. Routage et angles des pistes\n\nÉviter les angles à 90°, privilégier les angles à 45°. Cela améliore la qualité de fabrication et limite les discontinuités électriques, particulièrement sur les signaux rapides.\n\n#### 6. Gestion des interférences\n\nÉloigner les éléments susceptibles de générer des interférences (liaisons USB, signaux rapides, lignes d'horloge) des entrées analogiques (notamment audio).\n\nRègle générale : plus un signal est rapide, plus il est susceptible de générer ou de subir des interférences. Dans ce cas, privilégier des pistes courtes. À l'inverse, pour des signaux lents (bouton poussoir, LED, commande de relais, UART à faible débit), il est possible de déporter le composant avec des pistes plus longues sans risque significatif.\n\n#### 7. Notion de routage soigné\n\nUn routage soigné consiste à tracer les pistes de manière logique et maîtrisée :\n\n- privilégier des trajets courts et directs,\n- éviter les boucles inutiles,\n- limiter les croisements entre signaux sensibles et signaux bruyants,\n- conserver une proximité cohérente avec la masse pour assurer un bon retour de courant.\n\nUn tracé clair et structuré facilite également la lecture, la maintenance et le dépannage du circuit.\n\n#### 8. Routage des signaux USB\n\nLes lignes D+ et D− doivent avoir des longueurs identiques afin de préserver les caractéristiques du signal différentiel et maintenir une impédance cohérente.\n\n#### 9. Intérêt des PCB multicouches\n\nLorsque cela est possible, un PCB à quatre couches est une solution idéale : les couches internes dédiées à l'alimentation et à la masse améliorent la stabilité électrique et réduisent les interférences (notamment grâce à leur effet capacitif).\n\n#### 10. Prototypage avec Arduino et intégration\n\nUne carte Arduino Uno est un dispositif complet adapté au prototypage rapide.\n\nDans une mise en œuvre intégrée, il est possible de ne conserver que le microcontrôleur — par exemple l'ATmega328P — accompagné des éléments minimaux nécessaires à son fonctionnement :\n\n- un quartz (généralement 16 MHz) avec ses deux condensateurs associés,\n- une résistance de pull-up sur la broche `RESET`,\n- les condensateurs de découplage pour l'alimentation.\n\nPour faciliter l'usage, monter le microcontrôleur sur un support DIP (support tulipe) : cela permet de le retirer aisément pour le reprogrammer sur une carte Arduino.\n\n### 4.2 Bonnes pratiques supplémentaires (bonus à vérifier)\n\n#### 11. Découplage des alimentations\n\nChaque circuit intégré doit posséder un condensateur de découplage (typiquement 100 nF) placé au plus près de ses broches `VCC` et `GND`. Cela absorbe les variations rapides de courant, stabilise la tension et évite les comportements aléatoires difficiles à diagnostiquer. Pratique particulièrement importante pour les microcontrôleurs et les circuits logiques rapides.\n\n#### 12. Plan de masse (GND)\n\nPlutôt que de relier la masse uniquement par des pistes fines, utiliser une zone de cuivre continue. Cela réduit les interférences électromagnétiques, améliore le retour de courant et simplifie le routage.\n\nDans le cas d'une gravure CNC, cette pratique est facilement réalisable : le plan de masse correspond au reste de cuivre non gravé, isolé autour des pistes et pastilles. Dans KiCad, on peut remplir la carte avec un *copper pour* (zone cuivrée) affectée à `GND` et relier tous les points de masse.\n\n#### 13. Boucle de courant et retour de masse\n\nUn signal électrique forme toujours une boucle complète : aller + retour. Si le chemin de retour n'est pas proche de la piste du signal, le circuit peut capter ou émettre du bruit. Toujours garder un retour de masse continu et proche pour tous les signaux, en particulier les signaux rapides ou sensibles.\n\n#### 14. Largeur des pistes adaptée au courant\n\nToutes les pistes ne doivent pas avoir la même largeur :\n\n- les signaux logiques peuvent passer sur des pistes fines,\n- les pistes d'alimentation et celles transportant un courant important doivent être plus larges pour éviter surchauffe, chute de tension ou destruction de la piste.\n\nIl existe des calculateurs en ligne pour déterminer la largeur adaptée selon le courant et l'épaisseur du cuivre.\n\n#### 15. Points de test pour le débogage\n\nPrévoir sur le PCB des points de test accessibles pour mesurer rapidement la tension d'alimentation, vérifier les signaux critiques et suivre les lignes de communication importantes.\n\nConcrètement, ce sont de petites pastilles ou trous métallisés sur lesquels on peut poser la sonde d'un multimètre ou d'un oscilloscope. Cela facilite le dépannage sans avoir à dessouder des composants.\n\n#### 16. Dissipation thermique\n\nCertains composants génèrent de la chaleur (régulateurs de tension, transistors de puissance). Pour éviter la surchauffe et préserver la fiabilité du circuit, prévoir une surface de cuivre suffisante pour dissiper cette chaleur :\n\n- pistes plus larges connectées aux broches concernées,\n- raccordement de ces broches à des zones de cuivre étendues qui agissent comme dissipateurs thermiques.\n\nL'objectif est d'offrir un chemin efficace d'évacuation de la chaleur vers le PCB.\n\n#### 17. Séparation des alimentations\n\nSi le circuit comporte des parties analogiques, numériques et de puissance, séparer les plans ou pistes d'alimentation pour chaque domaine. Par exemple, les moteurs et autres charges fortes peuvent disposer de leur propre piste, tandis que la logique numérique et l'analogique sensible utilisent des pistes ou zones distinctes.\n\nMême si toutes les alimentations proviennent de la même source, cette séparation physique sur le PCB limite les interférences et améliore la stabilité du circuit.\n\n---\n\n## 5. Application au projet\n\n### 5.1 Processus itératif (retour d'expérience)\n\n#### Conception du PCB\n\n**#1 — Listing des composants**\n\nInventorier l'ensemble des composants nécessaires.\n\n**#2 — Premiers choix de conception**\n\n- forme globale du PCB,\n- composants accessibles ou non,\n- répartition face supérieure / face inférieure,\n- type d'alimentation (ne pas oublier la batterie !).\n\n**#3 — Test de positionnement et d'implantation réelle** *(si possible)*\n\n- repérer les conflits potentiels (ponts notamment),\n- prendre les mesures critiques,\n- définir la forme et la taille du PCB.\n\n**#4 — Schématisation sous KiCad**\n\n> 💡 Travailler si possible sur un double écran.\n\n- positionner et anticiper a minima l'implantation des éléments ;\n- l'objectif n'est pas nécessairement de produire un schéma facilement lisible, mais un schéma exploitable pour le routage ;\n- éviter au maximum les croisements ;\n- relier directement les composants à la broche source (ne pas chercher à les relier entre eux dans un premier temps) ;\n- si besoin, utiliser l'empreinte d'un autre composant (exemple : une batterie peut être représentée par l'empreinte d'une résistance).\n\nÀ explorer : sous KiCad, les broches `GND` d'un Arduino ne sont pas reliées entre elles. Affecter un `GND` symbolique à chacune via des labels.\n\n**#5 — Routage sous KiCad (éditeur de PCB)**\n\nDernier moment pour vérifier les empreintes — vérifier notamment que le pas est bien un multiple de 2,54 mm.\n\n> ⚠️ Après création des pistes, déplacer un composant rompt les connexions. Implanter donc précisément les composants dès le départ (au besoin, double-clic + saisie des coordonnées).\n\nPour Arduino : supprimer si nécessaire les limites de la carte.\n\n- imaginer les premiers regroupements de pistes (vrai aussi pour la masse) et les ajuster progressivement sur le schéma ;\n- éviter les **prisons** (deux broches éloignées reliées par une boucle qui bloque l'accès aux autres broches) → privilégier les pistes en parallèle ;\n- pour le passage des pistes, modifier les empreintes si nécessaire (par exemple suppression d'un perçage) : *double-clic sur l'empreinte → Éditer l'empreinte → Créer une nouvelle bibliothèque personnalisée (la placer en favoris) → la modifier puis enregistrer sous cette nouvelle bibliothèque* ;\n- garder en tête qu'il est possible de faire passer des pistes **sous** les composants ;\n- dans certains cas, créer des ponts filaires (parfois inévitable).\n\n> **Important** : définir la couche `Edge.Cuts` (contour du PCB).\n\n**#6 — Réaffectation des broches**\n\nObjectif : faciliter le routage.\n\n- veiller à la capacité de chaque broche ;\n- bon à savoir : sur Arduino, les broches analogiques peuvent être réaffectées en numérique ;\n- noter toutes les modifications pour adapter le code en conséquence.\n\n**#7 — Modification du code**\n\nReporter les réaffectations de broches dans le code source.\n\n**#8 — Nouveau prototypage** *(facultatif)*\n\n#### Préparation des fichiers pour l'usinage\n\n**#9 — Export des fichiers Gerber et Excellon**\n\nExporter a minima : `B.Cu` + `Edge.Cuts` + `.drl`.\n\n**#10 — Traitement dans FlatCam**\n\nGénération des fichiers SVG.\n\n**#11 — Traitement dans Inkscape** *(facultatif)*\n\nFusionner les « combos », supprimer les contours superflus.\n\n### 5.2 Liste des équipements et positionnement\n\n- Shield Arduino custom avec PCB **débordant du form factor** standard.\n- L'écran déborde de **8 mm minimum vers le haut** ; les broches sont à **4 mm minimum** du bord de la carte.\n- **Pile 9 V** pour alimentation sur `Vin` (anticiper l'emplacement d'un futur interrupteur d'alimentation). Branchement filaire sur le PCB via une cosse de raccordement, à droite des broches de l'écran.\n- **Potentiomètre de contraste** : utile uniquement pour la mise au point, pas besoin d'être accessible une fois la carte dans son boîtier. Position classique conservée, mais il sera caché sous le capot.\n- **Port USB de l'Arduino** : accessible pour reprogrammation.\n- **Bouton reset** : ajout d'un bouton dédié pour relancer le jeu (ou aménager la forme du PCB pour conserver l'accès au bouton reset d'origine de l'Arduino).\n- **Buzzer** : monté en face arrière du PCB. Attention à :\n - ce que la position des mains lors du jeu ne bouche pas le son,\n - ce qu'il ne touche pas / ne court-circuite pas les broches en sous-face de l'écran (le centrer sur la hauteur, l'aligner à gauche sur le bord du module écran).\n\n#### Dimensions du PCB\n\n| | Hauteur | Largeur |\n|---|---|---|\n| Idéal | 78 mm | 80 mm |\n| Plaque à graver disponible | 70 mm | 100 mm |\n| **PCB final retenu** | **65 mm** | **80 mm** |\n\n### 5.3 Schéma KiCad — réaffectation des broches\n\n#### Boutons\n\n| Bouton | Broche Arduino | Rôle |\n|---|---|---|\n| SW1 | D12 (+ GND) | Bouton **haut** |\n| SW2 | D13 (broche 3 du SW2 sur GND, « 14 » à côté du 13) | Bouton **bas** |\n| SW3 | A0 (broches 1 et 3) + GND (broches 2 et 4, à côté du 5 V) | Bouton **tir** |\n\n#### Buzzer\n\n- Broche **D11** + GND.\n\n#### Écran LCD\n\n| Broche LCD | Broche Arduino |\n|---|---|\n| D7 | D10 |\n| D6 | D9 |\n| D5 | D8 |\n| D4 | D7 |\n| E | D5 |\n| RS | D6 |\n| RW | GND |\n\n#### Masses\n\n`VSS` du LCD, GND du buzzer, GND de SW1 et GND de SW2 sont tous reliés à la masse commune.\n\n> ⚠️ **Important** : sur l'écran LCD, il faudra **souder un pont** entre `R/W` et `VSS` pour relier `R/W` à la masse.\n\n---\n\n## 6. Tutoriel : préparation pour la CNC\n\n### 6.1 Création d'un PCB à la CNC (gravure « à l'anglaise »)\n\n**Logiciels utilisés :**\n\n- KiCad — version 9.0\n- FlatCam — version bêta 8.994\n- Inkscape\n- Easel (pilotage de la CNC)\n\n### 6.2 Étapes dans KiCad\n\n#### Règles de conception → contraintes\n\nVérifier :\n\n- le **diamètre des pads** : 3 mm (double-clic sur les pads → *Propriétés*) ;\n- la **distance entre pads** : 2,54 mm.\n\n> Proposition : passer à 2,34 mm (= 2,54 − 2 × 0,1) pour ménager une marge ?\n\n#### Ajouter le contour du circuit\n\n- sélectionner la couche `Edge.Cuts`,\n- utiliser par exemple l'outil **Rectangle**, clic simple.\n\n#### Export des fichiers de fabrication\n\n*Fichier → Fichiers de fabrication → Gerber → Tracer*, puis créer les **fichiers de perçage** (Excellon).\n\n> ⚠️ Ne pas oublier d'exporter la couche `Edge.Cuts`.\n\n### 6.3 FlatCam\n\n**Téléchargement** : \n\n> En date du 01/04/2026, la version 8.994 est disponible avec un `.exe` pour Windows.\n\n#### 1. Ouvrir FlatCam\n\n#### 2. Charger les fichiers\n\n- **Open Gerber** pour le fichier de la face cuivre + `Edge.Cuts`,\n- **Open Excellon** pour les fichiers de perçage :\n - `PTH` → perçage des composants,\n - `NPTH` → autres perçages.\n\n#### 3. Convertir Gerber et Excellon en géométries\n\n- sélectionner les fichiers,\n- *Edit → Conversion → Convert Any to Geo*.\n\n#### 4. Joindre les contours aux géométries\n\n**Pour les pistes** : sélectionner `B.Cu` + `Edge.Cuts` → *Edit → Join Objects → Join Geo / Gerber / Excellon*. Cela génère une nouvelle géométrie « Combo… ».\n\n**Pour les perçages** : même opération avec `PTH.drl` + `Edge.Cuts`.\n\n> ⚠️ Il n'est *a priori* pas possible de joindre efficacement les géométries `PTH.drl` et `B.Cu` directement : le fichier de pistes efface / écrase le fichier de perçage.\n\n#### Variante (ancienne version)\n\nAjouter manuellement une forme contour sur toutes les géométries :\n\n1. sélectionner la géométrie → *Properties → Geometry Editor* ;\n2. choisir l'outil souhaité (par exemple **Rectangle**) ;\n3. dessiner le contour.\n\nToutes les géométries doivent partager le même contour pour garantir leur alignement par la suite.\n\n#### 5. Exporter les géométries « Combo » en SVG\n\nSélectionner chaque géométrie puis *File → Export → SVG* (autant de fichiers SVG que de géométries).\n\n### 6.4 Inkscape *(facultatif)*\n\n1. Ouvrir les fichiers SVG « Combo » et faire copier / coller.\n2. Appliquer un **effet miroir** si nécessaire (réfléchir au résultat attendu).\n3. Séparément, **dégrouper** puis **unir** les pistes d'un côté, les perçages de l'autre.\n4. Regrouper chacun avec son contour respectif.\n5. Aligner les deux fichiers via leurs contours.\n6. Supprimer les contours superflus pour n'en conserver qu'un seul.\n7. Enregistrer le tout dans un seul fichier SVG final.\n\n> Option : conserver 2 contours est possible mais sans réel intérêt.\n\n### 6.5 Easel — usinage CNC\n\n#### Préparation du projet\n\n1. *Nouveau projet* → donner un nom au projet (cliquer sur *Untitled*).\n2. Régler l'unité en **millimètres**.\n3. Spécifier le **matériau PCB** et ses dimensions — **surtout l'épaisseur** (PCB du Lab = **1,4 mm**).\n\n> ⚠️ Appliquer un **miroir** si nécessaire (réfléchir au résultat).\n>\n> Vérifier la bonne superposition des SVG si besoin.\n\n#### Gravure des pistes\n\n> ⚠️ Vérifier de nouveau l'effet miroir.\n>\n> Important : **monter la fraise** et faire un **homing**.\n\n**Fraise utilisée** : V-bits → *Other* → **pointe javelot 30°, 0,125 in (⅛ pouce)**.\n\n**Cut settings** *(onglet Manual)* :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 60 mm/min |\n| Plunge rate | 60 mm/min |\n| Depth per pass | 0,05 mm |\n\n**Import du SVG** : *Project → Import SVG*. Le placer à l'origine via `Ctrl + A` puis position `X = 0`, `Y = 0` (veiller à avoir un remplissage interne sur la couche extérieure, ou équivalent).\n\nSupprimer le contour et, au besoin, les trous de perçage. Combiner les pistes : `Ctrl + A` puis *Edit → Combine*.\n\n**Définir la profondeur de passe et le mode** : `Ctrl + A` → *Cut* → `Depth = 0,1 mm` *(à vérifier — proposition : 0,2 mm ?)* → **Cut outside shape path**.\n\n#### Perçages\n\n> ⚠️ Vérifier l'effet miroir.\n>\n> 💡 Préparer le fichier pendant que la fraise refroidit !\n\n- monter la fraise et faire un homing ;\n- *Probe* → **Use Last XY Zero** ;\n- ré-importer le SVG, le placer à `(0, 0)` (ou `Ctrl + Z`), puis supprimer le contour et les pistes ;\n- au besoin, supprimer aussi tout reste de contour ou de pistes.\n\n**Fraise utilisée** : 1/32 in (0,03125 in).\n\n**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ ajouter `0,2 mm` via **Add depth**) → **Cut inside shape path**.\n\n**Cut settings** :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 300 mm/min |\n| Plunge rate | 100 mm/min |\n| Depth per pass | 0,4 mm |\n\n#### Découpe du contour\n\n- **Work Zero** : *Manual* → **Use Last Position** ;\n- ré-importer le SVG à `(0, 0)`, supprimer perçages et pistes (ou tracer directement le contour avec les outils d'Easel).\n\n**Fraise utilisée** : 1/32 in.\n\n**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ `0,2 mm` supplémentaires) → **Cut outside shape path**.\n\n> Sans les **tabs** ?\n\n**Cut settings** :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 300 mm/min |\n| Plunge rate | 100 mm/min |\n| Depth per pass | 0,4 mm |\n\n#### Fixation de la plaque PCB\n\n> 💡 Conseil : travailler **en bas à gauche** de la fraiseuse.\n\n---\n\n## 7. Et après ?\n\nÀ définir : exposition, autres ateliers, création d'un club, prolongements logiciels et matériels…\n\n---\n\n## Notes éditoriales (à traiter)\n\n- Harmoniser / reprendre la cohérence des notes encore en suspens.\n- Vérifier les points marqués `?` (notamment indicateurs de non-connexion, valeur de profondeur à 0,1 ou 0,2 mm, pas à 2,34 ou 2,54 mm).\n- Compléter la section « Et après ? ».\n- Réinsérer les illustrations du document original aux emplacements pertinents (KiCad, FlatCam, Easel)."} \ No newline at end of file diff --git a/a9474a83-43b3-484c-950e-37a27ff663fe/index.md b/a9474a83-43b3-484c-950e-37a27ff663fe/index.md index b85c790..9cb826c 100644 --- a/a9474a83-43b3-484c-950e-37a27ff663fe/index.md +++ b/a9474a83-43b3-484c-950e-37a27ff663fe/index.md @@ -1,4 +1,4 @@ -# Game & Watch DIY — Fabrication +# Gawfgbsdfg > Document de travail consolidant le prototypage Arduino, la conception du PCB sous KiCad, les règles de conception et la préparation des fichiers pour la CNC. diff --git a/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json b/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json index a6665f5..3a65f52 100644 --- a/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json +++ b/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json @@ -1,13 +1,21 @@ { "uuid": "a9474a83-43b3-484c-950e-37a27ff663fe", "slug": "game-watch-diy-fabrication", - "title": "Game & Watch DIY — Fabrication", + "title": "Gawfgbsdfg", "author": "cedric@abonnel.fr", "published": false, + "featured": false, "published_at": "2026-05-13 18:08", "created_at": "2026-05-13 18:12:54", - "updated_at": "2026-05-13 21:56:47", - "revisions": [], + "updated_at": "2026-05-15 22:57:05", + "revisions": [ + { + "n": 1, + "date": "2026-05-15 22:57:05", + "comment": "Titre modifié, contenu modifié", + "title": "Game & Watch DIY — Fabrication" + } + ], "cover": "", "files_meta": { "9ae9bc58c13ca70c-56046.jpg": { @@ -19,5 +27,6 @@ "seo_title": "", "seo_description": "", "og_image": "", - "category": "fablab" + "category": "fablab", + "tags": [] }