LegoLOGO
Création d’une application d’initiation à la programmation
Dans le cadre de notre deuxième année d’études au sein de l’IUT Informatique de Clermont-Ferrand, nous avons eu l’opportunité de prendre part à un projet tuteuré. Ce dernier avait pour objectif de réaliser un système d’initiation à l’algorithmique pour des enfants âgés de 5 à 12 ans. Il est destiné à l’association Astu’Sciences qui a pour but de développer la culture et l’apprentissage de méthodes scientifiques. Le but final de ce projet était de parvenir à réaliser une «mallette» qui sera mise à la disposition des différentes institutions scolaires du département afin de pouvoir initier les jeunes et les moins jeunes à la pensée algorithmique, à travers différents jeux et activités qu’elle contiendra.
LegoLOGO est inspiré de la tortue de sol LOGO développée
dans les années 70.
Comme cette dernière, notre robot devait
être capable de se déplacer ainsi que de tenir un stylo afin
de dessiner sur le sol. Ce robot devait être pilotable à l’aide
d’un téléphone ainsi que d’une tablette communiquant avec la
brique qui est l’élément principal constituant le robot.
Cahier des charges
On doit être capable de piloter le robot à l’aide d’une API que nous avons développée en C# en utilisant le travail déjà réalisé par d’autres programmeurs et déposé librement. Ce travail se constituait d’une API pouvant communiquer avec le robot et lui envoyer des ordres de manières asynchrones. Ces ordres se résument à de simples actions telles que faire tourner pendant 500 millisecondes le moteur branché sur le port A du robot ou jouer un son en lui donnant une certaine tonalité. Cependant, pour les besoins de notre projet, nous avons dû créer des fonctions synchrones en utilisant ces ordres. L’utilisation de cette API nous a permis un gain de temps considérable car nous avons pu nous concentrer directement sur les fonctions nécessaires à notre projet. Cette API que nous avons développée prenait en considération les conditions suivantes:
1) Le robot devra être capable d’avancer
2) Le robot devra être capable de reculer
3) Le robot devra être capable de tourner à gauche
4) Le robot devra être capable de tourner à droite
5) Le produit devra permettre de se connecter en Bluetooth à un robot sélectionné.
6) Plusieurs robots ainsi que certaines de leurs caractéristiques propres pourront être sauvegardés.
7) Les robots enregistrés dans l’application pourront être sauvegardés et modifiés
8) Le robot devra être capable d’exécuter une suite d’instructions.

