Programmation du circuit de voiture sous Flowcode V3 |
14/12/2024 |
Le composant Buggy de Flowcode |
Le composant Buggy de Flowcode Version 3 est un circuit de voiture programmable par un algorigramme :
Le damier noir et blanc placé dans le coin supérieur gauche du composant Buggy représente la ligne d'arrivée du circuit. L'objectif est de faire avancer la voiture à partir du centre pour aller à la ligne d'arrivée et en évitant les obstacles.
Le composant Buggy de Flowcode ne possède aucune macro, et utilise 3 sorties et 3 entrées.
Les 3 sorties, qui sont connectées au port A, sont :
A0 : état du moteur GAUCHE A1 : état du moteur DROIT A2 : sens inverse des moteurs
Voici les différentes valeurs à écrire sur le port A et leur conséquence sur le comportement de la voiture :
Valeur écrite sur le port A |
Etat de la voiture |
0 |
Arrêtée |
1 |
Rotation à gauche de 45° |
2 |
Rotation à droite de 45° |
3 |
Marche avant |
4 |
Marche arrière |
Pour écrire une valeur sur le port A il faut utiliser un bloc Sortie. Par exemple le bloc suivant met la voiture en marche avant :
Met la voiture en marche avant
Pour effectuer une rotation de la voiture de 45° seulement il faut mettre 1 (ou 2 pour le sens inverse) dans le port A pendant un temps très court (sinon la voiture tourne sur elle même en faisant plusieurs tours). Pour cela il faut mettre 0 dans le port A immédiatement après y avoir mis 1 (ou 2 pour le sens inverse) :
Effectue une rotation à gauche de 45°
Les 3 entrées, qui sont connectées au port B, sont :
B0 : capteur de choc AVANT B1 : capteur de choc ARRIERE B2 : ligne d'arrivé atteinte
La lecture du port B (qui se fait avec un bloc Entrée) permet de détecter un évènement :
Valeur lue sur le port B |
Evènement détecté |
0 |
aucun |
1 |
choc détecté à l'avant |
2 |
choc détecté à l'arrière |
4 |
ligne d'arrivée franchie |
Pour lire la valeur du port B et l'enregistrer dans une variable nommée "capteur" il faut :
1 - créer une nouvelle variable nommée capteur de type octet (dans le menu Edition + Variables) :
2 - utiliser un bloc Entrée pour sauvegarder l'état du port B dans la variable capteur :
Lit la valeur des capteurs
L'algorigramme suivant montre par exemple une rotation de 90° suivie d'une marche avant jusqu'à ce qu'un obstacle soit rencontré à l'avant :
Programme de base
L'algorithme correspondant est le suivant :
|
Vous avez remarqué que l'algorigramme ci-dessus contient des commentaires facilitant sa lecture. Libre à vous à partir d'aujourd'hui de commenter vos algorigrammes afin d'en faciliter leur compréhension lors d'une relecture ultérieure.
A retenir et à noter dans votre fiche mémo Flowcode :
|
De plus dans le programme de base donné ci-dessus la condition de sotie de la boucle Tant que est placé à la fin de la boucle (et non sur le bloc du début). Il est en efet possible de choisir la position de la condition logique utilisé dans une boucle.
A retenir et à noter dans votre fiche mémo Flowcode :
|
Configuration du test à la fin de la boucle
Saisissez puis testez dans Flowcode l'algogrigramme ci-dessus (nommé "Programme de base") permettant à la voiture d'atteindre le premier obstacle après une rotation de 90° vers la gauche.
Remarques complémentaires pour la mise au point d'un algorigramme :
Un point d'arrêt est représenté par un point rouge en haut à gauche du bloc sur lequel il a été placé :
Flowcode passera automatiquement en mode pas à pas
à l'exécution de ce bloc
A retenir et à noter dans votre fiche mémo Flowcode :
|
Remarques complémentaires pour tester manullement le composant Buggy :
Dans les propriétés du composant Buggy on peut :
En connectant 3 interrupteurs sur le port A et 3 LED sur le port B il est possible de piloter les moteurs de la voiture à la main et d'observer l'état des capteurs (à condition de mettre une boucle "Tant que 1" vide dans l'algorigramme).
Expérimentez le pilotage manuel de la voiture en connectant 3 interrupteurs sur le port A et 3 LED sur le port B afin de bien ressentir le rôle des 3 entrées et des 3 sorties :
Pensez à bien supprimer tous les blocs présents dans la boucle principale Tant que 1 pour piloter la voiture à la main grâce aux interrupteurs.
Travail demandé |
Activité 1 : proposez puis validez dans Flowcode un algorigramme permettant à la voiture de franchir la ligne d'arrivée dans un circuit sans obstacle.
Important : le programme doit se terminer et sortir de la boucle principale lorsque la voiture a franchi la ligne l'arrivée :
L'algorigramme a atteind le bloc "FIN"
Une fois parfaitement fonctionnel, enregistrez votre programme sous le nom buggy_activite_1.fcf
Activité 2 : proposez puis validez dans Flowcode un algorigramme permettant à la voiture de franchir la ligne d'arrivée dans un circuit avec obstacles.
Rappel : la simulation doit se terminer lorsque la voiture a franchi la ligne l'arrivée.
Une fois parfaitement fonctionnel, enregistrez votre programme sous le nom buggy_activite_2.fcf
Activité 3 : proposez puis validez dans Flowcode un algorigramme permettant à la voiture de franchir la ligne d'arrivée aussi bien dans un circuit sans obstacle que dans un circuit avec obstacles.
Remarque : la simulation doit se terminer dans les 2 cas (avec ou sans obstacles) lorsque la voiture a franchi la ligne l'arrivée et la rotation de la voiture ne doit s'effectuer qu'en cas de détection d'un obstacle (et non après avoir parcourue une distance fixe).
Une fois parfaitement fonctionnel, enregistrez votre programme sous le nom buggy_activite_3.fcf
Activité 4 : proposez puis validez dans Flowcode un algorigramme permettant à la voiture de franchir la ligne d'arrivée dans un circuit avec obstacles en utilisant un nombre minimal de bloc dans votre algorigramme (sans compter les blocs Début et Fin). Une boucle "Tant que" sera comptée comme un seul bloc même si elle est représentée par deux éléments graphiques à l'écran.
Combien de blocs utilisez-vous pour l'activité 4 ?
L'idée de base pour minimiser le nombre de blocs est d'utiliser les 3 mêmes blocs pour effectuer les 2 rotations (90° à droite et 90° à gauche). Pour cela on va utiliser une variable n :
Si n=1 ces 3 blocs effecturont une rotation de 90° vers la gauche
Si n=2 ces 3 blocs effecturont une rotation de 90° vers la droite
La structure de l'algorigramme à 9 blocs peut être par exemple une des deux suivantes :
Solution 1 avec 9 blocs |
Solution 2 avec 9 blocs |
Il vous reste à trouver la bonne formule de basculement à mettre dans le bloc calcul possédant un point d'interrogation rouge, afin que :
Imaginons par exemple que l'on veuille faire basculer une variable n entre les deux valeurs 7 et 5. L'exemple suivant montre comment faire basculer n entre 7 et 5 :
Dans l'exemple ci-dessus on commence par initialiser n à la valeur 7. Puis dans une boucle on utilise la formule de basculement n=12-n. La conséquence est la suivante :
Le bloc calcul contenant la formule de basculement n=12-n fait bien basculer la variable n entre les valeurs 7 et 5.
En vous inspirant de cet exemple, à vous de trouver la bonne formule de basculement afin de faire basculer n entre 1 et 2 pour effectuer les 2 rotations de la voiture dans l'algorigramme à 9 blocs.
Votre solution fonctionne-t-elle dans un circuit sans obstacle ? Combien de bloc utilisez-vous ?
Sachant que les solutions optimales trouvées à ce jour utilisent 9 blocs, 8 blocs, 7 blocs (trouvé par Nicolas FLECK puis par Florian BRÉHIN le 19 janvier 2015) puis 6 blocs (trouvé par Amaury ALVES le 19 janvier 2015), 5 blocs (trouvé par Hugo HOUIS le 16 janvier 2017), et enfin 4 blocs seulement (trouvé par Hugo HOUIS le 16 janvier 2017) et qu'elles fonctionnent aussi bien avec que sans obstacle (dans les 2 cas la voiture arrive sur la ligne d'arrivée et le programme sort de la boucle principale), votre solution constitue-t-elle un nouveau record ?
Si vous avez une solution fonctionnelle avec encore moins de bloc, faite-la valider au professeur pour corriger le record ci-dessus.
Mais attention : en fonction du mouvement réel de la voiture nous allons distinguer 3 versions différentes pour cette activité 4 :
Version | Mouvements autorisés | Mouvements interdits |
---|---|---|
Version A |
tout mouvement autorisé : marche avant et marche arrière, angle droit et angle à 45°, déplacement en toupie ou en crabe, etc. |
aucun |
Version B |
marche avant seulement, et angle droit ou à 45° |
marche arrière, déplacement en toupie ou en crabe |
Version C |
marche avant seulement, et seulement en angle droit |
marche arrière, déplacement en toupie ou en crabe, rotation à 45° |
Votre programme de l'activité 4 correspond à laquelle de ces 3 versions ?
Une fois parfaitement fonctionnel, enregistrez votre programme sous le nom buggy_activite_4A.fcf, buggy_activite_4B.fcf, ou buggy_activite_4C.fcf selon votre version.
Activité 5 : proposez puis validez dans Flowcode un algorigramme permettant à la voiture de franchir la ligne d'arrivée aussi bien dans un circuit sans obstacle que dans un circuit avec obstacles mais en utilisant seulement la marche arrière (et non la marche avant comme dans les 4 activités précédentes). Il faut partir en marche arrière dès le début, et effectuer seulement des rotations de 90° : il est interdit d'effectuer une rotation de 180° pour suivre en marche arrière le parcourt de l'activité 4.
Rappel : la simulation doit se terminer dans les 2 cas (avec ou sans obstacles) lorsque la voiture a franchi la ligne l'arrivée et la rotation de la voiture ne doit s'effectuer qu'en cas de détection d'un obstacle.
Questions à se poser et à expérimenter dans Flowcode :
Est-il possible de franchir la ligne d'arrivée en marche arrière en effectuant seulement des rotations de 90° à droite à chaque obstacle ?
Est-il possible de franchir la ligne d'arrivée en marche arrière en effectuant seulement des rotations de 90° à gauche à chaque obstacle ?
Est-il possible de franchir la ligne d'arrivée en marche arrière en alternant les rotations de 90° tantôt à droite tantôt à gauche à chaque obstacle ?
Est-il possible de franchir la ligne d'arrivée en marche arrière en effectuant x rotations de 90° à gauche suivies de y rotations de 90° à droite ?
Est-il possible de franchir la ligne d'arrivée en marche arrière en effectuant x rotations de 90° à droite suivies de y rotations de 90° à gauche ?
Remarque : il est parfaitement possible de demander à Flowcode de réaliser une boucle un nombre de fois fixe en cochant la case "Compteur de" dans les propriétés de la boucle :
La boucle suivante par exemple sera exécutée exactement 3 fois avant de sortir :
A retenir et à noter dans votre fiche mémo Flowcode :
|
Combien de blocs utilisez-vous pour l'activité 5 ? Le nombre minimal de bloc trouvé à ce jour pour cette activité est de 9 blocs seulement (trouvé par Nicolas FLECK le 19 janvier 2015). Si vous avez une solution fonctionnelle avec encore moins de bloc, faite-la valider au professeur pour corriger le record ci-dessus.
Tout comme l'algorigramme à 9 blocs de l'activité 4, l'algorigramme de l'activité 5 peut utiliser seulement 4 blocs pour effectuer toutes les rotations, paramétrées par la variable n :
Si n=1 ces 3 blocs effecturont une rotation de 90° vers la gauche, puis n sera égal à 2
Si n=2 ces 3 blocs effecturont une rotation de 90° vers la droite, puis n sera égal à 1
Mais attention : en fonction du mouvement réel de la voiture nous allons distinguer 2 versions différentes pour cette activité 5 :
Version | Mouvements autorisés | Mouvements interdits |
---|---|---|
Version A |
marche arrière seulement, et angle droit ou à 45° |
marche avant, déplacement en toupie ou en crabe |
Version B |
marche arrière seulement, et seulement en angle droit |
marche avant, déplacement en toupie ou en crabe, rotation à 45° |
Votre programme de l'activité 5 correspond à laquelle de ces 2 versions ?
Une fois parfaitement fonctionnel, enregistrez votre programme sous le nom buggy_activite_5A.fcf ou buggy_activite_5B.fcf selon votre version.