IMA3/IMA4 2021/2023 P5
Présentation
Introduction
Dans notre école, Polytech'Lille, nous avons un Fabricarium équipé d'imprimantes 3D. Pour pouvoir utiliser ces imprimantes 3D, il faut prendre un rendez-vous aux horaires disponibles. Par la suite, il faut déterminer le modèle 3D désiré que l'on va convertir en fichier G-code. Ce fichier G-code est compréhensible par l'imprimante 3D par conséquent, il faut mettre ce fichier sur une carte SD que l'on va par la suite mettre dans l'imprimante. De plus, durant les premières minutes, il faut surveiller notre impression pour éviter un décollement de la matière. Tout cela implique plusieurs aller-retour entre la machine 3D et votre ordinateur et donc une perte de temps considérable.
Objectif
Notre projet se concentre sur l’implémentation d'une toute nouvelle solution de gestion du parc imprimante 3D de Polytech-Lille. En effet afin de palier aux indisponibilités des imprimantes lors des heures de grande sollicitation, de la nécessité d'être présent sur place pour lancer une impression ou de suivre les étapes du processus, nous allons mettre en place une interface en ligne permettant la réservation de créneaux et de développer une solution de surveillance de l'avancement.
Ainsi, notre but durant ces séances est de chercher des solutions pour répondre aux problèmes posés. En ce qui concerne les cartes SD et les clés USB, nous en aurons plus besoin puisque nous allons installer un Raspberry Pi sur notre imprimante. Celui-ci servira d’intermédiaire entre l'ordinateur utilisé pour lancer l'impression et l'imprimante 3D. Pour cela nous allons utiliser Octoprint, un logiciel open source qui nous permettra de lancer l'impression à distance, de l’arrêter, de connaître le temps d'impression mais aussi de pouvoir visualiser notre impression en temps réel. Octoprint pourra nous fournir plus d'informations concernant notre impression grâce à des requêtes que l'on va effectuer.
Description
Au niveau des imprimantes 3D de l'école, nous avons pour but d'installer des Raspberry Pie 4 que nous allons programmer au sein d'un réseau mettant en liaison toutes les imprimantes 3D. Des données issues des impressions vont ainsi être transmises afin d’accéder à l'état des impressions, la disponibilité des imprimantes et des erreurs potentielles. Cette Raspberry Pie 4 rattachée à une caméra retransmet en vidéo le déroulé de l'impression.
On pourra ainsi y détecter des défauts d'opération comme des décollements ou des malformations. Au-delà du recueil des informations des impressions, l'utilisateur grâce à notre interface aura la possibilité de programmer son impression dans un planning et donc la lancer à distance. Une aide d'utilisation de l'interface sera fournie et permettra à n'importe qui de se former au lancement d'impression.
Préparation
Cahier des Charges
Les fonctionnalités qu’on souhaiterait mettre en place sont :
Contrôle centralisé de plusieurs imprimante 3D
Gestion d’impression à distance
Être avertis d’erreur dans l’impression
Avoir la possibilité d’observer l’impression à distance
Centraliser tout le processus sur une interface en ligne
A la suite d'une étude sur la faisabilité des taches, nous avons conclu leur difficulté à mettre en exécution :
Gant
S7
Au cours de ce semestre, nous nous sommes lancés dans la recherche d’information afin d’aboutir à la conception de notre système et à la réalisation de tests. Dans ce but, une étape primordiale est de diviser notre travail afin d’avancer le plus rapidement dans la démonstration de la faisabilité d’un prototype. Ainsi, nous avons réparti nos tâches en fonction de nos compétences et nos connaissances.
En effet, Paul Amoros et Touria El Azrak se sont occupés de la partie Raspberry Pi et sa configuration. Notamment leur travail a consisté en la l’installation et la structuration d’Octoprint et des ses différentes librairies, la connexion au réseau et l’installation et le contrôle de la caméra sur la Raspberry.
D’un autre côté, Arthur Dollet et Grégoire Chichery ont développé la partie programmation et gestion de requêtes. Nous avons préparé un début d’interface pour l’envoie du Gcode, l’envoie à distance de commande et requêtes à l’imprimante, utilisation d’API pour Octoprint. Nous avons planifié notre organisation autour du diagramme de Gantt ci-dessous:
Choix technique/matériel
Pour pouvoir se connecter à distance aux imprimante 3D du fabricarium, et comme elles sont dépourvues d’antennes et de cartes réseaux : Nous avons fait le choix de connecter via liaison série une Raspberry Pi qui permettra de jouer ce rôle.
Dont voici les spécifications :
Processeur quadricœur ARM Cortex-A53 à 1,2 GHz Mémoire vive (RAM) de 1 Go Connectivité sans fil Wi-Fi (IEEE 802.11b/g/n) et Bluetooth 4.1 4 ports USB 2.0 1 port Ethernet Sortie audio et vidéo HDMI Prise jack audio 3,5 mm Slot pour carte microSD Alimentation via micro-USB Dimensions: 8,5 cm x 5,7 cm
Le choix de la raspberry était évident. En effet une carte Raspberry Pi est un petit ordinateur de la taille d’une carte de crédit, qui peut facilement être connecté à Internet et servir d’interface à de nombreux composants électroniques. En plus d'être efficace, il est petit. Nous ne cherchons pas quelque chose d’imposant. Puisque nous allons le coller à l'imprimante (ou le poser à côté), il est impératif que celui-ci ne soit pas imposant, puisqu'il ne doit pas déranger. S’ajoute à cela un prix peu coûteux.
La Raspberry Pi utilise une carte SD comme disque dur, pour être plus précis il s'agit depuis la version B+ de la Raspberry Pi d'une carte MicroSD. Il est important de flasher la carte SD, c'est-à-dire télécharger Octoprint dans la carte SD.
Puisque nous n'avons pas d'écran avec notre Raspberry Pi alors nous avons eu besoin d’un câble HDMI qui servira à faire la liaison entre notre Raspberry Pi et l'écran d’ordi ou de télévision. Il est important d’avoir accès au terminal pour interagir directement avec le micro processeur au début.
De plus, pour effectuer la liaison direct avec l'imprimante nous utilisons un câble USB 3.0 - USB-b.
Une Webcam USB branchée sur le Raspberry Pi sera utile pour visualiser en temps réel l’impression 3D.
Pour nos tests et la réalisation de notre projet, nous allons utiliser les imprimantes du Fabricarium qui sont les Dagomas. Elles fonctionnent de la même façon qu’une imprimante 3D ordinaire: les machines 3D permettent de déposer le matériau, alors sous forme de bobines de filament, sur une plateforme, ou lit d'impression, couche par couche. Le filament est fondu et déposé couche par couche à l'aide d'une buse d'impression.
En plus du matériel, nous avons besoin de choix pour le logiciel embarqué de la Raspberry Pie. Nous avons pris le temps de choisir parmi ces utilitaires, et nous avons choisi Octoprint, beaucoup plus facile d’utilisation, gratuit et utilisable sur plusieurs Raspberry et enfin toujours mis à jour régulièrement avec une grande communauté derrière.
De manière générale, nous schématisons notre solution complète ci-dessous :
Réalisation
Projet S7
Raspberry Pie 4
L’objectif est donc de configurer un serveur Web sur notre Raspberry, qui sera l’interface entre les utilisateurs et les imprimantes 3D.
Pour commencer, il faut installer un OS sur la Raspberry. Afin de voir à quoi ressemble un système d’exploitation déjà beaucoup utilisé pour réaliser de la gestion d’imprimantes 3D, nous avons installer l’OS open source Octoprint, qui ne possède pas d’interface graphique, mais tout le nécessaire pour disposer d’un serveur web par lequel envoyer des requêtes à l’imprimante 3D connectée et avoir toutes les informations sur l’imprimante et l’impression en cours via une interface web.
Nous avons cherché à la configurer pour qu’elle puisse se connecter automatiquement au réseau de l’école, ce qui n’a pas été chose facile. L'outil principal que nous avons utilisé pour configurer une connexion automatique de la Raspberry sur un réseau Wifi est le fichier wpa_supplicant, dans lequel on peut inscrire des noms de réseaux ainsi que les mots de passe de ces derniers, auxquels la Raspberry tentera de se connecter automatiquement au démarrage.
Pour se connecter au réseau de l'école et donc Polytech’Lille, il faut un identifiant et un mot de passe et non seulement un “SSID” ( un nom) et un mot de passe. Or, malgré de nombreuses recherches et de très nombreux tests, le fonctionnement de la connexion automatique sur le réseau de l’école Polytech Lille n’était pas possible.
Nous nous sommes alors rabattus sur le wifi “PolytechGuests”. Le mot de passe de celui-ci change tous les jours et donc la connexion automatique à ce réseau n'était pas possible pour notre Raspberry Pi. S’ajoute à cela le fait que cette connexion était instable à certains endroits dans le fabricarium. Nous avons perdu beaucoup de temps à trouver une solution pour que notre Raspberry Pi puisse avoir de la wifi.
La solution que nous avons donc finalement utilisée pour pouvoir réaliser nos tests d’envoi de requêtes Gcode (que nous allons expliciter plus tard), le temps de trouver une solution stable finale pour notre projet concernant la connexion de la carte à Internet, a été l’utilisation d’un partage de connexion avec nos téléphones mobiles, auxquels la Raspberry arrivait à se connecter à tous les coups.
Pour finir, afin de trouver une solution pérenne, nous avons fait une demande au service informatique de whitelist de l’adresse mac de la Raspberry que nous utilisons sur le réseau de l’école afin que nous puissions la connecter au réseau Ethernet dans le Fabricarium.
Octoprint
Cette interface nous servira à visualiser notre impression à distance, à éteindre et allumer l’imprimante mais aussi à avoir la température de l'imprimante ou d'autres informations en téléchargeant des librairies.
Octoprint, comme dit auparavant, est un système open source pour contrôler et surveiller à distance votre imprimante. Démarrer/arrêter/mettre en pause les impressions, modifier les températures et les paramètres d'impression pendant l'impression, diffuser de la vidéo ou capturer des images pendant l'impression. Parmi plusieurs logiciels de ce type comme Astroprint, 3DPrinterOs, notre choix s’est porté sur Octoprint car c’est un logiciel Open Source. De plus, celui-ci offre un large choix de configuration.
Après avoir connecté la Raspberry Pi au wifi “PolytechGuests” (pour les jours ou ça fonctionnait) nous réussissions à avoir une adresse IP (172.26.137.14). Cette adresse IP, nous la saisissons sur un moteur de recherche. Il ne faut pas oublier qu’il est indispensable de se connecter à ”PolytechGuests” sur l'ordinateur avec lequel nous voulons nous connecter à Octoprint, afin que la Raspberry et la machine qui se connecte soient sur le même réseau. Nous nous retrouvons sans problème sur notre interface, il suffit de rentrer les identifiants que l’on a configurés.
Dans un deuxième temps nous avons téléchargé des librairies (ou plugin) sur OctoPrint qui nous fournirons les informations désirées qui nous faciliteront l’utilisation des imprimantes du fabricarium.
Par exemple, si nous voulons afficher les informations qui nous intéressent concernant les températures alors c’est le plugin Navbar Temperatur qu’il suffit de télécharger et de configurer.
Soc= température du Raspberry
Extrudeur= température de l’extrudeur
Plateau= température du plateau
Nous aurons un affichage qui ressemblera à ça.
Nous avons téléchargé plusieurs plugin:
Autoscroll : sert à avoir un terminal dans l’interface et à retrouver certaines information dessus
Bad Visualizer: sert à nous donner une topographie de notre plateau, visualiser son état
Octoprint-Autoprint: Outil pour démarrer automatiquement l'imprimante et imprimer à distance
Plusieurs plugins ont été installés sur notre Raspberry, il en reste d’autres à installer.
De plus, pendant le branchement entre la Raspberry Pi et l’imprimante, la Dagoma (Imprimante) s'allume en étant alimentée par la Raspberry Pi ce qu'on ne veut pas puisque nous voulons aussi gérer l’extinction et le démarrage via Octoprint. Une solution possible est de mettre du scotch sur le connecteur qui permet l’alimentation à l'intérieur du port USB.
Requêtes
Les fichiers de requêtes Gcode sont stockés dans des fichiers sur la Raspberry, et nous avons réalisé un programme Python qui utilise la librairie pyserial pour ouvrir une liaison série en USB avec une imprimante 3D, et pour lui envoyer des requêtes Gcode interprétées pour réaliser différentes actions avec l’imprimante.
Les différentes actions possibles sont: demande de mouvement à certaines coordonnées du plateau d’impression (simple déplacement ou impression) requête pour obtenir des informations de l’imprimante (par exemple la température)
La liste de toutes les commandes G-code utilisées par le Firmware Marlin (installé sur les imprimantes 3D du Fabricarium) sont accessibles sur ce wiki: https://reprap.org/wiki/G-code.
Les fichiers contenant du GCode sont de simples listes de commandes que les imprimantes lisent dans l’ordre. Actuellement, nous sommes en passe de finir un programme Python qui permet d’envoyer sur la liaison USB avec l’imprimante une ligne de commande tirée d’un fichier GCode, d’attendre la réponse de bon déroulement de l'action demandée de l’imprimante (réponse: “Ok” renvoyée sur la liaison USB), et de passer à la commande suivante.
Interface
En parallèle de la configuration du raspberry sur l’imprimante 3D, on a cherché un moyen de pouvoir envoyer directement des informations sur l’imprimante à distance. Pour pouvoir imprimer ou récupérer des données sur l’impression par exemple.
Il faut donc envoyer au mini-ordinateur connecté à l’imprimante, et son OS est octoprint, qui est une interface pour imprimante 3D mais aussi un serveur qui a une API.
On s’est dit qu’on pourrait alors faire des requêtes sur cette API. Une requête HTTP(ou https (plus sécurisée) est la même fonction que lorsque vous vous connectez à un site internet. Votre navigateur effectue une requête au serveur du site internet auquel vous essayez de vous connecter, et il vous renvoie la page demandée (html …).
Mais nous ici ce n’est pas le serveur d’un site web que l’on interroge mais notre serveur Octoprint sur la raspberry au sujet de votre Imprimante.
On pourra par exemple demander à l’API à quelle température est la buse, lui envoyer des fichiers à imprimer etc …
En utilisant la méthode GET, on peut recevoir des informations.
En utilisant la méthode POST, on peut envoyer des données au serveur afin qu'il les traite et qu'il renvoie une réponse. Elle est souvent utilisée pour envoyer des formulaires ou des données d'application à un serveur.
En utilisant la méthode PUT, cette méthode est utilisée pour envoyer des données au serveur afin qu'il les stocke sous une certaine forme. Elle est souvent utilisée pour mettre à jour des données existantes sur le serveur..
On utilisera principalement ces méthodes ci.
Une requête est constituée comme ceci :
Puis dans l’optique d’intégrer cela à une interface web, il fallait trouver un moyen de faire des requêtes et d’utiliser les informations reçues. On a donc décidé de les faire en php à l’aide de cUrl qui est un utilitaire de ligne de commande qui permet de transférer des données en utilisant différents protocoles de réseau.
On a ensuite créé un site web rapidement pour envoyer et recevoir quelques informations de l’API pour prouver le fonctionnement de celle-ci.
C’est un début de prototype réalisé en HTML, CSS et avec des balises PHP qui font les requêtes.
Voici la page d’accueil (index) ou à l’avenir on pourra cliquer sur toutes les imprimantes disponibles.
Ensuite sur la page de l’imprimante on voit si l’imprimante est déjà en impression et si non, on peut lancer l’impression.
Ici la réponse est vide, car nous ne sommes pas sur le même réseau que la Raspberry donc on affiche “printer is disconnected”.
On a eu beaucoup de problèmes au début car la connexion avec la raspberry était difficile, et il a aussi fallu apprendre plusieurs langages de programmation mais dans l’ensemble ça a vraiment bien fonctionné.
Tests
On a testé tout d’abord la Raspberry pour savoir si elle était bien connectée à l'imprimante puis au réseau local de l’école.
Ensuite nous avons réalisé des tests sur Octoprint, on a envoyé des commandes en Gcode à l’imprimante qui s'exécutait comme il le fallait. (La température, de retrouver les axes, de revenir à son point d'origine, une petite impression).
Puis on a testé la même chose mais depuis l’API, en envoyant des requêtes HTTP.
On a implémenté des plugins et testé nos différents équipements tel que la caméra. Un plugin pour éteindre et allumer l’imprimante à distance a été installé, celui-ci ne marche pas car nous avons besoin d’une prise TP-LINK que nous n'avons pas commandée.
Résultat
Projet S7
A la suite des tests, nous avons pu valider certaines fonctionnalités comme :
Pour la partie Raspberry Pie :
- l'acquisition d'une adresse IP Raspberry Pie:
-la connexion de la caméra à Octoprint qui marche bien
-l'accès à Octoprint via la Raspberry Pie
Pour la partie Interface/Requêtes :
-envoie des Requêtes sur la RassberryPie
-amorce d'une interface
Problèmes
L’une des problématiques principales que nous avons rencontré ce semestre est la connexion de la Raspberry à un réseau Internet, afin que nous puissions communiquer avec cette dernière depuis un appareil distant sur le même réseau.
Pour finir, afin de trouver une solution pérenne, nous avons fait une demande au service informatique de whitelist de l’adresse mac de la Raspberry que nous utilisons sur le réseau de l’école afin que nous puissions la connecter au réseau Ethernet dans le Fabricarium.
De plus, il arrive que la carte ne se connectait pas correctement aux réseaux alors que la configuration avait déjà fonctionné par le passé, et parfois, elle se connectait au réseau de l’école alors qu'aucune configuration particulière n’avait été réalisée.
Enfin plusieurs plugins ont été installés sur notre Raspberry, il en reste d’autres à installer.
Amélioration
Pour faciliter la vie des utilisateurs, nous avons pensé à ce que Octoprint soit accessible même en dehors de Polytech pour visualiser en temps réel les impressions et avoir les informations souhaitées. Après quelques recherches, nous avons alors trouvé un tutoriel qui normalement devrait marcher mais dans un premier temps nous allons discuter avec le FabManager pour avoir son avis sur la question.
En ce qui concerne le fait de se connecter au réseau de l'école, nous avons émis une demande au service informatique. En effet nous avons fourni l’adresse MAC de la Raspberry, pour qu'il puisse donner l'accès et que nous n’ayons plus de difficulté à avoir accès à ce réseau.
Ensuite se pose la question de “Combien de Raspberry Pi va-t-on mettre ?”. Si nous mettons un seul Raspberry par imprimante, on songe que cela sera trop coûteux . Nous avons alors pensé à une Raspberry pour 4 Dagomas. Si nous mettons trop d’imprimantes par RPi, il se peut qu’il y ait un problème de débit de traitement des images au niveau de la Raspberry. En revanche, chaque imprimante aura sa propre caméra.
On a aussi remis en doute l’utilisation d’Octoprint, car un Raspberry Pi coûte cher et si on doit en installer un par machine nous ne sommes rapidement plus rentables. Alors il faudra se mettre d’accord sur: soit trouver une manière d’en faire fonctionner plusieurs sur une raspberry et de brancher plusieurs imprimante dessus, soit de le faire en partant de 0, en envoyant du Gcode par liaison série puis trouvé un moyen de communiquer à distance dessus.
Si on continue dans ce dans quoi nous étions partis nous devrons : Améliorer l’interface web rajouter des nouvelles fonctionnalités
-Implémenter une manière de gérer des utilisateurs
-Ajouter la possibilité d'envoyer un fichier à imprimer directement sur le site
-Ajouter la possibilité de regarder la webcam (ou pas si on a plusieurs imprimantes par raspberry ça risque d’être compliqué, car le processeur n’est pas assez puissant)
-Ainsi qu’une manière de détecter/gérer les erreurs
Bilan
Projet S7 : Bilan et perspectives pour le S8
Il faut continuer sur cette lancée en ne mettant à l'écart aucune hypothèse ou amélioration. En revanche, au prochain semestre nous devons faire plus de tests pour détecter les erreurs au plus vite et les corriger.
Les buts du prochain semestre sont les suivants: Avoir une connexion au réseau Polytech Lille stable sur la Raspberry pour qu’elle ait la même adresse IP (whitelist sur le réseau Ethernet de l’école)
-Améliorer notre interface
-Lancer une impression à partir de Octoprint
-Lancer une impression et récupérer les données grâce aux requêtes
Arthur Dollet et Grégoire Chichery continueront de s’occuper de la partie requêtes à envoyer, El Azrak Touria et Amoros Paul quant à eux poursuivront sur leur travail réalisé sur la Raspberry Pi et Octoprint. Chaque binôme a encore beaucoup de choses à faire. En effet, le premier doit améliorer son code pour que Octoprint puisse bien comprendre l’information qu’il doit fournir et le second doit télécharger plus de plugins pour avoir plus de fonctionnalités.
Si durant le prochain semestre tous ses buts sont atteints alors nous pouvons réfléchir, dans notre interface web, à mettre un système qui puisse gérer les réservations pour l’utilisation des imprimantes. Nous pouvons également réfléchir à comment améliorer nos branchements pour qu’ils soient moins encombrant: puisque pour l’instant nous posons la Raspberry à côté de l’imprimante sans l'attacher définitivement.