Projet de trieur de Lego

Notre trieur de Lego

Salut à tous,  

Nous sommes 4 étudiants en deuxième année de prépa intégrée à Polytech Angers : Benoit, Julius, Liam et Tristan. Nous nous sommes lancés dans un projet qui consistait à concevoir un trieur de Lego. Une passion commune pour les LEGO nous liait, ce qui s’est avéré être un atout considérable pour nous motiver tout au long de la réalisation de ce trieur. Nous étions ravis de pouvoir combiner nos compétences, et notre créativité afin de concevoir un trieur de Lego qui pourrait être pratique pour les étudiants du Fablab. 

Notre équipe avec respectivement de gauche à droite : Liam, Tristan, Benoît et Julius

De plus, notre attrait pour l’informatique et la pour la mécanique était un plus pour ce projet. Cela nous a permis de nous intéresser pleinement à la programmation et à la conception de ce trieur de lego.  

Durant les 100 heures de projets, nous avons découvert le monde de l’électronique, de la mécanique. Puis, nous avons pu faire de la soudure, de la programmation, de la recherche d’information sur différents composants, et de l’approfondissement sur le logiciel Python.  

Nous espérons que ce blog vous plaira ! 

Déroulement du projet

Le projet s’est déroulé en plusieurs étapes pour aboutir à la conception finale de notre trieur de Lego. Durant toutes nos heures de travail, nous nous sommes séparés en 2 groupes distincts : l’un pour la partie conception LEGO et l’autre pour la partie informatique afin de multiplier notre efficacité sur les différentes tâches à effectuer. 

Nos premières recherches

Partie conception

Tout d’abord, nous avons découvert un youtubeur américain Daniel West qui a conçu un trieur de LEGO capable de trier une multitude de pièces de LEGO à une vitesse considérable. Cela nous a permis d’avoir une idée générale de ce que l’on pourrait créer. 

Voici une petite vidéo de son trieur de Lego : 

Tout au long du projet, nous avons donc organisé notre travail en plusieurs étapes :  

  • Compréhension des moteurs EV3 LEGO 
  • Construction du premier et du second convoyeur en LEGO (à plus grande dimension) 
  • Entonnoir pour canaliser les pièces à l’aide de moteurs-vibreurs 
  • Construction du troisième et dernier convoyeur faisant office de tapis de réception 
  • Construction d’une porte ayant pour rôle de diriger les pièces dans une autre direction 
  • Recherche approfondie pour faire tourner le premier et dernier convoyeur avec le même moteur 

Ces étapes seront davantage détaillées dans la suite de notre blog. 

partie informatique

En premier lieux, nous avons commencé à regarder sur internet s’il existait des projets de détection d’objet en flux vidéo. Nous sommes tombés sur différentes vidéos, mais également sur des blogs de l’ingénieur Australien, Daniel West : 

https://towardsdatascience.com/a-high-speed-computer-vision-pipeline-for-the-universal-lego-sorting-machine-253f5a690ef4

https://towardsdatascience.com/how-i-created-over-100-000-labeled-lego-training-images-ec74191bb4ef

Toutes ces informations nous ont donné de bonnes bases de travail. Elles nous ont permis par exemple de découvrir OpenCV, une bibliothèque libre spécialisée dans le traitement d’images en temps réel. Ainsi, nous avons organisé nos travaux de la manière suivante : 

  • Phase de recherche sur les Raspberry
  • Installation de l’OS de Raspberry sur une carte SD, 
  • Mise en route de la caméra pi et installation d’OpenCV
  • Création d’un programme de détection d’un visage, 
  • Pilotage automatique des convoyeurs via le Raspberry 
  • Création d’un programme capable de détecter des objets et des visages, 
  • Recherche pour la création d’une base de données spécifique à une pièce de lego, 
  • Mise en marche du programme de détection d’objets et des convoyeurs en simultanée. 

Prototype d’un convoyeur

Comme vous avez pu le voir dans les différentes étapes de notre projet en partie conception, nous avons voulu comprendre et observer le potentiel d’un moteur EV3. Ainsi nous avons fabriquer un prototype d’un convoyeur à taille réduite. 

Ce prototype fonctionnait à l’aide d’un bloc EV3 à partir duquel nous avons fait différents tests pour évaluer une vitesse qui pourrait être adapté à nos futurs convoyeurs. 

Cependant, nous avons observé que la construction d’un convoyeur plus grand et plus large était plus compliquée à mettre en place puisque cela nécessitait des axes plus grands et plus solides afin que la structure tourne convenablement.  

Conception de notre système avec les 3 convoyeurs

Nous avions maintenant une idée précise sur la conception d’un convoyeur en Lego et pouvions enfin commencer notre trieur. Nous avions besoin d’un système composé de 3 convoyeurs pour assurer l’acheminement des pièces et maîtriser leur flux. En effet, la maîtrise de flux de pièces était essentiel pour que la caméra installée sur le 3ème convoyeur analyse les pièces de façon efficace et sans erreurs. 

