Accueil site Tableur Programmation Outils XML Tic en stock Téléchargement Informations



Tortue et Logo

Réalisation finale

Programme 
 
Présentation
Liste matériel
Partie mécanique
  Plaques support
  Support des moteurs
  Plaque inférieure
  Roue arrière pivotante
  Plaque supérieure
Partie électronique
  Test des moteurs
  Test de l'écran LCD
  Test du récepteur IR
Réalisation finale
  Assemblage
  Programme
Fonctionnement
  Commandes
  Utilisation
 
Programme de la tortue
Ce programme doit être adapté à la télécommande choisie et répondre à certaines possibilités (cahier des charges).
Cahier des charges
La tortue doit pouvoir se mouvoir sur un plan (le sol, une table, ...) en répondant à des instructions de déplacement : AV pour avance, RE pour recule, TD pour tourne à droite, TG pour tourne à gauche. Avec les télécommandes à 21 touches on pourra aussi utiliser les instructions de répétition RP (pour Répète) et FR (pour Fin Répète) pour répéter un certain nombre de fois (à indiquer juste après l'instruction RP) les commandes encadrées par RP et FR. On retrouve donc le langage Logo réduit à ces quelques instructions (Logo est bien plus riche).
Les instructions AV et RE doivent être suivies par un nombre de pas de 0 à 999 (un pas fait 1 cm)
Les instructions TD et TG doivent être suivies par la mesure d'un angle exprimée en degré de 0 à 360. Toutefois on pourra indiquer un angle supérieur à 360° (jusqu'à 999°) mais il lui sera retiré 360° autant de fois que nécessaire pour obtenir un angle inférieur ou égal à 360°. Par exemple un angle de 420° sera en réalité un angle de 60° (420 - 360 = 60).
Une instruction de déplacement suivi par un nombre (inférieur à 999), c'est à dire une commande, peut être exécutée directement (mode direct, sauf avec la quatrième télécommande qui ne possède que 17 touches) ou enregistrée en mémoire suivie par d'autres commandes (mode programme). Un programme, une fois exécuté devra pouvoir l'être de nouveau (à l'identique) par une touche dédiée.
Pour une plus grande souplesse, on devra pouvoir effacer une partie ou la totalité d'une commande aussi bien en mode direct qu'en mode programme.
Les commandes seront tapées avec les touches de la télécommande choisie, il faut donc attribuer des fonctions aux touches.

Télécommande Elegoo
Télécommande Carmp3


Télécommande Joy-it (vendu par Go Tronic)
Télécommande de Keyestudio

Ces fonctions devront être implémentées dans le programme de la tortue (un programme par type de télécommande puisque les touches ne sont pas toutes au même endroit pour la même fonction). Les Entrées/Sorties de la carte Uno R3 seront commandées par le programme de la tortue qui sera téléversé sur la carte, pilotant ainsi la tortue.
Codage du programme
Pour la télécommande Elegoo, on peut télécharger le programme de la tortue (TortueLogoS1.zip - 3 Ko)
Pour la télécommande Carmp3, on peut télécharger le programme de la tortue (TortueLogoS2.zip - 3 Ko)
Pour la télécommande Joy-it (vendu par Go Tronic), on peut télécharger le programme de la tortue (TortueLogoS3.zip - 3 Ko)
Pour la télécommande à 17 touches de Keyestudio, on peut télécharger le programme de la tortue (TortueLogoS4.zip - 3 Ko)

Ces programmes ne diffèrent que par la fonction de décodage des touches de la télécommande sauf pour la télécommande de Keyestudio qui est particulière (17 touches) et dont le programme possède moins de fonctionnalités (le mode direct et les instructions RP et FR ont été supprimés).

Une fois le fichier correspondant à la télécommande téléchargé, il faut le copier du dossier Téléchargements vers le dossier Arduino et décompresser le fichier zip. On obtient alors le dossier TortueLogoS qui contient le fichier TortueLogoS.ino
Lancer l'IDE d'Arduino et par le menu Fichiers puis Ouvrir, parcourir les dossiers jusqu'au dossier Arduino puis TortueLogoS et cliquer sur le fichier TortueLogoS.ino. Le programme apparaît alors sur l'écran de l'ordinateur. Le programme ci-dessous est celui de la télécommande Joy-it.

