bandeau

RUB1K

Petit projet amusant, un robot capable de résoudre le rubik-cube. Reconnaissance des couleurs, création automatique d'une matrice en ram du cube désorganisé et résolution.
IA en assembleur PIC.

Il existe déjà quelques projets du genre sur le net, j'aimerai tenter une approche différente avec seulement 3 moteurs. Même s'il ne battra pas des records de vitesse comme par exemple celui du MIT, ce sera intéressant à mettre au point.










______________________________ Etude 3D ______________________________



Des servo-moteurs permettent de dégager les pinces pour permettre des rotations et pouvoir explorer la totalité du cube.


Rub1k








______________________________ Electronique ______________________________



Pour que le robot puisse résoudre le cube il faut exécuter une phase de lecture pour qu'il soit capable de reconnaître la configuration de départ du cube mélangé. Un système de reconnaissance des couleurs est la première chose à régler. Partant du principe RVB, j'ai concu un circuit équipé de trois groupes de leds rouge, vertes et bleues et d'une LDR. La LDR est montée en pont diviseur, on illumine la surface à analyser avec chaque groupe de leds colorées tout à tour, la LDR reçoit la lumière réfléchie et on récupère la tension aux bornes du pont diviseur. Une couleur rouge réfléchira mieux les leds rouges, pareil pour le vert et le bleu. 4 grosses leds blanches illuminent la surface à analyser. Le principe fonctionne très bien mais il n'est pas assez sélectif, il a du mal à faire la différence entre le rouge et le orange.


Rub1k

J'ai ensuite fais quelques essais avec un module GY31 qui se dont avérés fructueux. Il exécute exactement la même procédure que mon circuit initial mais retourne une fréquence au lieu d'une tension. Le TCS3200 à gauche de mon prototype:


Rub1k

Premier test rapide, quelques lignes de code pour lire les impulsions arrivant sur la broche T0CKI du Timer1. Le résultat est très bon, les valeurs retournées sont suffisamment distinctes pour permettre les futures comparaison effectuées dans le programme.


Rub1k

Mais il reste néanmoins un souci, celui de la lecture du cube, comment analyser tous les mini-cubes d'une face ? En positionnant précisémment le module et en effectuant des rotations du Rubic on peut lire toutes les bandes extérieures (arêtes et coins) mais pas la bande du milieu (arêtes et centre). Déplacer le module en translation, ce qui complique le hardware, ou bien placer trois modules (deux ne suffiraient pas), on pourrait analyser une face en 4 rotations. Le problème c'est que les dimensions du module GY31 ne le permettent pas, trop grandes. La seule solution que j'ai trouvée c'est de faire un circuit imprimé dédié, le module GY31 dont je dispose est équipé d'un chip TCS3200, j'en ai commandé trois qui seront assemblés de façon à pointer chacun sur des mini-cubes choisis de la face.


Le schéma: 3 TCS3200 avec pour chacun 4 grosses leds blanches d'illumination:


Rub1k

Et l'implantation, un vrai combat de rue le routage de ce circuit !!! Chaque module de lecture fait exactement la taille d'un mini-cube. Le chip 1 analyse un coin, le 2 analyse le centre, le 3 une arête, on analyse tous les mini-cubes d'une face en 4 rotations, le centre étant lu 4 fois mais ce n'est pas un souci, le programme en tiendra compte.


Rub1k







______________________________ Hardware ______________________________



Rub1k

Comme il risque d'être quelque peu malemené j'utilise un vieux cube de basse qualité dont j'ai graissé le mouvement à la graisse silicone.


Rub1k

Je travaille dessus. Avant de passer à la partie programmation je peaufine la mécanique, pour l'instant j'ai quelques soucis avec le système de pinces, elles tiennent mal le cube au dégagement des moteurs et s'enclenchent mal au retour.


Essai d'un nouveau concept de pinces, bois et bandes de tapis de sol.


Rub1k








________________________________ Projet en cours ______________________________




Wouorquine pro graisse



retour