Les enfants vont également pouvoir utiliser le robot avec différents modes de jeu.
-
Le mode carte: la partie technique de ce mode de jeu est réalisée par le deuxième groupe travaillant sur ce projet. Nous sommes en charge d’un affichage simple des cartes qu’ils scannent sur la tablette. Nous devons afficher clairement le symbole ainsi que l’action de la carte, de plus, l’utilisateur doit pouvoir voir la suite d’instructions qu’il transmet au robot.
-
Le mode tuile: il permet aux enfants de déplacer des carrés représentant les différentes actions possibles sur le robot. Ces actions seront affichées sous forme d’une pile d’instructions à l’écran, pile dans laquelle ils pourront bien évidement réordonner les pièces et également les supprimer. Ce système s’appuie sur le principe de Drag and Drop que nous avons dû mettre en place pour ce mode de jeu. Une fois toutes les instructions placées dans la pile, il suffira aux enfants de lancer le traitement de la pile pour que notre programme vérifie les données puis les envoient au robot.
-
Le mode programme: c’est le mode le plus avancé de notre projet, il est destiné aux enfants les plus âgés car il s’apparente à un pseudo langage de programmation. On n’y retrouve pas exactement toutes les subtilités d’un langage de programmation tel que le C# ou le C mais il présente des mots clefs qui vont orienter les enfants dans leur réflexion. Il se compose d’une partie où l’on peut écrire du texte librement mais aussi utiliser un menu présent sur la partie gauche de la tablette qui présente toutes les actions disponibles. Dans un souci de clarté et de facilité, les instructions ‘répéter’ et ‘nouvelleAction’ possèdent chacune une instruction de fin ‘finRépéter’ et ‘finNouvelleAction’. De plus, dans ce mode, nous avons ajouté la possibilité de créer ses propres instructions, un peu à l’image d’un programmeur qui créer ses propres fonctions, avec des instructions déjà existantes.
Le jeu et les différentes activités proposées permettent donc
aux enfants de pouvoir s’initier à l’algorithmique.
La difficulté de cet exercice se trouvait dans la dissociation des
différentes actions à réaliser ainsi que l’ordre dans lequel
celles-ci doivent être effectuées. Le public visé par notre projet
comprend une classe d’âge assez étendue, ce projet s’est donc
adapté aux différents profils en proposant des activités variées
avec différents niveaux de difficulté. Afin de simplifier
l’appréhension de l’outil par les plus jeunes, nous avons
utilisé des objets qui leur sont familiers.
Cet apprentissage passe par l’utilisation de Lego, de cartes à jouer et d’appareils électroniques, qui sont une tablette tactile et un smartphone. Le but de notre travail était de créer une application à travers laquelle les enfants peuvent organiser leurs idées, créer leurs programmes pour au final interagir avec le robot. L’utilisation par des enfants implique certaines contraintes, comme la simplicité d’utilisation du produit final ainsi qu’une automatisation maximale des protocoles de connexion aux différents composants. Au cours de ce rapport, nous détaillerons les technologies utilisées, nous apporterons des solutions aux problèmes que nous avons rencontrés et enfin nous présenterons l’application et les différentes fonctionnalités disponibles.
Matériel et technologies utilisés

- Lego Mindstorms : L’entreprise Lego, spécialisée dans la création de jeux de construction pour enfants, propose à travers sa gamme Lego Mindstorms EV3 la possibilité de contrôler des moteurs et différents capteurs. L’interaction entre ces différents élements passe par une brique Lego spécifique embarquée dans l’assemblage. Cette brique comporte différents ports auxquels peuvent venir se connecter deux types de moteur et une dizaine de capteurs différents (gyroscope, distance, couleur, tactile,..). Cette brique offre, en plus des différents boutons qui permettent d’interagir avec les moteurs, une très large connectivité comprenant le Bluetooth, le WiFi ainsi qu’une liaison par câble USB. Lego propose également un logiciel permettant de réaliser des programmes pouvant être stockés puis exécutés par le robot.

- Bluetooth : C’est une technologie de communication sans fil apparue au début des années 2000. Ce standard de communication a évolué pour atteindre sa version 4.1 qui permet un échange de données pouvant aller jusqu’à 12,5 Mo/s en échange d’une consommation électrique minime. La brique Lego embarque donc une carte de communication Bluetooth avec laquelle nous pouvons communiquer depuis n’importe quel appareil utilisant cette technologie. Chaque carte de communication Bluetooth possède une adresse propre codée sur 48 bits. Cette adresse nous permet alors d’identifier de manière unique les différents périphériques disponibles à proximité.

