Bonjour à toutes et à tous,
Nous sommes Bilal, Mélissa et Rémi, 3 étudiants en seconde année de classe préparatoire à Polytech Angers. Dans le cadre de notre cursus, nous avons choisi de réaliser un solveur de Rubik’s Cube. Pour cela, nous étions accompagnés de notre tuteur M. Lagrange.
Après un semestre de projet, voici le résultat final que nous avons obtenu :
Pour fabriquer ce solveur, nous nous sommes répartis le travail, et nous avons séparé notre projet en plusieurs parties :
- Etude
- Conception CAO
- Programmation
- Montage
L’Étude
Pour commencer, nous avons réfléchi à la façon de concevoir le solveur et avons procédé à des recherches.
Nous n’avions pas de contrainte spécifique pour notre projet, le but n’étant pas d’atteindre des performances de compétition, notamment en termes de vitesse.
Ainsi, nous avons choisi les fonctionnalités suivantes :
- une interface graphique permettant de donner des instructions au robot.
- l’utilisation de la méthode de résolution classique pour le solveur.
- la possibilité pour le robot de mélanger le Rubik’s Cube tout seul.
- le fait de ne pas utiliser de capteur pour connaître l’état du cube : celui-ci est entré par l’utilisateur au lancement du programme.
Afin de mettre ce cahier des charges en application, nous avons opté pour une structure cubique entourant le Rubik’s Cube, avec un moteur pour chaque face.
Pour cela, nous avons eu besoin de :
- MakerBeams (équerre, profilé, cube coin)
- Un Rubik’s cube
- 6 moteurs Dynamixel AX-12A
- un starter kit Dynamixel
Nous avons choisi les moteurs Dynamixel que M. Lagrange nous avait recommandé car ils correspondaient à nos critères.
La Conception CAO
Lors de la partie conception, nous avons réalisé à l’aide de SolidWorks, un logiciel de CAO, les différentes pièces nécessaires pour la structure de notre projet. Cela nous a permis de nous assurer que le solveur était faisable.
Cet assemblage contient des pièces de notre création imprimées en 3D, qui relient les moteurs et le Rubik’s Cube. Nous avons donc dû tester plusieurs prototypes différents afin de voir lequel fonctionnerait le mieux.
La Programmation
Pour le programme, nous avons suivi la méthode de résolution classique d’un Rubik’s cube car c’est cette méthode que nous connaissons le mieux. Pour ce faire, nous avons réalisé une simulation du Rubik’s Cube en Python à l’aide d’un patron du cube.
La méthode classique résout le cube étage par étage, nous avons donc divisé le programme en plusieurs fonctions simples pour chaque partie de la résolution.
Le cube étant bloqué dans la structure, nous avons ajouté un programme qui permet de le mélanger aléatoirement pour qu’il puisse fonctionner en autonomie.
Afin de lier les moteurs au programme, nous avons dû utiliser une bibliothèque python distribuée par Dynamixel.
Pour finir le programme, nous avons ajouté une interface grâce à pygame (bibliothèque graphique) permettant de donner des instructions au programme et de relier les différentes parties.
Le Montage
L’assemblage à réellement commencé avec l’arrivé des moteurs. Nous avons pu construire une structure en MakerBeams pour les tenir. Ensuite, nous avons relié les moteurs en série, et l’un d’eux à la carte, pour qu’ils puissent être connectés au programme.
Conclusion
Finalement, nous avons réussi à construire un solveur de Rubik’s Cube capable de mélanger et résoudre un Rubik’s Cube. Cependant, nous avons pu remarquer que dans certaines situations, les faces ne tournaient pas en raison de l’imprécision de la pièce reliant le moteur et le cube. Il faudra donc l’améliorer pour éviter ce défaut.
Nous avons trouvé ce projet très intéressant car il nous a permis de nous améliorer en programmation et en modélisation 3D. De plus, l’aspect concret nous a permis de voir l’avancement de notre projet. Enfin, cela nous a permis de travailler en équipe et en autonomie des compétences qui nous serons très importantes dans notre futur professionnel.
Si vous souhaitez en savoir plus, vous trouverez notre rapport ci-dessous
Merci à tous d’avoir lu notre article !
Bilal, Mélissa et Rémi