Robot Wall-e en lego

Hacking d'un Wall-e Lego pour le motoriser

Bonjour,

J’étais dans un centre commercial quand je suis tombé nez-à-nez avec un Walle-e en lego dans une boutique. Comme tout geek qui se respecte, j’ai adoré le film wall-e quand j’étais enfant. Je demande donc de le voir plus prêt, car à 60€ c’est un investissement. Et là après plusieurs minutes, le constat est sans appel : avec quelques coups de dremel et de fer à souder, je pourrais motoriser le wall-e et le téléguider depuis mon portable. Tous les détails et la démarche dans la suite 😉

Présentation

Attention aux fausses idées, le wall-e n’a pas vocation à être motorisé. Il est articulé d’origine, mais rien n’est prévu pour l’ajout d’un moteur. Il va donc falloir bricoler, couper, coller et autre. Il ne s’agit pas non plus de Mindstorme, la taille du wall-e est trop petite. Bref du pur hackage

Comme sur le vrai Wall-e, il y a une trappe avant qui permet d’accéder à l’intérieur du wall-e. L’espace n’est pas très grand (pas assez pour une raspberry pi), mais assez pour une arduino micro, une antenne bluetooth, et un circuit de commande. L’idéal sera de tout faire sur une plaque à souder pour optimiser l’espace.

Je me fixe le cahier des charge suivant :

  • les deux chenilles sont motorisées dans un sens par moteur à courant continu. Le pont en H prenait trop de place, et ça libère deux sorties PWM pour autre chose.
  • Les deux bras sont motorisés par servo moteur.
  • Les deux yeux sont motorisés par servo moteur. Vu que l’on ne met pas de marche arrière, on peut se permettre de motoriser les yeux 🙂

Voici la liste des courses si vous souhaitez le refaire. Le panier ne dépasse pas les 30€

Electronique

Le choix d’un powerbank est simple. Il comprend déjà tout le circuit de puissance pour délivrer du 5V continu, et il prend aussi le circuit de recharge par USB. Il suffit juste de retirer la coque et de venir souder votre batterie (celle de l’annonce était au final trop grosse) ainsi que votre sortie 5V.

Sur ma carte de commande, il y a donc une carte arduino micro, 4 broches pour servos moteurs, 2 transistors MOSFET avec deux borniers, le circuit électrique du powerbank et une broches pour l’antenne bluetooth.

Voici une photo de l’ensemble est son schémas. La carte verte au premier plan est le circuit du powerbank. img

Conception

Pour le montage du wall-e je vous laisse faire avec la notice. Pour le bricolage je n’ai pas de plan, j’ai fais sur le moment un peu au hasard, le résultat est plutôt pas mal. Je vous laisse les photos pour que vous situez où retirer des pièces, découper et coller.

Mise en place des moteurs pour les chenilles

conception

Mise en place des bras bras

Mise en place des yeux yeux

Et l’aperçu final final

Informatique

L’informatique comprend deux programmes : Arduino et Android

Arduino

Le programme arduino est extrêmement simple. Le module bluetooth s’occupe de tout le boulot, il envoie les informations reçus directement sur un liaison série. Il ne reste plus qu’à écouter les ordres. Personnellement j’encode les données sous la forme d’une trame de deux ou trois bytes [commande, valeur1, (valeur2) ]. La commande indique quels moteurs nous souhaitons contrôler.

#include <Servo.h>
#include <SofwareSerial.h>

SoftwareSerial bluetooth(8, 7); // (RX, TX) (pin Rx BT, pin Tx BT)


// servo parameters depend to your servo runs
int left_eye_start  = 31;
int left_eye_end    = 65;

int right_eye_start = 98;
int right_eye_end = 48;

int left_arm_start  = 108;
int left_arm_end    = 40;

int right_arm_start = 95;
int right_arm_end   = 180;

Servo left_eye;
Servo right_eye;
Servo left_arm;
Servo right_arm;
int left_caterpillar = 5;
int right_caterpillar = 3;



void setup() {
  // Setup connections
  Serial.begin(9600);
  bluetooth.begin(9600);

  // Setup motors with start values
  left_eye.attach(6);
  left_eye.write(left_eye_start);
  right_eye.attach(9);
  right_eye.write(right_eye_start);
  left_arm.attach(10);
  left_arm.write(left_arm_start);
  right_arm.attach(11);
  right_arm.write(right_arm_start);


  pinMode(left_caterpillar, OUTPUT);
  pinMode(right_caterpillar, OUTPUT);
}

void loop() 
{
    if (bluetooth.available()) {
      
        // Read bluetooth value from serial
        int id = (int) bluetooth.read();
        int value1 = (int) bluetooth.read();
        while (value1 == -1)
          value1 = (int) bluetooth.read();
        int value2 = (int) bluetooth.read();
        while (value2 == -1)
          value2 = (int) bluetooth.read();
        

        // match the correct action by ID command
        switch(id) {
          // left eye
          case 1 :
            if(value1)
              left_eye.write(left_eye_start);
             else
              left_eye.write(left_eye_end);
          break;

          // right eye
          case 2 :
            if(value1)
              right_eye.write(right_eye_start);
             else
              right_eye.write(right_eye_end);
          break;

          // left arm
          case 3 :
            value1 = left_arm_end + value1*(left_arm_start - left_arm_end)/100;
            left_arm.write(value1);
          break;

          // right arm
          case 4 :
            value1 = right_arm_end + value1*(right_arm_start - right_arm_end)/100;
            right_arm.write(value1);
          break;

          // caterpillar
          case 5 :
            analogWrite(left_caterpillar, value1);
            analogWrite(right_caterpillar, value2);
          break;
          
        }
        
    }

}

Android

Pour le programme android, j’ai rajouté un petit plus : on pilote l’avance du robot par l’orientation du portable, donc par les retours du gyroscope et de l’accéléromètre. Les bras sont pilotés par des JSlideBar (ils sont personnalisés pour pouvoir être mis à la vertical), les yeux sont pilotés par des JRadioButton, bien que l’on pourrait commander précisément l’angle des yeux, j’ai choisi un tout-ou-rien entre deux valeurs.

L’activité principale collecte les données des capteurs et de l’interface graphique, et les envoie vers un contrôleur, qui va s’assurer de la conformité de données, enfin on les envoie en bluetooth à travers une classe.

code source de l’application : https://github.com/FrancoisJ/wall-e_app