Objectifs de la séance :
Il s’agit de continuer à se familiariser avec la programmation sur ordinateur. On passerait éventuellement du langage visuel/bloc au langage bloc/ligne, en fonction du niveau des groupes. L’objectif serait de poursuivre la compréhension du lien entre l’ordinateur et les actionneurs de Thymio, dans la continuité de la séance 2. Il s’agit dans la séance 3 d’approfondir la partie logique afin de comprendre le concept de boucle et de l’implémenter.
Matériel :
1 robot Thymio par groupe
1 ordinateur par groupe
Fiche défi
Repo GitHub : https://github.com/Code-4-Mines/code-thymio.git
Apport scientifique :
Un bug est un défaut dans le programme qui peut entraîner un dysfonctionnement de l’appareil.
Déroulement de la séance :
- Revue rapide des cours précédents : Comportements, capteurs…
- Programmation simple par blocs/visuel (rappel) :
SI obstacle à gauche ;
ALORS tourne à droite ;
SI obstacle devant ;
ALORS recule.
Etc…
Utilisation des fichiers Blockly : basic_1.aesl, basic_2.aesl, basic_3.aesl
- Introduction du bug et du concept de boucle :
SI obstacle devant ;
ALORS recul ;
SI obstacle derrière ;
ALORS avance ;
Utilisation des fichiers Blockly : bug_1.aesl, bug_2.aesl, bug_3.aesl
Les étudiants observeront alors l’effet d’un tel code lorsque le robot est placé entre deux obstacles :
Mouvements d’avancée et de recul continuels, sans possibilité d’arrêt.
=> Demander aux étudiants s’ils auraient une idée pour permettre l’arrêt. (il faut l’empêcher de refaire sans cesse le même mouvement).
Quelle commande logique pourrait-on utiliser ? (Donner des exemples de la vraie vie…)
Il faut alors définir une condition d’arrêt.
Mots clés : opération répétée, persistance de données/de variable, boucles POUR, TANT QUE…
Il existe plusieurs façons de définir cette condition d’arrêt :
- Variable de mémoire: il s’agirait de conserver en mémoire les deux derniers mouvements et d’imposer la condition suivante = le robot ne peut pas refaire un des mouvements qu’il a fait avant. Exemple : recule – avance – recule
- Compteur : il s’agirait de compter le nombre de mouvements (« tant que le robot avance » , on compte les actions : recule => n=1 ; avance => m=1 ; recule => n=2… si le robot s’arrête, les compteurs sont remis à zéro).
L’idée, c’est de bloquer la commande (« avance », par exemple) si m atteint une certaine valeur alors on force un changement de situation.
Exemple des chocolats : si je fais plus de 3 aller-retour au frigo pour prendre du chocolat, au prochain aller-retour je prends une salade.
- Minuteur: On augmente la difficulté en programmant dans le temps. L’idée ici c’est de changer la série de commandes : au lieu d’avoir une séquence avance – recule – « détection obstacle » = au lieu d’avancer, pivot droit/gauche (en fonction du capteur, il y en a deux à l’arrière) – avance.
Mais quand/comment arrêter le pivot pour repartir en avant ? Grâce au minuteur : le robot arrête de tourner au bout d’un moment et repart à l’avant.
Séance 4 : Comment éviter un obstacle de la meilleure façon possible ?
Passage à l’utilisation de lignes de code en s’appuyant sur le modèle : obstacle_1.aesl
Les élèves peuvent utiliser l’interface de programmation de Blockly pour traduire les blocs graphiques en lignes de code dans un premier temps.
Par Geoffrey Robert et Victoria Mondesir-About