À l’occasion de l’atelier robotique du 24/05/2015, Richard, Cyrille, Clément, Gilles et Alain ont tenté de redonner vie à ce grand père des années 80.

Comment sommes nous arrivés à « contrôler » ce robot ?

  • En nous documentant en particulier sur ce site incontournable : http://youpi.forler.ch/
  • Nous avons vérifié le câble de liaison parallèle à l’aide d’un multimètre et d’un trombone pour réaliser le contact coté fiche femelle.
  • Premier test avec un PC sous GNU\Linux en envoyant les codes à l’aide d’une console de terminal. (genre : echo « code » > /dev/lpt0) . Sans succès :-(
  • Deuxième test avec un PC sous un vieil OS privateur et plusieurs logiciels glanés sur la toile. Sans succès :-(
  • Troisièmes essai avec un Arduino, un câble fait maison et un p’tit programme de base. Sans succès :-(

Le désespoir commençait à nous gagner (nous n’avions plus d’idée de test…) lorsque Richard dit «ton câble commence sur la broche 1 ?» «oui» «bah c’est pas bon…»

Une soudure plus tard, nous refaisions le test avec succès ! :-) Le «grand père» venait de frémir :-) , sans suivent une multitude de tests pour vérifier le bon fonctionnement de tous les axes du robot à l’aide du code Arduino ci-dessous.

/*
  Programme de base pour tester un robot Youpi.
  Le 24/04/2015
  AlGau
  http://calvix.org
  
  Voir aussi : http://youpi.forler.ch/
 */
 
// déclaration des n° de sorties utilisées
int bit_01 = 0;
int bit_02 = 1;
int bit_03 = 2;
int bit_04 = 3;
int bit_05 = 4;
int bit_06 = 5;
int bit_07 = 6;
int bit_08 = 7;

// délai entre l'envoi de deux octets
int delai = 1;


// fonction d'initialisation
void setup() {                
    // initialisation des sorties
    pinMode(bit_01, OUTPUT);
    pinMode(bit_02, OUTPUT);
    pinMode(bit_03, OUTPUT);
    pinMode(bit_04, OUTPUT);
    pinMode(bit_05, OUTPUT);
    pinMode(bit_06, OUTPUT);
    pinMode(bit_07, OUTPUT);
    pinMode(bit_08, OUTPUT);

    delay(delai);    
    
// initialisation du robot
// 47h
    digitalWrite(bit_01, HIGH);
    digitalWrite(bit_02, HIGH);
    digitalWrite(bit_03, HIGH);
    digitalWrite(bit_04, LOW);
    digitalWrite(bit_05, LOW);
    digitalWrite(bit_06, LOW);
    digitalWrite(bit_07, HIGH);
    digitalWrite(bit_08, LOW);
    delay(delai);
// 00h
    digitalWrite(bit_01, LOW);
    digitalWrite(bit_02, LOW);
    digitalWrite(bit_03, LOW);
    digitalWrite(bit_04, LOW);
    digitalWrite(bit_05, LOW);
    digitalWrite(bit_06, LOW);
    digitalWrite(bit_07, LOW);
    digitalWrite(bit_08, LOW);
    delay(delai);
    
// commande sens de rotation
    digitalWrite(bit_01, LOW);    // base
    digitalWrite(bit_02, HIGH);    // Epaule
    digitalWrite(bit_03, HIGH);    // Coude
    digitalWrite(bit_04, HIGH);    // Poignet
    digitalWrite(bit_05, HIGH);    // Poignet (rotation)
    digitalWrite(bit_06, HIGH);    // Pince
    digitalWrite(bit_07, LOW);
    digitalWrite(bit_08, HIGH);    
    delay(delai);

    digitalWrite(bit_01, LOW);    // base
    digitalWrite(bit_02, HIGH);    // Epaule
    digitalWrite(bit_03, HIGH);    // Coude
    digitalWrite(bit_04, HIGH);    // Poignet
    digitalWrite(bit_05, HIGH);    // Poignet (rotation)
    digitalWrite(bit_06, HIGH);    // Pince
    digitalWrite(bit_07, LOW);
    digitalWrite(bit_08, LOW);
    delay(delai);
    
}

//    Nombre de bits pour 'bit_01' 'bit_02' 'bit_03' 
// remplacer xxx par les bits ci dessous pour actionner l'axe choisi
//  1        BASE                                                000
//  2        EPAULE                                            001
//  3        COUDE                                             010
//  4        POIGNET                                          011
//  5        POIGNET (ROTATION)                      100
//  6        PINCE                                               101
	

// Boucle qui envoi les deux octets nécessaires pour progresser d'un demi pas (un pas pour la fermeture de la pince)
void loop() {
  
    digitalWrite(bit_01, HIGH);    // xxx
    digitalWrite(bit_02, LOW);    // xxx
    digitalWrite(bit_03, HIGH);    // xxx
    digitalWrite(bit_04, LOW);    // ???
    digitalWrite(bit_05, LOW);    // ???
    digitalWrite(bit_06, LOW);    // ???
    digitalWrite(bit_07, HIGH);
    digitalWrite(bit_08, LOW);
    delay(delai);
    
    digitalWrite(bit_01, HIGH);    // xxx
    digitalWrite(bit_02, LOW);    // xxx
    digitalWrite(bit_03, HIGH);    // xxx
    digitalWrite(bit_04, LOW);    // ???
    digitalWrite(bit_05, LOW);    // ???
    digitalWrite(bit_06, LOW);    // ???
    digitalWrite(bit_07, LOW);
    digitalWrite(bit_08, LOW);
    delay(delai);

}