Le projet de quatrième session à pour objet de contrôler un véhicule motorisé possédant un système dallas (DS89C450). Notre véhicule peut également recevoir de l’information provenant soit de la télécommande réalisée avec un système UPSD (UPSD3254A) soit d'un téléphone intelligent Android via la communication Bluetooth. Le véhicule peut être contrôlé ou être indépendant grâce à ses différents capteurs montés à l’avant du bolide. Dans les modes indépendants disponibles, le mode automatique permet de suivre une ligne au plancher et le mode évitement permet d’éviter les obstacles avec les capteurs frontaux.
Allez voir ma vidéo Youtube : Projet Session 4
En allumant la télécommande contrôlée par la carte UPSD, un mot de passe est demandé à l’utilisateur pour pouvoir accéder aux diverses fonctions de celle-ci. Dans ce mode, tant que le bon mot de passe n’a pas été entré au clavier, il est impossible d’utiliser la télécommande.
Une fois le code d’accès validé, il faut choisir entre modifier le mot de passe à l’aide de la touche (A) ou accéder au mode manuel avec la touche (B).
Dans le premier cas, il suffit d’entrer 3 caractères compris entre 0-9 pour modifier l’ancien mot de passe.
Dans le mode manuel, l’utilisateur peut faire avancer (2), reculer (8), tourner à droite (6), à gauche (4), arrêter le véhicule (5) passer en mode enregistrement (0) ou activer l’enregistrement (1). À chaque fois qu’une de ces touches est appuyée (2, 8, 6, 4), les variables « iRapidite » (avancer et reculer) et « iDirection » (droite et gauche) seront incrémentées ou décrémentées selon leurs états respectifs (4 niveaux d’intensités (25, 50, 75, 100) ou (-25, -50, -75, -100) pour chaque axe (X et Y) et quadrant (0°, 90°, 180°, 270°)). Même chose pour le mode inclinomètre à l’exception près que les touches sont obsolètes puisque les variables (ucHiX, uxLoX, ucHiY, ucLoY) sont modifiées suivant le niveau d’inclinaison de la télécommande.
Le mode enregistrement active la LED P1_0 et envoie la trame pour enregistrer. Il suffit par la suite d’appuyer sur la touche (1) pour rejouer l’enregistrement. La touche (*) permet d’accéder au mode horloge pour changer l’heure et la touche (#) pour activer le klaxon. Dans le mode horloge, il suffit d’entrer l’heure désirée au clavier de la façon qui suit : HH/MM/SS avec 6 caractères en tout. L’heure sera alors modifiée et synchronisée avec le véhicule. Le klaxon peut être actionné dans tous les modes. Les modes suivants : automatique, manuel, évitement et inclinomètre seront expliqués dans le fonctionnement du véhicule. Toutes les trames sont transmises via la connexion Bluetooth (MASTER) connectée au port 1 de l’UPSD.
Le véhicule fonctionne sous plusieurs modes :
Mode Automatique :
Ce mode permet au véhicule d’être autonome et de suivre une ligne au sol à l’aide d’un capteur placé à l’avant du bolide. Le capteur a une résolution de 5 LEDs ce qui nous permet de réorienter le véhicule lorsqu’il dévie de sa trajectoire (la ligne à suivre).
Mode Manuel :
Ce mode permet de contrôler le véhicule à distance à l’aide des boutons du clavier de la télécommande (voir le tableau ci-dessus).
Mode Évitement :
Ce mode permet au véhicule de se déplacer de façon autonome en évitant les obstacles qu’il rencontre sur son chemin. À l’aide de trois capteurs infrarouges (Gauche, centre, droit), on peut connaître la distance entre le bolide et les obstacles. Avec ces données, on peut faire tourner plus ou moins le bolide pour qu’il évite les obstacles avant qu’il ne les rencontre.
Mode Inclinomètre :
Ce mode permet de contrôler le bolide avec l’inclinaison de la télécommande. L’inclinomètre sur la télécommande possède une résolution de 100 degrés d’inclinaison sur les trois axes de l'espace. Plus le degré d’inclinaison est élevé, plus le véhicule avance rapidement.
Mode Enregistrement :
Ce mode permet d’enregistrer un parcours avec les boutons de la télécommande et de le reproduire par la suite. Pour ce faire, il faut appuyer sur la touche « 0 » du clavier et la LED de la télécommande va s'allumer. Cela permet d’avoir un indicateur visuel qui renseigne sur l'enregistrement ou non du parcours. Lorsqu’on enregistre un parcours, les trames transmises commencent par la lettre « R » contrairement au mode manuel où les trames commencent par la lettre « D ». Une fois le parcours enregistré, les directions et les temps pour chaque direction sont enregistrés dans un tableau sur le bolide. Pour arrêter l’enregistrement, il faut appuyer sur une autre touche. Finalement, il faut appuyer sur la touche « 1 » pour faire rejouer l’enregistrement. Le mode enregistrement sauvegarde seulement un parcours. Pour en enregistrer un nouveau, il faut appuyer sur le bouton reset de la carte DALLAS qui réinitialise le système.
Sur le bolide, il y a quatre boutons poussoirs, connectés sur la carte I2C, qui permettent de changer le menu sur la carte DALLAS. Le menu principal affiche la tension de la batterie, la trame reçue en hexadécimal et l’heure du système. Les trois autres menus sont des menus de « débogage » qui sont très utiles pour connaître les valeurs brutes des capteurs du véhicule. Entre autres, on retrouve les valeurs des capteurs infrarouges, du capteur suiveur et des trames reçues en hexadécimal et en ASCII pour faciliter la gestion du matériel.
De plus, le véhicule est muni de lumières indicatrices qui permettent de facilement connaître la direction du bolide. Il y a trois LEDs sur l'avant à droite et trois LEDs sur l'avant à gauche qui permettent de savoir si le véhicule tourne d’un côté ou de l’autre. On trouve aussi neuf LEDs à l'arrière du véhicule qui s'allument lorsque le bolide recule.
Nous trouvons deux cartes I2C sur notre bolide pour contrôler les différents périphériques. Nous utilisons trois convertisseurs analogiques/numériques pour la lecture des capteurs infrarouges dans le mode évitement. Nous utilisons un autre convertisseur analogique/numérique pour la lecture de la batterie 10.8V et si la tension de la batterie devient trop basse, nous arrêtons le véhicule. Finalement, nous utilisons un dernier convertisseur analogique/numérique pour lire un potentiomètre qui permet de limiter la vitesse du bolide. Sur les cartes I2C, on utilise également les différentes entrées/sorties pour contrôler les lumières (tel que mentionné plus haut), le klaxon et les boutons poussoirs qui servent à changer les menus sur la carte DALLAS (mentionné plus haut).
La carte I2C contrôle les moteurs en passant par un convertisseur numérique/analogique. Comme les contrôleurs des moteurs nécessitent une tension analogique entre 0 volts et 5 volts, notre convertisseur fonctionne très bien. Dans notre programme, nous avons opté pour un contrôle des moteurs en pourcentage pour faciliter la gestion des vitesses. Par exemple, sur l’axe des Y, lorsqu’on applique 100%, le bolide avance à sa vitesse maximale et lorsqu’on applique -100%, le véhicule recule à sa vitesse maximale.
La communication entre la télécommande et le véhicule se fait par l'intermédiaire de la communication série via Bluetooth.
- Du côté de la télécommande, on envoie des trames de sept caractères ASCII. Le premier caractère correspond au mode choisi par l’utilisateur. Les deux caractères suivants correspondent à la vitesse du véhicule sur l’axe des Y et les deux caractères suivants correspondent à la vitesse du véhicule sur l’axe des X. Finalement, les deux derniers caractères servent au checksum. Le checksum est une sécurité qui sert à valider que les informations transmises dans la trame sont valides. Pour calculer le checksum, on additionne tous les caractères et on transforme la valeur en deux caractères ASCII.
- Pour ce qui est de la réception de cette trame, le véhicule reçoit chacun des caractères et va faire une tâche uniquement si les sept caractères sont reçus et que la trame est valide. Le véhicule doit donc transformer les caractères ASCII en décimal pour envoyer au moteur la bonne vitesse. Ainsi, selon le premier caractère de la trame, le mode du véhicule va changer.
- Pour ce qui est de l’application Android, les trames transmises suivent le même schéma que la télécommande, ce qui permet de contrôler le véhicule avec différents dispositifs, en conservant le même protocole de communication.
Trame envoyée par la télécommande et reçue par le véhicule via la communication Bluetooth :
CLAVIER :
La classe CLKeypad est utilisée pour le clavier géré par interruption (extern0) qui permet la gestion des différents menus affichés à l’écran.
AFFICHAGE :
La classe CLEcran est utilisée pour la gestion de l’affichage. Différents délais sont imposés à certaines variables (uiHeure, ucAffX, ucAffY et uiIncli) pour faciliter la vitesse d’exécution du programme et favoriser le bon fonctionnement de l’écran.
HORLOGE :
La classe CLI2CDS1307 est utilisée pour la gestion de l’horloge. Le mode horloge permet de modifier l’heure à l’aide du clavier puis d’aller l’écrire sur le DS1307. Une lecture du DS1307 faite en quasi permanence permet d’afficher l’heure à l’écran et de la transmettre au véhicule à l’aide de la trame cTabHeure[] afin qu’elle soit synchronisée avec celle de la télécommande. Cette classe est aussi utilisée pour la gestion du mot de passe qui est contenu dans la mémoire du realtime clock dans les registres « mois » et « année ».
SÉCURITÉ :
Le mot de passe à 3 caractères est contenu dans la mémoire du realtime clock dans les registres « mois » et « année ». L’utilisateur appuie sur 3 touches du clavier (ce qui incrémente la valeur ucStage) qui sont par la suite comparées avec ces registres. Si la comparaison est positive, la sécurité est levée (ucSecurite = 1) et on peut par la suite décider si l'on change le mot de passe ou si l'on accède aux menus. Dans le cas contraire, on remet la variable ucStage à 0 et on recommence le processus à 0.
INCLINOMÈTRE :
Les variables (ucHiX, uxLoX, ucHiY, ucLoY) sont modifiées en fonction du niveau d’inclinaison de la télécommande. Le principal avantage de ce mode réside dans ses valeurs analogiques contrairement au mode manuel qui est contrôlé par des valeurs numériques.
MANUEL :
La variable « cMouR » sert à déterminer si on est en mode enregistrement ou manuel. Dans ce dernier mode, l’utilisateur peut faire avancer (2), reculer (8), tourner à droite (6), à gauche (4), arrêter le véhicule (5) passer en mode enregistrement (0) ou activer le replay (1). À chaque fois qu’une de ces touches est appuyée (2, 8, 6, 4), les variables « iRapidite » (avancer et reculer) et « iDirection » (droite et gauche) seront incrémentées ou décrémentées selon leurs états respectifs (4 niveaux d’intensités (25, 50, 75, 100) ou (-25, -50, -75, -100) pour chaque axe (X et Y) et quadrant (0°, 90°, 180°, 270°)).
ENREGISTREMENT :
La variable « cMouR » sert à déterminer si on est en mode enregistrement ou manuel. Il faut être d’abord en mode manuel pour passer en mode enregistrement. Lorsqu’on est dans ce mode, la LED située à P1_0 s’allume et le nouveau menu s’affiche à l’écran. Tant que l’on ne change pas de mode, toutes les actions effectuées seront enregistrées. Il suffira par la suite d’appuyer sur la touche (1) pour activer le replay et faire jouer la séquence d’enregistrement.
Le bolide est contrôlé par la carte DALLAS qui représente le cœur du véhicule. Dans un premier temps, lors du démarrage, le véhicule est en mode manuel (Gestion des directions avec la télécommande). Dans le mode automatique, comme il y a cinq LEDs sur le capteur, on a 32 cas différents à gérer. Par contre, plusieurs de ces cas sont peu probables, donc nous avons décidé de gérer seulement 18 d’entre eux. Aussi, à tout moment (par interruption), le programme reçoit de l’information en provenance de la télécommande (via Bluetooth) pour gérer les modes, les directions et même recevoir l’heure du système. Le véhicule réagit uniquement si une trame complète a été reçue et si la validation de la trame (checksum) a été effectuée avec succès. Aussi, à chaque mouvement du véhicule, peu importe le mode, les lumières indicatives sont activées en conséquence des virages ou des reculs qu’il effectue. Au début du programme, on affiche le menu principal qui affiche la tension de la batterie, la trame reçue et l’heure du système également reçue par la télécommande.
On peut changer les menus en appuyant sur les boutons poussoirs qui sont branchés sur les quatre entrées du PCF8574 de la carte I2C. La lecture des boutons se fait par polling et ce malgré que l’interruption est disponible sur ce circuit et que cette lecture se fait à chaque cycle du programme. Selon les différents menus, on affiche l’information en conséquence, c’est-à-dire, les valeurs brutes des capteurs, la tension de la batterie ou les trames reçues.
Tous les périphériques sont branchés sur la carte I2C, donc ils sont tous contrôlés via le protocole de communication I2C. Les différentes adresses pour contrôler les circuits sont les suivantes :
- PCF8574 (Entrées/Sorties) : 0x40
- PCF8574 (Suiveur de ligne) : 0x44
- MAX1236EUA (Carte I2C) : 0x68
- MAX1236LEUA (Deuxième carte I2C) : 0x64
- DAC6574 : 0x98
Pour les circuits d’entrée/sortie, on peut aller lire ou écrire directement sur un octet, ce qui facilite grandement la communication. Par contre, pour les convertisseurs analogiques/numériques, la donnée est codée sur 12-bits. Donc, pour lire l’information, on utilise une union avec une variable de 16-bits et une structure composée d’une variable de 8-bits et une de 4-bits. Finalement, pour le convertisseur numérique/analogique, la donnée transmise doit être de 10-bits, de ce fait, avec un simple décalage, nous parvenons la générer la bonne tension analogique.
Comme mentionné un peu plus haut, pour le parcours enregistrement, un tableau à deux dimensionS est créé. Le tableau enregistre la direction de la roue droite, la direction de la roue gauche et le temps pour chaque direction. Lorsque le mode rejouer l’enregistrement est activé, l’information du tableau est analysée et réinjectée aux moteurs avec les bonnes temporisations. Le nombre maximal de directions possibles à enregistrer est de 30 dû au nombre limité de la mémoire du véhicule.
** Les schémas complets ne sont pas disponibles pour ce projet du fait de la grande quantité de cartes électroniques utilisées et pour conserver les droits d'auteurs de certaines cartes électroniques.
Sans abonnement | Abonnés et Abonnés VIP |
![]() |
![]() |