Page perso de Loïc Dayot

Le B.A.BA Logo et SuperMEC

Les fonctions logo, pour piloter des interfaces électroniques SuperMEC, via un MoEBus et avec MSWLogo francisé.

lundi 28 mars 2005, par Loïc Dayot

Cet article propose d’apprendre les rudiments du langage Logo utilisant des SuperMEC au travers du pilotage d’un robot à deux moteurs devant effectuer un court parcours à obstacle. Il s’adresse à des personnes étant déjà familiarisées avec l’interface et le langage mswlogo (commande, éditeur, procédures).

Dans un premier temps, installer l’interpréteur mswlogo francisé. Ensuite, connectez le MoEBus (Module électronique bus I²C) à l’ordinateur PC et au moins un SuperMEC (Super module électronique de commande) au MoEBus. Branchez le MoEBus à une alimentation. Toutes ces connexions sont expliquées dans les documentations de chacun des modules.

Les premiers tests

Pour effectuer des tests, il suffit de charger le programme mswlogo\exemples\anstj\smec.lgo et de lancer l’instruction fensmec.

Si le programme ne correspond pas ou n’existe pas, le voici reproduit. Il est court comme du bon Logo.

Attention, prendre garde à ne pas oublier le signe tilde (~), cela permet de raccrocher la ligne suivante à celle courante.

Une variante pour faire remplacer l’ascenseur par des boutons radio :

Logo indique qu’il a détecté les SuperMEC portant les numéros 1, 3 et 4 et c’est tout.

LSMEC

Pour connaître (lire) une information provenant d’un module SuperMEC :
  est compris entre 1 et 8.
  doit être égale à : SENSROUGE, SENSVERT, HALTEDEMANDEE, HALTEAUTORISEE, FINROUGE, FINVERTE ou AUTREENTREE.

LSMEC est une procédure-opération, elle retourne VRAI ou FAUX, on peut par exemple, l’utiliser dans un SI ou un EC. Elle ne peut pas être appelée sans , sinon, l’ordinateur nous renvoie le message suivant :

Remarque : on peut savoir l’état d’une entrée d’un module, comme l’état d’une sortie précédemment transmise.

Cela signifie l’entrée finverte est valide (il y a un contact) sur le SuperMEC 1.

ESMEC VRAI/FAUX

Pour imposer un état à un module :
  est compris entre 1 et 8.
  doit être égal à : SENSROUGE, SENSVERT ou HALTEDEMANDEE.

ESMEC est une procédure, elle ne retourne rien.

Cette commande indique que le sens rouge doit être activé sur le SuperMEC 1.

INSPECTE

Pour afficher (uniquement afficher) toutes les informations concernant un module : est compris entre 1 et 8.

L’affichage pour les sept informations est de la forme : VRAI/FAUX

INSPECTE est une procédure, elle ne retourne rien.

Nous connaissons ainsi l’état de toutes les entrées et les sorties du SuperMEC 2. Ici, seuls le sens rouge et la fin verte sont actifs.

Dans le cas de passage de mauvaises valeurs, un message d’erreur est affiché.

Dans la cas d’une mauvaise connexion d’un SuperMEC, un message du type . Ou bien il n’est pas bien brancher, ou bien il n’existe pas (pas à ce numéro du moins).

Remarque : Pour toutes ces commandes, si le message suivant apparaît :

Suivi de la liste des numéros des SuperMEC, c’est qu’au moment de l’exécution de la commande initi2c, le SuperMEC que vous essayez de joindre n’était pas connecté. Vérifier simplement la connexion, et exécuter de nouveau la commande initi2c.

Quelques procédures simples

Imaginons un simple robot commandé par deux roues indépendantes. La roue gauche est branchée sur le SuperMEC 1 et la roue droite sur le SuperMEC 2.

Nous avons choisi arbitrairement que le sens de progression vers l’avant serait le sens rouge. Les moteurs sont connectés en conséquence.

Un détecteur par micro-interrupteur sert de pare-chocs de chaque côté et est branché sur la fin rouge de chacun des SuperMEC.

Cas 1 : l’automate simple avec temporisation

Le robot dispose de deux roues et d’aucun détecteur.

Remarquez que tout ce qui suit un point-virgule ( ;) est considéré comme un commentaire et ne sera pas interprété par Logo.
Par ailleurs, comme on ne connaît pas l’état des sens rouge et vert avant l’appel d’une commande, à chaque fois, on indique non seulement ce qui doit être actif (vrai) mais aussi ce qui doit être inactif (faux).

Le parcours du robot est constitué d’une suite de commandes de mouvements (rav, rtd...) suivies d’une temporisation (attends). Ne pas oublier de stopper le robot en fin de parcours, sinon, bien que le programme soit terminé, le robot continuerait à rouler.

Cas 2 : Automate tenant compte des obstacles

Pour tenir compte des pare chocs (les détecteurs connectés aux fins rouges des SuperMEC), voici deux petites procédures-opérations.

L’appel de l’une de ces deux procédures-opérations retourne une valeur vrai ou faux, suivant l’état du détecteur.

Pour que la roue gauche avance jusqu’à la rencontre d’un obstacle sur la partie gauche :

Remarquer qu’il n’est pas nécessaire de sans arrêt au robot d’avancer tant qu’il n’y a pas d’obstacle (il y a une liste vide ([])dans la boucle tantque), car une fois lui suffit (rav) pour exécuter.

Pour que le robot avance jusqu’à un mur puis se mette face au mur.

On utilise ici la logique interne des SuperMEC : si la finrouge est vrai, le moteur s’arrête.

Bref, on arrête complètement le robot que lorsque les deux pare-chocs sont enclenchés.
Ce petit exercice est souvent pratique pour « recaler » le robot.

Pour que le robot avance et contourne des obstacles, si besoin est.

Avec ces quelques exemples, j’espère que vous pourrez utiliser MSWLogo avec les SuperMEC de manière intéressante. J’attends vos remarques et expériences.


Loïc Dayot - 2001-2005 pour Planète Sciences.

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.