- Langage C# (prononcé Ci-sharp) : C’est un langage de programmation orienté objet mis à disposition par Microsoft. Il repose sur le framework .NET qui propose une infrastructure permettant de fournir des fonctionnalités partagées par les différents langages utilisant ce framework. Ce dernier propose également un ramasse-miettes qui permet une gestion automatique de la mémoire. Dans ses dernières versions, le framework .NET s’étend et devient disponible également à partir du web; des projets tel que Mono et Xamarin, le rendent désormais disponible sur toutes les plateformes actuelles ( Android, IOS, Unix ).
Conception
En toute logique nous avons séparé la partie graphique du reste
de l’application. Le package AppliTablette contient donc seulement
les classes gérant l’interface utilisateur. Nous avons ensuite
regroupé les classes selon leurs responsabilités.
Les classes ayant pour objectifs de déplacer le robot se trouvent dans le
package LibRobot. Celles s’occupant de la connexion Bluetooth
entre la tablette et le robot ainsi qu’avec le téléphone se
situent dans le package LibBluetooth. Le langage contenant les
instructions que nous avons créées afin d’interagir avec le robot
sont dans le package LibInterpreteur. LibFileManager quant à lui
contient des classes permettant de charger des fichiers, qu’ils
soient sous format XML ou JSON. Grâce à cela, nous pouvons nous
sommes en mesure de charger tous les fichiers de configuration de
manière uniforme.
Communication entre les périphériques
Afin de faire communiquer les différents périphériques
nécessaires à notre projet, il nous fallait utiliser des
moyens de communication sans fil. Pour cela, deux technologies
s’offraient à nous: le Bluetooth et le Wifi. Nous avons
rapidement mis de côté le Wifi car son utilisation nécessitait
l’emploi de matériel supplémentaire tel qu’un routeur. Nous nous
sommes donc intéressés au protocole Bluetooth.

On peut voir ici que le téléphone ne communique pas
directement avec le robot, mais uniquement avec la
tablette. Il scanne les cartes et les envoie toujours à la
tablette.
Ensuite la tablette les affiche sur son écran puis elle
envoie ces instructions à effectuer au robot. Envoi qu’elle
fait également pour les modes cartes et tuiles qui ne necessitent
pas l’utilisation du téléphone.
Les différents modes de jeu
Le but de ce projet étant d’arriver à plusieurs modes de jeu fonctionnels, nous allons vous présenter comment nous avons construit les différentes manières d’interagir avec le robot.

- Le mode programme : Il fut le premier mode auquel nous nous sommes confrontés lors de l’élaboration de l’interface graphique. Pour rappel, ce mode s’adresse à des enfants âgés d’environ 9 à 12 ans. Le but de ce mode est d’écrire un programme avec des mots simples comme «Avancer» ou «Reculer», avec une valeur qui exprimera, en l’occurrence, la distance que le robot va parcourir. Les notions de boucle (Répéter) et de fonction (Action) sont également présentes. Ce mode doit pouvoir fournir aux enfants les fonctionnalités nécessaires afin qu’ils puissent atteindre l’objectif de leur activité. Ils peuvent écrire leur programme entièrement ou s’appuyer sur les boutons mis à leur disposition. Le texte va être interprété puis envoyé sous forme d’actions via Bluetooth au robot. Toutes les bibliothèques précédemment énoncées sont sollicitées. Nous avons mis en place ce système de boutons afin que les enfants puissent interagir facilement avec ce mode dans un premier temps. Cela leur permet de découvrir les fonctions déjà existantes. Le fait d’appuyer sur un bouton insère automatiquement le texte à l’endroit du curseur. Si un ou des paramètres sont requis, comme pour la distance à avancer par exemple, un point d’interrogation se placera juste après le mot. Les boucles agissent différemment: elles sont composées de deux mots afin de marquer le début et la fin, en ayant la possibilité d’avoir un paramètre également. Ainsi, si un enfant écrit des actions et appuie sur une de ces commandes composées, le texte sélectionné sera automatiquement inclus dans cette boucle. Nous avons également ajouté la possibilité d’enregistrer un programme et de créer des fonctions. Ainsi, un enfant peut enregistrer son fichier pour le continuer par la suite. Nous avons également introduit le principe de la réutilisation: il est possible de charger ses macros afin de les réutiliser, sans pour autant ouvrir le fichier auparavant. Une fois le programme lancé, il est vérifié par notre interpréteur. Par conséquent, nous obtenons des retours sur ce qui est écrit et nous l’affichons dans la zone de compilation. Si un mot est inconnu ou un paramètre est manquant par exemple, cela sera indiqué dans cette zone. A l’inverse, s’il n’y a aucun souci, il va décrire les actions que le robot va effectuer. Ce mode de jeu est donc complet et possède toutes les fonctionnalités attendues. Nous avons même facilité l’écriture du programme aux enfants afin qu’ils puissent interagir avec le robot plus facilement et se focaliser sur l’aspect algorithmique de leur activité. Ce mode pourra facilement évoluer s’il y en a besoin. Plusieurs prolongements sont possibles notamment d’ajouter la possibilité d’ouvrir et utiliser plusieurs programmes différents, ou bien d’intégrer le vérificateur syntaxique en direct sur la zone de texte.