Le programme commence par le lier aux bibliothèques nécessaires du domaine public (crées par d'autres programmeurs) :

//Ce programme utilise les bibliothèques IRremote, Stepper et LiquidCrystal_I2C
#include "IRremote.h"
#include <Stepper.h>
#include <LiquidCrystal_I2C.h>


Les lignes suivantes du programme déclarent les constantes et variables globales nécessaires au programme :

const int pasParTour = 2048; //nombre de pas par tour du moteur
const double diamRoue=6.7; // diamètre (en cm) des roues motrices (à modifier éventuellemnt)
const double distIntRoue=15.58; //distance (en cm) entre les deux roues milieu à milieu (à modifier éventuellement)
const double pi=3.14159265;
int receiver = 12; //Signal Pin of IR receiver to Arduino Digital Pin 12
String commande=""; //variable pour mémoriser les commandes d'une procédure
String comdirecte=""; //variable pour mémoriser une commande directe
String comparam=""; //variable pour mémorisée 4 caractères (commande avec paramètre)
double peri=pi*diamRoue; //distance pour un tour de roue soit le périmètre de la roue
double disang=pi*distIntRoue/360; // distance à parcourir pour 1 degré
bool proc=false; //pour passer en mode procédure
bool execp=false; //pour programme exécuté
bool execdc=false; //pour commande directe exécutée

Remarques :
- avec 2048 pas par tour, un pas mesure (en cm) le périmètre de la roue divisé par 2048 soit : péri/pasParTour
- la distance à parcourir par les roues pour faire tourner la tortue de 1° est : le périmètre du cercle de diamètre 15,5 cm divisé par 360 :


L'écran LCD étant relié aux pins A4 et A5 (SDA en A4 et SCL en A5), la suite du programme initialise les Moteurs et l'écran LCD :

LiquidCrystal_I2C lcd(0x3F,16,2); //initialise l'écran LCD Série dont l'adresse est : 0x3F ou 0x27
Stepper MoteurPasAPasD(pasParTour, 8, 10, 9, 11); //initialise la librairie du moteur droit avec les pins de 8 à 11
Stepper MoteurPasAPasG(pasParTour, 4, 6, 5, 7); //initialise la librire du moteur gauche avec les pins 2 à 5

Viennent ensuite les procédures et fonctions du programme, d'abord celle qui découpe le programme Logo en commandes exécutables.
La procédure ExeProg
Le programme Logo (issu de la fonction gérant les touches de la télécommande qui sera décrite après), est une chaîne de caractères de la forme suivante : "AV10TD90AV15TG120...".
Dans la procédure ExeProg ci-dessous, le nombre de pas est limité à 999 (soit environ 10 m) et la mesure de l'angle à 999°.
Cette procédure fractionne la chaîne en commandes simples en utilisant une boucle while condition (jusqu'à ce que la chaîne soit parcourue en entier). Cette boucle envoie chaque commande exécutable (pascom : avec l'exemple précédent pascom = "AV10" puis "TD90"," AV15", "TG120",...) à la procédure ExeCom. Mais si la commande exécutable pascom commence par "RP" (Répète) alors la partie de la chaîne contenue entre "RP" et "FR" (Fin Répète) est traitée par la fonction TraitRepete.


La fonction TraitRepete
Cette fonction extrait d'abord le nombre nbr de répétition puis détecte la fin de la chaîne à répéter pour extraire du programme Logo la chaîne à répéter. Cette chaîne est renvoyée à la procédure ExeProg autant de fois que le nombre de répétition. A la fin de la fonction TraitRepete, est passé le pointeur sur le début de la prochaine commande exécutable du programme Logo à la fonction ExeProg qui reprend la main et traite la suite du programme si nécessaire.


La procédure ExeCom
Cette procédure décompose une commande provenant d'un programme ou d'une commande directe (par exemple "TG120") en la partie instruction de déplacement (ici "TG") et le nombre qui suit (ici "120") et les envoie à la procédure Moteurs.



La procédure Moteurs
Elle met en marche les moteurs avec les paramètres qui lui sont passés c'est à dire une instruction de déplacement (commande : AV, RE, TD ou TG,) et un nombre (pasang : pas ou angle).


Il y a quatre traitements différents, un pour chaque instruction de déplacement. Pour chacune de ces instructions, le traitement consiste à calculer le nombre de tours nécessaires en fonction du deuxième paramètre passés à la fonction (pasang) et des propriétés physiques de la tortue (diamètre des roues et écartement des roues). Les instructions suivantes :
MoteurPasAPasD.step(1);
MoteurPasAPasG.step(1);
font faire un pas au moteur droit et au moteur gauche dans le même sens (normalement dans le sens de la marche avant si on a branché correctement les fils du moteur sur la carte Arduino R3). On peut corriger le sens de marche de chaque moteur soit en inversant les connexions des fils soit en mettant step(-1) à la place de step(1) dans le programme
Une boucle for(de 0 à n) permet d'effectuer autant de pas que nécessaire pour le nombre de tours calculé en sachant que le nombre de pas par tour est 2048 (pasParTour = 2048)
La tortue tourne sur place en mettant l'un des moteurs en marche avant et l'autre en marche arrière. A noter que les angles supérieurs à 360° sont convertis en l'angle correspondant inférieur à 360° par une boucle while(condition)
La Fonction EffaceDerCar
Cette fonction permet de corriger les erreurs lors de l'appui sur les touches de la télécommande pour écrire une commande exécutable en cours de saisie (par exemple "AV100"). On peut ainsi effacer caractère par caractère le nombre (ici "100") par appui successif sur la touche EQ ou SETUP suivant la télécommande, puis si nécessaire l'instruction de déplacement (ici AV). La fonction renvoie la chaîne de commande amputée d'un caractère ou une chaîne vide.


La procédure DecodageIR
Le capteur infrarouge détecte la touche appuyée et renvoie son code par IrReceive.decodedIRData.command
Un sélecteur switch ...case permet, en fonction du code de la touche, d'affecter à la variable commande et/ou comparam la valeur décidée pour la touche (AV, RE, TD, TG et chiffres de 0 à 9) sauf pour les codes 13 (répète la commande directe ou le programme), 21 (exécution du programme ou de la commande directe), 67 (mode programme, passage de la variable prog à true) et 68 (Efface, appel de la fonction EffaceDerCar).
C'est par les touches correspondant à une instruction de déplacement (AV, RE, TD ou TG) que commence une nouvelle commande directe ou un programme, d'où le traitement particulier des codes correspondants. La variable commande n'est affectée que par la valeur précédente de la variable comparam. C'est pourquoi la chaîne envoyée à le procédure Exeproc est : commande+comparam.
Viennent ensuite les différents affichages à faire sur l'écran LCD en fonction des situations (les variables prog, execp, execdc, commande, comparam permettent de les distinguer). Ces affichages reposent sur trois fonctions décrites juste après.


La procédure AffichageProg
Cette fonction est chargée d'afficher le mot "Programme" sur la première ligne de l'écran et les 16 derniers caractères du programme Logo sur la deuxième ligne.


Les procédures AffichageL1 et AffichageL2
AffichageL1 efface l'écran LCD et affiche sur la première ligne le texte qui lui est passé en paramètre. AffichageL2 n'efface l'écran que si le deuxième paramètre est true et affiche le texte passé en premier paramètre sur la deuxième ligne de l'écran.


La procédure AffichageMem
Cette procédure affiche sur l'écran LCD le programme ou la commande directe qui reste en mémoire après exécution.


Setup
Initialise au démarrage du programme le capteur IR, la vitesse des moteurs, l'écran LCD et son affichage initial.


Loop
Cette boucle s'exécute en permanence et détecte l'appui sur une touche et passe alors le code de la touche à la fonction DecodeIR.


© SiteFormTice Février 2023 - Tous droits réservés. Limitation à l'usage non commercial, privé ou scolaire.