L’idée de base était la suivante : le premier convoyeur devait être plus large pour accueillir notre bac de pièces à trier, le second devait avoir un mouvement saccadé pour entamer la régulation du flux et le troisième devait être très lent pour laisser le temps à notre caméra d’analyser les pièces une par une.  

Vue de notre trieur de lego avec le troisième convoyeur en premier plan

Création de programmes de détections d’objets et de pilotages  

Dès lors que le Raspberry et la caméra PI étaient en place, nous pouvions commencer la création de nos programmes à la fois pour piloter les convoyeurs, mais aussi pour détecter une pièce de lego parmi d’autres. Pour ce faire, nous avons décidé d’utiliser python car il existe de beaucoup de documentation sur Internet.  

Après cette première étape, nous sommes concentrés sur les convoyeurs. À l’aide, d’une carte d’extension HAT pour moteur et de fils de connexion, nous avons connecté les moteurs au Raspberry. Et grâce à un programme, nous étions désormais capables de contrôler les moteurs Lego (vitesse, sens…) :

Carte d’extension HAT pour moteur à courant continu

Ensuite, nous avons travaillé sur un programme capable de détecter une cinquantaine d’objets (table, chaise, porte, fenêtre…), mais aussi des visages via le flux vidéo de la caméra pi. Il fonctionnait grâce à la base de données d’OpenCV, et ses milliers de photos d’objets qu’elle contient :

Programme qui nous permet de reconnaître une personne à l’aide d’une base de donnée précédemment enregistrée

Cependant, dans la base de données d’OpenCV, il n’y pas les pièces de LEGO que l’on souhaiterait détecter. Il faudrait donc arriver à créer notre propre base de données. Mais, pour l’heure, nous n’avons pas réussi. 

Ajout d’un entonnoir pour régler le flux des pièces

Après de nombreux tests de vitesse et de disposition des tapis nous avions réguler considérablement notre flux de pièces mais les pièces étaient encore trop proches les unes les autres pour que la caméra les analyse efficacement et il arrivait que certaines pièces finissent empilées entres elles.  

Nous avons donc décidé d’ajouter un entonnoir vibrant entre les deux premiers convoyeurs pour accentuer la régulation.  

Concernant cet entonnoir, nous avions initialement envisagé de le construire en bois. Cependant, nous avons constaté que les vibrations ne se propageaient pas efficacement dans ce matériau, entravant ainsi le glissement des Lego jusqu’au dernier tapis.  

Nous l’avons donc fabriqué en pièces de LEGO.  

Nous avons fixé des vibreurs sur cet entonnoir et les avons reliés par des fils de connexion sur une plaque d’essai électronique. Le branchement a été effectué en dérivation et les fils de connexion ont été reliés au moteur vibreur par une simple soudure.   

Notre entonnoir et ses vibreurs ainsi que la breadboard pour gérer la connectique

Conception d’une porte sur le 3e convoyeur 

Nous avons également conçu une porte sur le troisième convoyeur qui a pour objectif de s’ouvrir lorsque les pièces non conformes sont détectées par la caméra HD. Celle-ci fonctionne à l’aide d’un moteur LEGO comme vous pouvez le voir ci-dessous. 

Vue de dessus de notre porte et de son moteur

Comment faire tourner 2 convoyeurs de vitesse différente sur le même moteur LEGO? 

Ce problème que nous avons rencontré était complexe à résoudre. En effet, nous étions limités au niveau du nombre de ports sur le Raspberry PI. Il nous manquait un port pour le dernier moteur du troisième convoyeur qui devait avoir une vitesse plus lente que le premier. Nous avons donc pensé à créer deux chaînes de transmission distincte et en utilisant un unique moteur pour le premier tapis et pour le dernier. 

Ce processus était très délicat, car la transmission exigeait beaucoup d’efforts notamment au niveau des axes. Ainsi, après de multiples séances, de constructions et de déconstructions, cette tentative de solution au problème était un simple échec.    

Premier essai de transpmission de puissance entre le
premier et le dernier convoyeur

Nous avons donc, tout simplement branché sur le même port du Raspberry PI, le premier et le dernier moteur LEGO associé à leurs convoyeurs respectifs (c’est à dire le premier et le troisième). Par la même occasion, nous avons rajouter un réducteur sur le dernier convoyeur afin de réduire sa vitesse. Ainsi, la contrainte de vitesse était respectée. 

Réducteur installé entre le moteur et
le troisième convoyeur

Bilan de notre projet 

Voici notre version finale de notre trieur de lego (nous n’avons malheureusement pas pu faire fonctionner les vibreurs au moment de la vidéo 😢)

Nous avons pris beaucoup de plaisir sur ce projet. Nous avons amélioré grandement nos compétences dans les domaines de la programmation, de l’électronique et de la gestion de projet. Cependant, nous sommes à la fois déçus de ne pas avoir abouti le projet mais ravi de transmettre celui-ci aux futurs deuxième de l’année prochaine. En effet, nous espérions détecter les différentes pièces Lego du fablab à l’aide de la caméra pi.  Nous remercions Sylvain Verron pour sa bienveillance et son encadrement. 

Nous espérons que ce blog vous aura plu. On vous remercie de l’avoir lu. 😉