-
Le mode tuiles : Ce mode de jeu est destiné aux enfants de
7 à 10 ans. Il se compose d’une liste sur la partie gauche de
l’application contenant toutes les actions que le robot peut
exécuter ainsi que les blocs permettant de faire des boucles
de répétitions «Répéter». L’utilisateur doit déplacer ces
blocs sur la partie principale de la fenêtre afin de créer
une suite d’instructions qu’il pourra ensuite envoyer au robot.
Le remplissage de la liste composée de toutes les actions
possibles se fait grâce au dictionnaire de langage. Ce mode
de jeu étant adapté au public visé, nous avons omis certaines
actions telles que «Async» et «Macro» que nous avons jugées
inutile d’ajouter.
Nous disposons d’actions qui peuvent prendre ou non des
paramètres, ainsi que d’actions qui peuvent elles-mêmes
contenir d’autres actions. C’est pour cela que nous avons
utilisé le patron composite afin d’architecturer ces différents
cas. Une méthode convertit les tuiles en chaîne de caractères
en utilisant les éléments définis dans le fichier de définition
du langage de l’application. En ce qui concerne la partie visuelle
de ce mode de jeu, les éléments Composite, c’est-à-dire ceux
qui peuvent contenir d’autres éléments, et les éléments
simples ne sont pas affichés de la même manière.
Nous avons une classe dédiée à la gestion de l’affichage d’un UserControl différent selon le type d’élément. Une distinction est également faite entre les symboles simples qui possèdent un paramètre et ceux qui n’en ont pas. L’utilisateur peut changer la valeur des paramètres à l’aide du clavier. Ces champs de saisie n’acceptent que les valeurs numéraires. Les tuiles sont disposées sur un canevas et chaque symbole composite affiche ses enfants sur un autre canevas. Chaque élément possède une taille (largeur et hauteur) ainsi que sa position sur le canevas. Ce mode de jeu utilise un système de glisser-déposer. Lors du déplacement ou de l’ajout d’une tuile, nous regardons la position actuelle du curseur afin de connaître l’emplacement auquel on doit insérer l’élément. L’algorithme présent ci-contre nous permet de déterminer sur quel élément se situe l’utilisateur et ainsi insérer l’instruction au bon endroit. L’objet sélectionné par l’utilisateur est stocké dans une classe gestionnaire qui prend en charge les manipulations des éléments visuels. C’est cette classe qui contrôle l’ajout, la suppression et la réorganisation des tuiles entre elles. L’utilisateur peut supprimer une tuile en la déposant sur la poubelle présente en bas de l’écran ou bien toutes les tuiles en cliquant sur la gomme. Il peut également ajouter ou enlever une instruction à un composite en la déplaçant.

