Machine That Draws de A à Z
Comment nous avons fait pour arriver à ce résultat
Introduction
Le projet que nous vous présentons aujourd'hui s'intitule Machine That Draws , autrement dit « la machine qui dessine ».
La machine que vous allez découvrir à travers cette présentation est le résultat d'une année de recherche, de modélisation,
de conception, mais aussi de nombreux tests afin d'aboutir à une réalisation à la fois fonctionnelle et aboutie.
À travers ce projet, notre objectif était de concevoir une machine capable de reproduire automatiquement des dessins avec précision,
tout en mettant en pratique les différentes compétences acquises au cours de notre formation. Cette réalisation nous a permis de travailler
aussi bien sur l'aspect technique que sur la phase de réflexion et d'amélioration continue du projet.
Pour mener ce projet à bien, nous avons utilisé plusieurs logiciels. La conception de la carte électronique a été réalisée
sur Kicad, tandis que la programmation de cette dernière a été effectuée avec Arduino IDE et Universal G-code Sender.
La modélisation 3D des différentes pièces de la
machine a été conçue sur Onshape. Nous avons également utilisé Processing afin de transformer les dessins en code exploitable par la machine.
Concernant le développement du site web, nous avons travaillé sur Visual Studio Code pour réaliser les parties HTML, CSS et JavaScript
du rendu final. Enfin, l'ensemble du projet a été centralisé sur GitHub afin de regrouper toutes les ressources dans un même dépôt
accessible à tous les membres du projet.
Objectifs
L'objectif principal de ce projet était de concevoir une machine capable de reproduire automatiquement des dessins avec précision,
tout en mettant en pratique les différentes compétences acquises au cours de notre formation. Outre le projet en lui-même, l'un
des principaux objectifs était également de développer nos compétences dans les différents domaines présents au sein de celui-ci.
En effet, puisque chacun d'entre nous se dirige vers une filière différente l'an prochain, nous avons choisi de répartir les tâches afin d'améliorer
nos compétences personnelles. Antoine, qui souhaite s'orienter vers la filière de production automatisée, s'est chargé de la modélisation 3D ainsi
que de la conception de l'ensemble de la machine. Édouard, quant à lui, souhaite s'engager dans la voie de l'énergie électrique, il a donc conçu
et réalisé la carte électronique ainsi que tout ce qui concernait l'électronique du projet. Matthieu et Lucas, qui vont s'orienter vers la filière
informatique et développement, ont réalisé le code permettant de transformer un dessin en instructions exploitables par la machine, mais également
l'ensemble du site web que vous êtes actuellement en train de consulter.
Évidemment, cette liste n'est pas exhaustive et chacun a participé dans tous les domaines. Le projet a été pensé de manière à mettre en valeur
les capacités de chacun, tout en restant avant tout un véritable projet de groupe où tout le monde participe, plus ou moins, à l'ensemble des tâches.
Cahier des charges
Les objectifs du projet étant définis, nous pouvons maintenant aborder le cahier des charges.
Après une longue réflexion, voici ce que nous avons choisi comme cahier des charges :
- Réalisation d'une structure solide et stable
- Création d'un support permettant de maintenir le crayon de manière stable
- Développement d'un système capable de convertir une image ou un dessin numérique en fichier exploitable par la machine
- Conception d'une carte électronique pour commander tout le système de la machine
- Réalisation d'un support pour maintenir la feuille et éviter qu'elle ne bouge
Choix retenus pour la MTD4 !
Le projet étant terminé et fonctionnel, vous trouverez ci-dessous le matériel et les choix que nous avons faits pour mener
à bien notre projet:
- Structure CoreXY
- Firmware FluidNC installé sur la carte ESP32 permettant de contrôler tous les moteurs et de piloter la machine en réseau
- Conception de la majorité des pièces en 3D, clipboard en bois découpé au laser
- Système de changement de couleur en plein dessin
- Paliers de glissement ajustés pour réduire le jeu mécanique
- Développement d'une palette de musique jouable par les moteurs pas à pas
- Système de renvoi mécanique pour la montée et la descente du stylo, permettant d'avoir une tête plus compacte
- Calibration et homing automatiques grâce aux capteurs de fin de course
- Élaboration et amélioration des pièces 3D pour un rendu plus esthétique
- Développement d'un logiciel en Python permettant de transformer un dessin en fichier exploitable par la machine
Vidéo de démonstration
Logiciel de dessin
Le logiciel développé pour le projet Machine That Draws permet de convertir automatiquement une image en instructions
de déplacement exploitables par la machine de dessin. Le programme est entièrement développé en Python et utilise plusieurs
bibliothèques spécialisées comme OpenCV pour le traitement d'image, Tkinter pour l'interface graphique ainsi que des modules
personnalisés pour l'optimisation des trajets et la génération du G-code.
1. Chargement et traitement de l'image
Le fonctionnement du logiciel commence par la sélection d'une image depuis l'interface graphique grâce à un explorateur de fichiers
Tkinter.
Le programme charge ensuite l'image avec la fonction "cv2.imread()".
L'image est convertie en niveaux de gris avec "cv2.cvtColor()".
Cette conversion permet de simplifier les traitements numériques et d'améliorer les performances de détection des contours.
2. Détection des contours
Une fois l'image convertie, le logiciel applique l'algorithme de détection de contours de Canny avec :
"edges = cv2.Canny(gray, 50, 150)"
Les seuils (50,150) permettent d'identifier les contours principaux du dessin tout en limitant le bruit numérique présent dans l'image.
Les contours détectés sont ensuite récupérés grâce à cv2.findContours().
Cette fonction transforme les lignes détectées en ensembles de points exploitables par la machine de dessin.
3. Optimisation des trajets
Les contours obtenus sont ensuite optimisés dans le module "path_optimizer.py".
Simplification des formes
Le programme utilise la fonction "cv2.approxPolyDP()".
Cette méthode réduit le nombre de points nécessaires pour représenter une forme tout en conservant sa géométrie générale. Cela permet :
d'alléger les calculs,
d'accélérer le dessin,
de réduire les mouvements inutiles.
Tri intelligent des contours
Le logiciel trie ensuite automatiquement les contours afin que la machine dessine toujours le contour le plus proche du précédent.
La distance entre deux points est calculée avec :
"math.hypot(p1[0]-p2[0], p1[1]-p2[1])"
Cette optimisation réduit :
la distance totale parcourue,
le nombre de levées de stylo,
le temps global de dessin.
4. Génération du G-code
Une fois les trajets optimisés, le logiciel génère automatiquement un fichier G-code dans le module "gcode_generator.py".
Le G-code est le langage standard utilisé pour piloter les machines CNC et les plotters.
Commandes principales utilisées:
Déplacement rapide
G0 X10 Y20
Permet de déplacer rapidement la tête sans dessiner.
Déplacement de dessin
G1 X50 Y40 F1200
Permet de dessiner une ligne avec une vitesse définie par le paramètre FEEDRATE.
Levée et descente du stylo
M3 S0 -> stylo levé
M3 S40 -> stylo baissé.
Le logiciel ajoute également des pauses (G4) afin de laisser le temps mécanique au servo de déplacer correctement le stylo.
5. Mise à l'échelle automatique
Le programme calcule automatiquement les dimensions du dessin afin qu'il puisse tenir dans la surface utile de la machine. Les paramètres de dimensions sont définis dans le fichier "config.py" : largeur de la machine, hauteur, marges de sécurité, vitesse de déplacement, paramètres du stylo. Le logiciel applique ensuite un facteur d'échelle automatique pour conserver les proportions du dessin sans dépasser les limites physiques de la machine.
Faites le chez vous !
Si vous souhaitez reproduire ce projet par vous-même, tous les supports, les dossiers et fichiers nécessaires à la réalisation sont disponibles sur notre repo github: Repo Github MTD4
Les plans 3D de notre Machine That Draws sont disponibles sur le logiciel Onshape via ce lien: Onshape MTD4