Ce document est destiné aux enfants, c'est pourquoi son style est différent du reste de ce site.
Ce didacticiel va t’accompagner tout au long de plusieurs exercices avec Thymio. Petit à petit, tu vas découvrir comment le programmer, comment contrôler les LEDs, les moteurs etc. À la fin, tu auras un nouveau comportement pour ton robot, entièrement créé par toi !
Il y a plusieurs parties dans ce didacticiel, chacune se concentre sur un aspect différent.
On se familiarise avec le robot et avec Aseba
Commence par prendre ton robot près de toi. Tu peux l’allumer avec le bouton du milieu. Ensuite, tu peux choisir un des modes existants avec les flèches : Thymio change de couleur. Tu peux activer ce mode avec le bouton du milieu. Dans la suite de l’exercice on va créer notre propre mode, donc ajouter un choix dans les couleurs.
Connecte ton robot à l’ordinateur avec le câble USB et lance Aseba Studio. Aseba Studio ressemble à ça:
- Ces boutons servent à charger et exécuter le code qu’on a écrit
- Cette fenêtre donne une vision d’ensemble de l’état des différents éléments du robot : capteurs, actuateurs, variables
- Ici on trouve les fonctions et les événements disponibles qu’on peut utiliser dans le code
- Au milieu on va écrire notre code. C’est ça qui détermine le comportement du robot.
- Ici on peut déterminer des constantes
- Ici on peut ajouter nos événements
- Cette ligne nous indique si nos instructions sont complètes et correctement écrites
Les capteurs
Tu peux utiliser l’interface de Aseba studio pour voir la valeur des capteurs du robot, dans le menu sur le coté. Un capteur, ça sert a mesurer quelque chose de physique, comme de la lumière, du son ou une accélération, et à le traduire en une valeur numérique, que le robot peut comprendre et utiliser.
Par exemple les capteurs de distance devant le robot permettent de mesurer la distance vers les objets proches. C’est la valeur prox.horizontal dans la fenêtre Mémoire. Si tu mets ta main devant le robot et que tu cliques sur rafraîchir, tu peux voir la valeur changer.
Dans la première image on voit que les capteurs ne détectent rien (0). Dans la deuxième, on a mis la main devant, les valeurs sont élevées.
Sur le robot lui même, tu peux voir que les lumières des capteurs de distance s’allument plus ou moins fortement s’il y a un objet devant eux.
Les LEDs
Une LED, c’est un composant qui permet de faire de la lumière sur le robot. Une LED a une couleur déterminée par sa fabrication. Par exemple, il y a des LEDs rouges devant le robot, des vertes dessus etc.
On a vu qu’on pouvait changer la couleur du robot. Comment ça se passe ? En réalité, il y a trois LEDs différentes l’une à coté de l’autre, très proches. Une rouge, une verte, une bleue. Ces trois couleurs sont les couleurs primaires (additives) ; on peut créer les autres en les mélangeant. Par exemple si on allume bleu et rouge en même temps, on obtient magenta. On appelle cela une LED RVB (pour rouge, vert, bleu).
Allumons une LED
Pour pouvoir allumer une lumière nous-mêmes sur le robot, on va commencer à coder, donc à écrire des ordres pour le robot.
Le code, c’est quoi ?
C’est une série d’instructions qu’on donne au robot, qu’il va exécuter et qui vont définir son comportement. Il faut écrire le code avec des mots clés bien précis, que le robot peut comprendre. Commençons par allumer une LED. Si on clique sur Fonctions natives -> leds on peut voir une liste de fonctions (une fonction est une des instructions possibles pour le robot). Ces fonctions servent à allumer les différentes LEDs. Par exemple leds.top (top signifie haut) sert a allumer la LED RVB du haut.
Dans la fenêtre principale, tape ceci :
call leds.top(0,0,32)
call doit être utilisé pour appeler une fonction. leds.top sert à allumer les LEDs RVB du dessus du robot. Si tu laisses le pointeur de la souris sur le nom de la fonction, tu verras apparaître des informations sur comment l’utiliser. Entre les parenthèses on donne des indications à la fonction. Ça s’appelle des arguments.
Dans notre cas il y en a 3 : les valeurs des trois parties de la LED : rouge, vert et bleu. La valeur 0 signifie éteint, et 32, allumé au maximum. On peut faire une lumière moins forte avec une valeur entre 0 et 32.
Maintenant clique sur Charger, puis Exécuter. Le robot va exécuter le code. Tu verras les LEDs dessus allumées en bleu.
Si tu changes le code pour mettre :
call leds.top(32,0,0)
la LED sera alors rouge. De même :
call leds.top(0,32,32)
donnera une LED turquoise. Tu peux essayer de jouer sur les couleurs en changeant ces valeurs.
Les commentaires
Ce qu’on écrit dans le code est interprété par le robot comme des instructions. Cependant, parfois on peut vouloir écrire des indications pour nous-mêmes. Dans ce cas, on va faire un commentaire. Le signe # permet d’indiquer que la partie qui suit n’est pas une instruction pour le robot. Tu peux essayer.
#allumer la led RVB en bleu – cette ligne n’est pas prise en compte par le robot
call leds.top(0,0,32)
Une astuce pour écrire le code plus vite
Dans Aseba Studio, on peut tirer les mots clés depuis les menus de côté jusque dans la fenêtre principale. Dans le cas de blocs de code très similaires, on peut aussi les copier (Ctrl-C) et coller (Ctrl-V) sous Windows (ou (Pomme-C) et (Pomme-V) sous Mac).
Les conditions
Pour l’instant, dès qu’on appuie sur Exécuter, le robot exécute notre code (allumer une LED). On peut avoir envie de lier ça par exemple avec un bouton, pour allumer une LED quand on appuie.
Pour détecter l’appui des boutons, on peut vérifier la variable dans la fenêtre Mémoire :
buttons.binary
Ici on voit que le bouton avant (numero 3) est appuyé.
Dans ce cas, on va utiliser la condition if … then … else … end (si … alors … sinon … fin). L’idée est de pouvoir dire au robot SI le bouton est appuyé, ALORS allume une led. Dans Aseba, ça se fait avec la syntaxe suivante:
if buttons.binary[3]==1 then #si le bouton de devant est appuyé
call leds.top(0,0,32) #alors on allume en bleu
else
call leds.top(0,0,0) #sinon on éteint
end
ce code dit que si on appuie sur le bouton de devant (buttons.binary[3]), on allume la LED de dessus en bleu, sinon, on l’éteint.
En essayant seulement ce code, tu verra que ça ne marche qu’une seule fois, au démarrage. Si on veut qu’à chaque fois qu’on appuie sur le bouton, ça allume la LED, il faut vérifier régulièrement si le bouton est appuyé. Pour ça, on va utiliser les événements.
Les événements
Un événement, c’est un moment déterminé par certaines conditions, auquel on peut exécuter du code.
Par exemple si on regarde dans notre interface en bas, il y a une liste d’Événements locaux.
L’événement button correspond à chaque fois qu’on vérifie si un bouton est appuyé. Donc maintenant on ajoute cette ligne avant notre code:
#à chaque fois qu'on vérifie les bouton
onevent button
if buttons.binary[3]==1 then #si le bouton de devant est appuyé
call leds.top(0,0,32) #alors on allume en bleu
else
call leds.top(0,0,0) #sinon on éteint
end
Si on teste ce code (Charger, Exécuter) on voit que le robot allume la lumière bleue dès qu'on met le doigt sur le bouton, et l'éteint dès qu'on l'enlève.
Il y a d’autres événements disponibles : motor pour les moteurs, acc pour l’accéléromètre etc.
Les moteurs
Pour les moteurs on voit dans la mémoire qu’on a 3 variables différentes. Pour le moment on va utiliser les deux premières. motor.target nous permet de dire quelle vitesse on veut avoir. motor.speed nous dit quelle est la vitesse actuelle.
On voit que la vitesse réelle (motor.speed) est un peu différente de la vitesse demandée (motor.target)
On peut maintenant écrire un code qui active les moteurs en fonction des boutons.
#à chaque fois qu'on vérifie les bouton
onevent button
if buttons.binary[3]==1 then #si le bouton de devant est appuyé
call leds.top(0,0,32) #alors on allume en bleu
else
call leds.top(0,0,0) #sinon on éteint
end
if buttons.binary[3]==1 then
motor.target[0]=200
motor.target[1]=200
end
if buttons.binary[2]==1 then
motor.target[0]=0
motor.target[1]=0
end
if buttons.binary[0]==1 then
motor.target[0]=-200
motor.target[1]=-200
end
if buttons.binary[1]==1 then
motor.target[0]=-200
motor.target[1]=200
end
if buttons.binary[4]==1 then
motor.target[0]=200
motor.target[1]=-200
end
Tu peux maintenant essayer de commander ton robot avec les boutons et de le faire bouger (n’oublie pas de cliquer sur Charger, puis Exécuter).
Utiliser les capteurs
Maintenant on va utiliser les capteurs de proximité pour éviter que le robot tombe de la table. Il y a 9 capteurs sur chaque Thymio : 5 devant, 2 dessous, 2 derrière. On va utiliser ceux de dessous pour s’arrêter en bord de table.
Le capteur de proximité
Un capteur de proximité peut mesurer les distances aux objets proches. Pour le faire il utilise deux composants : un émetteur de lumière infrarouge, et un récepteur. L’émetteur envoie de la lumière infrarouge (invisible pour nous) et le récepteur mesure combien de lumière revient. Si un objet est proche, beaucoup de lumière va être reflétée dessus et revenir vers le robot. S’il est loin, moins de lumière reviendra. On peut donc mesurer la distance aux objets.
Dans notre cas, on peut utiliser les capteurs dessous pour détecter la table. Laisse le robot sur la table et regarde dans l’interface en appuyant sur le bouton rafraîchir, la valeur de prox.ground.delta.
Maintenant recommence en soulevant le robot. On voit que la valeur change beaucoup.
On va donc ajouter en plus de tout notre code ceci :
onevent prox
if prox.ground.delta[0]<300 or prox.ground.delta[1]<300 then
motor.target[0]=0
motor.target[1]=0
end
Si la valeur d’un des deux capteurs est basse (pas de table détectée) on arrête le robot. Maintenant tu peux voir que le robot s’arrête en bord de table.
Félicitations!
Tu es arrivé au bout de ce tutoriel et tu as créé ton comportement! Maintenant tu peux enregistrer ton code si tu souhaites le garder, fermer Aseba Studio et débrancher ton Thymio pour le tester. Mais attention! Si tu l'éteins, il oubliera le programme que tu lui as écrit: Il faudra alors le recharger.
Si tu souhaites ajouter encore des réactions différentes dans le comportement de Thymio, tu peux ajouter d'autres parties de code, utiliser les autres capteurs ou LEDs. Amuse-toi bien et expérimente!