- Le mode cartes : L’idée de la tortue LOGO était de pouvoir commander la tortue à l’aide de cartes perforées contenant les programmes à réaliser. L’utilisateur pouvait donc créer ses programmes en perforant les cartes de la bonne manière. Notre projet devait reprendre l’idée de l’utilisation des cartes perforées, nous avons donc travaillé afin d’adapter cette idée aux nouvelles technologies. La solution qui a été retenue a été l’utilisation d’un Smartphone porté par le robot et qui est en charge d’identifier les cartes que l’utilisateur lui présente. Sa caméra est utilisée pour reconnaitre les cartes de jeu, chaque carte correspondant à un déplacement ou une action. L’utilisateur montre donc au téléphone les cartes qui composent son programme les unes après les autres et il décide quand exécuter le tout. L’échange d’information entre le téléphone et la tablette s’effectue par le biais d’une connexion Bluetooth. De la même manière que pour les tuiles, chaque carte montrée au téléphone est convertie en un mot de notre Langage. Le téléphone ne pouvant pas envoyer d’instructions au robot, cette action est déléguée à la tablette. Les instructions reconnues par le téléphone sont donc envoyées à la tablette qui exécute les actions correspondantes. Lorsque l’utilisateur envoie un programme à la tablette, le serveur Bluetooth de cette dernière lance un évènement. L’abonnement à celui-ci nous permet d’afficher une notification à l’utilisateur stipulant qu’un programme a bien été envoyé au robot ou bien qu’une erreur est présente dans le programme. En plus d’afficher une notification, nous mettons également à jour la liste d’instructions affichée dans le mode carte. Nous avons donc réalisé une interface graphique permettant de visualiser les instructions transitant par la tablette. L’utilisateur peut donc retrouver les instructions sous la forme de tuiles de la même manière qu’au sein du mode Tuiles.

-
Le mode direct : Ce mode de jeu n’était pas présent
initialement dans le cahier des charges. Cependant nous
trouvions intéressant d’ajouter un mode de jeu qui commande
directement et simplement le robot sans avoir à entrer de
paramètres ou à créer de listes d’instructions.
Ce mode de jeu est composé de simple carrés contenant chacun une instruction. Pour les actions nécessitant des paramètres comme «Avancer», nous avons mis à disposition de l’utilisateur plusieurs carrés avec des paramètres différents. Tous les instructions sont présentées sous forme de grille de trois lignes de quatre carrés chacune. L’utilisateur peut lancer une instruction simplement en cliquant sur un carré. L’utilisateur peut changer la page d’instruction affichée par un Swipe. Lorsque le mouvement est reconnu, une commande est lancée afin de naviguer vers la page précédente ou suivante. Ces pages n’ayant pas réellement d’ordre les unes par rapport aux autres, l’utilisateur peut se déplacer à travers les pages dans un seul et unique sens s’il le souhaite. Ce mode de jeu permet de découvrir les opérations que l’utilisateur a à disposition et de se rendre compte des mouvements auxquelles elles correspondent.
Il peut être utilisé pour mieux se repérer dans l’espace. En effet, nous avons constaté durant les phases de test dans les écoles que les enfants éprouvaient des difficultés à faire correspondre une rotation vers la droite ou vers la gauche en fonction de la position du robot par rapport à eux. Les phases de réflexion précédant la réalisation du programme peuvent également mettre à profit ces actions simples afin d’évaluer les distances ou d’effectuer des tests de déplacement.
TAP : Temps d’Activités Périscolaires
Nous avons eu durant les dernières semaines de projet,
l’opportunité d’aller le tester en conditions réelles au sein de
l’école Beaudonnat d’Aubière.

Nous avons pu durant les premières séances animer avec les enfants
des jeux tournés vers la
programmation et la mise en place d’algorithmes sans support
informatique.
Ces jeux ont pris la forme de jeux de rôle au
sein desquels les enfants jouaient tour à tour les robots et
les programmeurs, puis par la suite de jeux de plateaux durant
lesquels les enfants devaient contrôler une figurine qui devait
réaliser une tâche en évitant différents pièges.

Les dernières séances intègrent l’utilisation du robot et de
notre application afin de poursuive la phase d’apprentissage de
l’algorithmique qui a été commencée.

Exposciences 2015 : Auvergne & Bruxelles !
En premier lieu nous sommes aller présenter notre travail au cours de la convention Exposciences Auvergne qui s’est déroulée à Montluçon les 5 et 6 Juin 2015.
Mais notre but final était de pouvoir nous rendre à Bruxelles
durant le mois de Juillet 2015, plus précisément du 19 au 25, afin de
participer à l’exposition Exposciences international.
Après de longues heures passées à remplir différents dossiers de
financement : nous voilà enfin sur le quai prêt à prendre le train !