Vous êtes sur la page 1sur 43

Intro – Conclusion – Priorité a droite – Bloc gestion : rédigé par Frédéric Veloso. Présentation générale – Bloc MLI – Guidage : rédigé par Maxime Topin

générale – Bloc MLI – Guidage : rédigé par Maxime Topin Projetdefind’annéed’étudeset réalisation - 1 -

Projetdefind’annéed’étudeset

réalisation

générale – Bloc MLI – Guidage : rédigé par Maxime Topin Projetdefind’annéed’étudeset réalisation - 1 -

-

1 -

I Introduction

II Présentation générale du projet

III Interface de puissance

IV La partie guidage

V Partie ultra son et détection d’obstacle

VI Partie démarrage en aveugle

VII Conclusion

- 2 -

Chapitre

L’ensemble des départements de GEII se sont regroupés pour mettre au point, à partir de l’année 2002, une plateforme de robot équipée de 2 moteurs à courant continu de 20W/12V. Le but étant de faire suivre au robot une ligne au sol matérialisée par une ligne blanche de 19

mm de large. Le robot étant construit à partir d'un kit imposé par le comité d'organisation,

comprenant le châssis, les moteurs, les roues et la batterie. Les parties liées à la motorisation

ne devant être ni modifiées, ni déplacées. Le robot doit être capable de suivre une piste le plus rapidement possible, de faire tomber une première barre située à la fin de la piste et de laisser en place une seconde barre distante de 20 cm de la première. Le concours se déroulera sous forme de passage simultané de deux robots et la règle de la priorité à droite y sera appliquée. Durant les 9 séances de 3h30 d’étude et réalisation, nous avons, par binôme, étudié et conçu

des programmes VHDL permettant de respecter le cahier des charges cité ci-dessus. Nous

allons donc voir les évolutions de ce projet tout au long de ce rapport en commençant par une première partie décrivant le bloc MLI, une seconde décrivant la fonction guidage, une troisième intitulée détection d’obstacle et capteur ultrason et enfin une dernière partie décrivant le démarrage a l’aveugle.

!

Le but de cette réalisation est de réaliser la partie gestion d’un robot. Ce robot est constitué de deux roues motrices, d’une batterie. Il possède donc sa propre autonomie. La programmation qui sera implantée en plus dans ce robot. Cette programmation devra permettre au robot de suivre le plus rapidement une ligne blanche collée au sol. Il devra aussi détecter un robot a droit afin de s’arrêter avant le carrefour pour laisser passer l’autre robot. Et

enfin le robot devra s’arrêter en fin de parcours. A la fin de parcours, le robot devra faire tomber un rondin de bois placé sur deux calles, et il ne devra pas toucher un deuxième rondin situé à 20cm derrière le premier. Ce projet débouchera sur un challenge inter IUT. C'est-à-dire que

tout les IUT GEII de France concourent sur un circuit spécifique.Deux équipes se mesure sur le

même circuit. Chaque robot a sa ligne. C’est le robot qui est arrivé le premier qui remporte la

victoire.

Le robot est constitué de deux roues motrices. Avec chacune son moteur. Ce sont des moteurs électriques de 20 watts 12 volts. Les moteurs sont alimentés par une batterie. Toute la partie puissance est déjà fournie. Aucune modification ne devra être apportée à la partie puissance. Le robot ne doit pas dépasser ; 30 cm de large, 30 cm de long et 1 mètre de haut.

" # $

Le but de l’épreuve est de finir la course le plus rapidement possible en respectant les points suivants :

Les caractéristiques de puissance du robot ne pourront être modifiés. On ne peux

changer de batterie en ajouter une… On ne peut modifier la taille du robot Le démarrage se fait uniquement en tirant sur le jack

Après le départ aucune personne ne devra se trouver sur la piste.

Les robots doivent contourner tous les plots situés à l’intérieur des courbes. Ils ne

doivent pas les toucher La programmation de la piste est interdite

- 3 -

Si les deux robots arrivent en même temps sur un carrefour, il y a priorité a droite. Si

un robot ne respecte pas la priorité a droite, il repart avec un retard de 10 secondes. Si une nouvelle collision se provoque le retard est cumulé Les robots ne peuvent pas se toucher

A l’arrêt, le robot prend une pénalité si il ne fait tomber la deuxième barre de bois ou si Il ne s’arrête pas automatiquement. Si une de ces deux conditions n’est pas respecté, le robot prend une pénalité de retard.

Les robots seront classés suivant le classement suivant :

Prix de la solution technique la plus simple

Prix du robot le plus soigné

Prix du design

Prix du fair-play

Prix du robot le plus

- 4 -

Chapitre

%

!

Le but de ce projet est de réaliser une gestion de guidage à installer sur la maquette du robot. Cette fonction devra respecter les règles énoncées dans l’introduction. Cette fonction sera réalisée sur Max plus + II puis elle sera implanté dans un composant logique programmable qui se branche sur le robot. Toute cette gestion est décomposée en plusieurs petits bloques qui sont développés et testés les un séparément des autres. Puis qui sont a la fin tous réunis dans un seul pour former la gestion totale.

Cette base roulante est universelle à tout les IUT GEII de France participant au concours. Elle est constituée d’une coque en plastique sur laquelle tous les éléments sont fixés. Les vues suivantes présentent la base roulante :

Réducteurs de vitesse angulaire

la base roulante : Réducteurs de vitesse angulaire Roue droite Batterie Roue gauche Bandeau pour emplacement
la base roulante : Réducteurs de vitesse angulaire Roue droite Batterie Roue gauche Bandeau pour emplacement
Roue droite
Roue droite
Batterie
Batterie
Roue gauche
Roue gauche

Bandeau pour emplacement du bus de connexion

- 5 -

Moteur Capteurs de gauche vitesse
Moteur
Capteurs de
gauche
vitesse
Moteur droit
Moteur
droit

Tous les éléments de ces figures sont déjà montés sur la plateforme. En plus de ces éléments, sont montés les capteurs le bus de connexion, le capteur Ultra Son (pour la priorité a droite) le capteur de fin de parcours (contact placé a l’avant de la base roulante.

Caractéristiques techniques

La base roulante :

Dimensions (mm) : 240 X 240 X 70

Diamètre des roues : 50 mm

Masse a vide : 2 Kg

Charge Utile : 2 Kg

Vitesse max : 1,3 m/s

La batterie

Batterie au plomb

Tension : 12 v

Energie : 1,2 AH

Emplacement des capteurs de ligne 125 mm 230 mm
Emplacement des
capteurs de ligne
125 mm
230 mm

- 6 -

Lorsque cette gestion est implantée dans le robot, elle communique avec des capteurs. Tous les capteurs installés sur le robot sont donc reliés électriquement à la gestion. On peut donc représenter cette fonction par un bloque (cf. figure 1). Mais à l’intérieur on la décompose en plusieurs petites fonctions (cf. figure 2).

Figure 1

Eléments déjà présents sur la maquette

Capteur de fin de parcours

Capteur de fin de parcours
Capteur de fin de parcours
Capteur de fin de parcours
Capteur de fin de parcours
Capteur de fin de parcours

Capteurs de positions et mise en forme du signal

Fin de course

Bloc de gestion de parcours

Partie rajoutée

Fin de course Bloc de gestion de parcours Partie rajoutée Interface de puissance et gestion des
Fin de course Bloc de gestion de parcours Partie rajoutée Interface de puissance et gestion des

Interface de puissance et gestion des moteurs en fonction de ce qu’on demande

Etat des 6 capteurs

Horloge

fonction de ce qu’on demande Etat des 6 capteurs Horloge Réf mot 1 Réf mot 2

Réf mot 1

de ce qu’on demande Etat des 6 capteurs Horloge Réf mot 1 Réf mot 2 Horloge

Réf mot 2

demande Etat des 6 capteurs Horloge Réf mot 1 Réf mot 2 Horloge a 100KHz Capteur

Horloge a 100KHz

Capteur de détection de robot a droite

Capteur de détection de robot a droite

Capteur de détection de robot a droite
Capteur de détection de robot a droite
Capteur de détection de robot a droite
Capteur de détection de robot a droite

Robot a droit

100KHz Capteur de détection de robot a droite Robot a droit Sur la figure 1 ,

Sur la figure 1, le « bloc de gestion général » au centre est le la partie a programmer. Tous les éléments autours existent déjà sur la maquette. L’horloge de 100 kHz est aussi intégrée sur la maquette. Toutes ces fonctions sont liées entres elles par des signaux électriques logiques. C'est-à- dire que ces signaux possèdent deux états. Le 5 volt ou le 0 volt. L’état logique « haut » correspond au 5 volt et l’état logique bas correspond au 0 volt. Ces signaux logiques permettent aux fonctions de dialoguer entre elles par des ports d’entrées et de sortie. Certains capteurs utilisent ce type de signal mais d’autres utilisent des signaux analogiques. Ce sont des signaux qui peuvent prendre plusieurs valeurs. Par exemple un signal peut varier entre 0 et 7 volts. Dans ce projet, aucun capteur extérieur à la gestion ne communique avec des signaux de type analogiques.

- 7 -

Figure 2

ctée

Bloc de gestion général

Signaux commandant la vitesse des moteurs

Bloc de

gestion de

parcours

la vitesse des moteurs Bloc de gestion de parcours Références logiques Bloc de création des signaux

Références

logiques

Bloc de création des signaux de commande des moteurs Ou « MLI »

Bloc de création des signaux de commande des moteurs Ou « MLI »
Bloc de création des signaux de commande des moteurs Ou « MLI »
Bloc de création des signaux de commande des moteurs Ou « MLI »
Bloc de création des signaux de commande des moteurs Ou « MLI »
Bloc de création des signaux de commande des moteurs Ou « MLI »

Bloc de

guidage

Bloc de guidage
Bloc de guidage
Bloc de guidage
Bloc de guidage

Robot a la fin du parcours

Ou « MLI » Bloc de guidage Robot a la fin du parcours Bloc de gestion

Bloc de

gestion du

capteur ultra

Autre robot

son

Le Robot est

détecter

détecté à moins de 30 cm

Bloque de

puissance

Ligne déte

Etats des capteurs
Etats des
capteurs
30 cm Bloque de puissance Ligne déte Etats des capteurs Etat du capteur frontal Etat du
Etat du capteur frontal Etat du capteur ultra sons
Etat du
capteur
frontal
Etat du
capteur
ultra sons

Sur la figure 2, on effectue un zoom dans « le bloc de gestion général ». Ce bloc est décomposé en quatre fonctions liés entres elles par des signaux analogiques. Les signaux entrant et sortant du « bloc de gestion général » sont des signaux logiques. Il est décomposé suivant les blocs suivants :

Bloc de guidage : Ce bloc reçoit toutes les infos capteurs, les interprète et en fonction des infos capteurs, génère deux signaux indiquant la vitesse des deux moteurs. Ce bloc permet au robot de suivre la ligne correctement Bloc de création des signaux de commande des moteurs (ou MLI) : Ce bloc reçoit du bloc guidage, les signaux indiquant la vitesse a appliquer la vitesse des moteurs. Ce bloc convertie ces signaux affin de commander directement les moteurs. Il commande directement la partie puissance Bloc de gestion du capteur Ultra son : Celui-ci est chargé de commander le capteur. Il envoi une autorisation de mesurer au capteur. Puis il interprète le signal renvoyé du capteur. Et en fonction de ce retour, il génère un signal indiquant si oui ou non il y a un robot a moins de 30 cm a droit. Bloc de gestion de parcours : En fonction des signaux capteurs, signaux indiquant la priorité a droite et signaux de fin de parcours, ce bloc arrête les moteurs les mets a fond (départ en aveugle) ou sélectionne le guidage. C’est ce bloc qui sélectionne le mode de fonctionnement du robot (exemple : laisser la priorité, arrêter le robot a la fin, départ en aveugle, robot en mode guidage). Le but de ce projet est l’étude des signaux d’entrée et de sortie et l’étude de ces quatre blocs. La première étape est l’étude de l’interface de puissance affine d’étudier par la suite le bloc de confection des signaux de commande des moteurs.

- 8 -

Chapitre

&

#

L’interface de puissance est composée de deux parties qui sont la partie puissance et les commandes de moteurs. Le but de la partie puissance est de distribuer la puissance aux moteurs et aux autres parties du robot. Tandis que la commande des moteurs est une partie qui génère les signaux envoyés a la partie puissance. Ces signaux ont pour but de fixer la vitesse des moteurs.

Présentation

La partie de puissance permet de distribuer l’énergie fournie par la batterie du robot aux moteurs. Mais cette partie doit fournir plus ou moins d’énergie aux moteurs en fonction de la demande provenant des montages amont. Elle doit dont être capable de distribuer deux puissances différentes aux deux moteurs. Cette fonction sépare la partie puissance de la partie commande.

Figure 3

Interface commande/puissance

Partie

puissance

Figure 3 Interface commande/puissance Partie puissance Energie Batterie Partie commande Où Bloc de gestion

Energie

Batterie

Partie

commande

Bloc de gestion général

(MLI)

Moteur gauche
Moteur
gauche

Energie distribuée aux moteurs

Moteur droit
Moteur droit
Moteur gauche Energie distribuée aux moteurs Moteur droit Signal de commande du moteur gauche Signal de

Signal de commande du moteur gauche

aux moteurs Moteur droit Signal de commande du moteur gauche Signal de commande du moteur droit

Signal de commande du moteur droit

Cette partie puissance existe déjà sur la maquette. On peut l’observer sur la figure 4.

- 9 -

Logement

batterie

Roue

gauche

Figure 4 : Robot vue de dessous

Logement batterie Roue gauche Figure 4 : Robot vue de dessous Moteur droit Distribution d’énergie Moteur

Moteur

droit

Distribution

d’énergie

Moteur

gauche

Nous allons ici étudier son fonctionnement qui nous permettra de créer une fonction qui génère les signaux de commande des moteurs. Mais avant tout il est nécessaire de savoir comment fonctionnent les deux moteurs.

Les moteurs

Les deux moteurs de ce robot sont des moteurs a courrant continu 12 volts. On peut donc

les alimenter à partir de la batterie installée sur le robot. On peut les voir
les alimenter à partir de la batterie installée sur le robot. On peut les voir en dessous du robot
sur la figure 4 (cf. si dessus). On peut représenter un de ces moteurs par un schéma électrique.
Un moteur est constitué de bobinages (fil enroulé permettant de
Rs
Ls
ULs
créer des champs magnétiques, donc des forces qui font tourner
le moteur) Et ces bobinages ont une résistance Rs et une
inductance Ls. Mais Rs est très faible donc on peut la négliger.
Umot
E
Et en régime permanant, la chute de tension (ULs) aux bornes
de l’inductance est nulle. On en déduit donc que Umot = E. Ici
E est la Force Electromotrice (FEM) du moteur.
Un moteur a courant continu est caractérisé par les équations
suivantes :

Umot = k avec k une constante, la vitesse. La vitesse varie proportionnellement à la tension appliquée au moteur Cmot = k Imot avec k une constante, Cmot le couple du moteur et Imot le courrant moteur. Le couple varie proportionnellement au couple. Au plus le couple du moteur est important, au plus il pourra déplacer de lourdes charges.

Voici quelques caractéristiques des moteurs :

Tension nominale : 12 volts Courrant en charge nominale : 1,45 A Courrant max : 11 A Vitesse nominale : 2640 tr/min a 12 volts

Pour faire varier la vitesse des moteurs donc la vitesse et la courbure de virage du robot, il faut agir sur la tension moteur qui est Umot. Il existe plusieurs façons d’agir sur cette tension pour faire varier la vitesse des moteurs. La première est de la faire varier linéairement. C'est-à- - 10 -

dire qu’on change la tension d’entrée directement. Comme si on branchait le moteur aux bornes d’un générateur de tension que l’on peut faire varier. Mais il existe une seconde façon. Elle consiste a appliquer sur Umot un signal carré périodique et a faire varier la valeur de ce signa. Pour cela on fait varier son rapport cyclique. Le rapport cyclique correspond entre le rapport de la durée du signal à l’état haut sur la durée

totale. La variation du rapport cyclique entraîne la variation de la valeur moyenne du signal. Au plus le signal est longtemps a l’état haut plus la valeur moyenne est grande. Ainsi lorsqu’on fait varier ce rapport, on fait varier la vitesse des moteurs. Sur la figure ci contre on peut voir les deux solutions qui permettent de contrôler la

vitesse des moteurs. Dans ce projet on utilisera la seconde méthode. Il est plus facile de fabriquer un signal logique périodique qu’un signal analogique. Le signal logique est fabriqué a partir de références créés dans le bloc guidage ce sera le rôle du bloc « MLI ». Et enfin une interface de puissance permet de recopier le signal mais avec des caractéristiques cette fois ci adaptés aux moteurs. C'est-à-dire une tension max de 12 volts et un courrant plus important.

L’interface de puissance

Sur la figure 3, la partie puissance est la partie encadrée en pointillés. Elle reçoit les informations du bloc « MLI » (signal sur le second chronogramme) et l’énergie de la batterie. Le rôle de cette interface est de recopier le signal mais avec une tension max plus élevée et des courants plus forts. La tension max est égale à Umot. Pour réaliser cette fonction on utilise un hacheur. Il permet de convertir un signal carré DC en signal carré DC avec une tension max que l’on choisit (ici c’est la tension batterie). Sur la figure 5 on peut voir un schéma simplifié du hacheur affin de comprendre le fonctionnement :

Figure 5

Umot
Umot

t

Umot
Umot

On applique directement la tension afin d’avoir la vitesse désirée

Signal périodique carré avec

un rapport cyclique qui varie la vitesse désirée Signal périodique carré avec Valeur moyenne du signal carré variant en fonction du

Signal périodique carré avec un rapport cyclique qui varie Valeur moyenne du signal carré variant en

Valeur moyenne du signal carré variant en fonction du rapport cycliqueSignal périodique carré avec un rapport cyclique qui varie t Sur ce schéma, K1 et K2

t

Sur ce schéma, K1 et K2 sont des interrupteurs et ne sont jamais ouverts ou fermés en même temps, Vbat est la tension délivrée par la batterie (qui est de 12 v) et Vin le signal logique carré d’amplitude 5 v est le signal généré par le bloc « MLI ». Ce signal est soit a l’état haut soit a l’état bas. Lorsqu’il est à l’état haut, K1 est fermé et K2 ouvert alors le moteur tourne a la vitesse maximum. Mais lorsque Vin est à l’état

bas, K1 est ouvert et K2 fermé le moteur s’arrête. Vin est un signal qui commute très rapidement à une fréquence de 3khz. Le moteur tourne à une vitesse moyenne qui correspond à Umot moyen. Mais ce montage ci contre engendre beaucoup

trop de pertes. Le hacheur lui génère quasiment aucunes pertes. C’est pour cela qu’on préfère le hacheur a ce montage la.

Vbat

Signal logique carré d’amplitude 5 v Vin K1 1 K2 M
Signal logique carré
d’amplitude 5 v
Vin
K1
1
K2
M

0 v

Umot

Etude du hacheur L298 Dual Brige Driver

La figure 6 présente un des deux ponts du hacheur L298 :

- 11 -

Figure 6

Vbat (v+)

K4 est toujours fermé et K3 est toujours ouvert Vin & & In2 = 0
K4 est toujours fermé et K3 est toujours
ouvert
Vin
&
&
In2 = 0
K1
K3
Lorsque Vin est à l’état haut :
M
Vbat
&
&
K2
Umot
K4
K1
K3
ENA
ENA
M
R
K2
Umot
K4
0 v
Schema 1
Schema 2
0 v

Lorsque Vin est a l’état bas

Vbat

Schema 1 Schema 2 0 v Lorsque Vin est a l’état bas Vbat K1 K3 M
Schema 1 Schema 2 0 v Lorsque Vin est a l’état bas Vbat K1 K3 M

K1

1 Schema 2 0 v Lorsque Vin est a l’état bas Vbat K1 K3 M Umot

K3

M
M
Schema 2 0 v Lorsque Vin est a l’état bas Vbat K1 K3 M Umot K2

Umot

K2

K4

Schema 3

0 v

Le schéma 1 représente le schéma électrique du hacheur. En réalité il y a deux ponts comme celui-ci dans un boîtier. Les entrées ENA permettent d’activer les commandes des interrupteurs. Si ENA est à l’état bas, tous les interrupteurs sont ouverts. Affin de conserver K3 et K4 fermés, on laisse In2 à l’état bas. Vin est le signal généré par le bloc « MIL ». Lorsque Vin est a l’état haut, (schéma 2) l’interrupteur K1 se ferme et K2 s’ouvre. On retrouve alors Vbat aux bornes du moteur. Celui-ci tourne donc a pleine vitesse. Lorsque Vin est à l’état bas, (schéma 3) l’interrupteur K1 est cette foi ci ouvert et K2 fermé. Alors la tension aux bornes du moteur est nulle. Le moteur s’arrête.

Caractéristiques techniques principales du hacheur L298 :

Tension V+ max : 50 V

Tension V+ min : 7 V

Courant max Io dans la résistance R : 2 A

Puissance totale dissipée a 75°C : 25 w

Fréquence maximum de Vin : 40 KHz

Le courant maximum supporté étant trop faible, utilise des deux ponts du composant pour chaque moteur. Ce qui limite le courrant max dans le moteur à 4 A. Il faut donc deux hacheurs. Un par moteur. Le hacheur est un composant qui doit dissiper beaucoup de puissance à cause transistors qui jouent le rôle d’interrupteur. Il faut donc fixer des radiateurs sur les deux composants afin d’évacuer la puissance sous forme de chaleur plus facilement. Sur la figure 7, on peut voir le bloc de puissance.

- 12 -

Radiateur en fer

Figure 7

Radiateur en fer Figure 7 La suite du projet correspond à générer les signaux « MLI

La suite du projet correspond à générer les signaux « MLI » que l’on envoie à ce bloc de puissance. C’est un signal logique (0 ou 5 volts) avec un rapport cyclique qui varie en fonction de l’état des capteurs de ligne.

'

Présentation

Ce bloc permet de générer deux signaux de commande de moteurs MLI1A et MLI2A à partir de deux constantes binaires fabriqués par le bloc de guidage. La figure 8 présente la fonction MLI

Figure 8

Schema bloc représentant MLI dans le contexte

Blocs amonts générant les deux références

Bloc MLI

Bloc de

puissance

Hacheurs

Ref 1 deux références Bloc MLI Bloc de puissance Hacheurs 5 bits MLI1A MLI1B Capteurs (Ligne priorité et

5 bits

MLI1A

Bloc MLI Bloc de puissance Hacheurs Ref 1 5 bits MLI1A MLI1B Capteurs (Ligne priorité et

MLI1B

Capteurs

(Ligne

priorité et

fin de

parcours)

Moteurs gauche et droit Puissance
Moteurs
gauche et
droit
Puissance
priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge

MLI2A

priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge

Ref 2 (Ligne priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A 5 bits Horloge MLI2B

5 bits

Horloge

priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge

MLI2B

priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge

Synchro

priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge
priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge
priorité et fin de parcours) Moteurs gauche et droit Puissance MLI2A Ref 2 5 bits Horloge

- 13 -

Afin de réaliser la fonction MLI, L’étude sera organisée de la façon suivante : tout d’abord on commence par dessiner le symbole de la fonction et de noter les ressources d’entrée et de sortie. Ensuite on trace les chronogrammes a obtenir en donnant aux entrées des valeurs au hasard. Ensuite on propose des solutions permettant de réaliser la fonction et enfin on schématise la syntaxe VHDL sous forme d’ordinogramme ou de machines a état.

L’étude

Ressources d’entrée :

Ref MLI1[4

0]

: Bus de 5 bits portant l’information de la vitesse du moteur 1

Ref MLI2[4

0]

: Bus de 5 bits portant l’information de la vitesse du moteur 2

Horloge : Signal d’horloge a 100 KHz (dispo sur la maquette)

Ressources de sortie :

MLI1A : Signal logique périodique a rapport cyclique variable commandant le moteur 1 MLI2A : Signal logique périodique a rapport cyclique variable commandant le moteur 2 MLI1B, MLI2B : Signaux logiques toujours a 1 Synchro : Impulsion logique de 10 µs. Elle se déclanche a chaque début de période des signaux MLI.

Figure 9

5 MLI Ref MLI1[4 0] MLI1A 5 MLI1B Ref MLI2[4 0] MLI2A MLI2B H Synchro
5
MLI
Ref MLI1[4
0]
MLI1A
5
MLI1B
Ref MLI2[4
0]
MLI2A
MLI2B
H
Synchro

Symbole de la fonction :

Voici le symbole de la fonction à réaliser.

31

1

0

1

0

1

0

Chronogrammes

Les chronogrammes sont un moyen de visualiser les signaux logiques en fonction du temps. On les utilise afin de mieux comprendre le fonctionnement. Les signaux Ref MLI est codé sur 5 bits. Ils peuvent donc prendre 32 valeurs possibles allant de 0 a 31 ou encore en binaire de 00000 a 11111. Ici on a fixé deux références MLI au hasard (lignes en gris). Ref MLI1 est fixée a 2 et Ref MLI2 est fixé a 28. La fonction intègre un compteur qui

s’incrémente a chaque coup d’horloge. Il commence a compter a 0 et se réinitialise a 31. Tant que la valeur du compteur est inférieure à Ref MLI1, MLI1A est à l’état haut. Lorsque le compteur est supérieur à Ref MLI1 alors MLI1A est à l’état bas. De même pour MLI2A mais cette fois ci en comparant l’état du compteur avec Ref MLI2.

Ainsi on crée les deux signaux MLIXA de rapport cyclique :

Etat d’un compteur Ref MLI2 Ref MLI1 MLI1A t1
Etat d’un compteur
Ref MLI2
Ref MLI1
MLI1A
t1
T MLI2A t2
T
MLI2A
t2

t

t

t1 =

T

- 14 -

t

1

0

Avec T la période du signal et t1 le temps a l’état haut et le rapport cyclique. Lorsque le rapport cyclique = 1la valeur moyenne est maximal et lorsque est proche de 0 alors la valeur moyenne est quasiment nul (signal à l’état bas). Pour augmenter le rapport cyclique il suffit d’augmenter la Ref MLI. Ainsi on augmente la vitesse de rotation des roues Le signal synchro (chronogramme ci-contre) est une

t impulsion d’une période d’horloge qui signal la fin d’une période T. On verra son utilité dans la suite de

l’étude (cf. chapitre Le bloc de guidage) Tous ces signaux sont synchronisés sur le front montant de l’horloge de la maquette qui est de 100Khz. C'est-à-dire que un signal ne peut changer que sur un front montant de H.

La réalisation

Synchro
Synchro

Les solutions :

Pour réaliser ce bloc on se propose d’intégrer un compteur synchrone modulo 32, et de comparer les ref MLI a l’état du compteur. Lorsque la valeur du compteur est inférieure aux Ref MLI, les signaux MLI sont à l’état haut. Pour ceci on réalise deux comparateurs. On assemble le compteur et les deux comparateurs (il y a deux Ref MLI a comparer) de la façon suivante :

Le logigramme interne du bloc :

Figure 10

 

Compteur

 

modulo 32

 

5 bits

Comparateur

 
 

Q[4

0]

  Q[4 0]   1 MLI1A
 

1

MLI1A

   

Q[4

0]

 

S

 
      REF[4 0]
      REF[4 0]
     

REF[4

0]

   

Ref MLI1

5

bits

Comparateur

 

5

bits

 

Q[4

0]

2

S

MLI2A

   

Ref MLI2

REF[4

0]

 

+VCC

 

H100KHz

MLI1B MLI2B
MLI1B
MLI2B

H100KHz est l’horloge de la maquette. Les deux signaux MLI1B et MLI2B sont toujours à

l’état haut. Ils sont connectés a +VCC qui est l’alimentation du bus (5 volts). C’est à partir de ce logigramme figure 10 que l’on décrit MLI en VHDL. Pour cela on réalise l’étude de chacun

des

logigramme.

ce

éléments

de

Début OUI Front montant de H Qt=Qt+1 Fin
Début
OUI
Front montant
de H
Qt=Qt+1
Fin

NON

Etude du compteur modulo 32

Il s’agit de réaliser un compteur comptant de 0 a

31. Ce compteur s’incrémente sur front montant

d’horloge. Tant que la valeur du compteur Qt est inférieure a 31 il s’incrémente. Dés qu’il est égal a 31 il repart naturellement a 0 car sur 5 bits il ne peut compter que jusqu'à 31. (cf. ordinogramme ci-contre). Ce compteur renvoi aussi une impulsion d’une période d’horloge lorsqu’il a atteint sa valeur maximum. On l’appelle carry out.

A partir de la on décrit le compteur modulo 32 en

VHDL :

- 15 -

library IEEE; use IEEE.std_logic_1164.all; entity cpt32 is – on définit ici les entrées sorties port( H:in std_logic; Q:out integer range 0 to 31; Cout:out std_logic); end cpt32;

architecture cpt32_a of cpt32 is – ceci permet de décrir le fonctionnement du cpt. signal qt:integer range 0 to 31; begin

P1:process(H)

begin

if(H'event and H='1') then qt<=qt+1; end if; end process P1; Q<=qt; Cout<='1' when (qt=31)else'0'; -- cette partie génère la carry

out

end cpt32_a;

Etude du comparateur de deux mots de 5 bits.

On place a l’entrée deux mots binaires Q et REF codés sur 5 bits Q est la valeur du compteur et REF une des deux Ref MLI. Si Q est plus grand que REF alors la sortie S est égale a 0. Si Q est inférieur à REF alors la sortie S est à l’état haut. Voici le code VHDL de cette fonction :

library IEEE; use IEEE.std_logic_1164.all;

entity comp is port( Q,REF: in integer range 0 to 31; MLI1:out std_logic); end comp;

architecture comp_a of comp is begin MLI1 <='1' when (REF>=Q) else

'0';

end comp_a;

Maintenant les fonction compteurs et comparateurs réalisés, on réalise le logigramme de la figure 10. Enfin on définit le symbole MLI final (cf. figure 9) a l’aide de Max plus + II. Il ne reste plus qu’à simuler la fonction avant de la programmer et de tester directement sur le robot.

Simulation de la fonction MLI réalisée

Le logiciel Max plus + II simule tout sur des chronogrammes. C’est le moyen le plus simple de contrôler le bon fonctionnement d’une fonction avant son implantation dans le PLD (Programmable Logic Device).

- 16 -

Chronogrammes de simulation de la fonction MLI.

Lorsque le compteur est plus grand que Ref MLI1, MLI1A passe a 0
Lorsque le compteur est plus grand que Ref MLI1, MLI1A passe a 0
Lorsque le compteur est plus grand que Ref MLI1, MLI1A passe a 0

Lorsque le compteur est plus grand que Ref MLI1, MLI1A passe a 0

Lorsque le compteur est plus grand que Ref MLI2, MLI2A passe a son tour a
Lorsque le compteur est plus grand que Ref MLI2, MLI2A passe a son tour a
Lorsque le compteur est plus grand que Ref MLI2, MLI2A passe a son tour a

Lorsque le compteur est plus grand que Ref MLI2, MLI2A passe a son tour a 0. Ici Ref MLI2 est plus grand que Ref MLI1. D’où le rapport cyclique de MLI2A est plus grand que celui de MLI1A.

- 17 -

Lorsque le compteur arrive a sa valeur max il génère la carry out qui est
Lorsque le compteur arrive a sa valeur max il génère la carry out qui est
Lorsque le compteur arrive a sa valeur max il génère la carry out qui est

Lorsque le compteur arrive a sa valeur max il génère la carry out qui est aussi le signal synchro. Et au front suivant les deux signaux MLIXA sont remit a 1. C’est le début de la période suivante.

Les test & simulations sur maquette

Programmation de la fonction et tests sur maquette :

La fonction MLI répond bien au cahier des charges proposé. On peut alors programmer la fonction et la simuler avec la maquette. Pour programmer le bloc dans le PLD, il faut placer les entrées et les sorties du bloc sur les bonnes entrées/sorties du PLD. Pour réaliser ces connections on entre le logigramme suivant (cf. figure 11) :

Figure 11

on entre le logigramme suivant (cf. figure 11) : Figure 11 Sur ce logigramme, on voit

Sur ce logigramme, on voit que les Ref MLI2 et Ref MLI1 sont connectés aux capteurs 2 a 6. A gauche et à droite de l’écran, on peux voir que caque entrée ou sortie, possède un numéro de patte du PLD. Ce numéro correspond à un numéro de connexion sur le bus. Pour mesurer un signal, on mesure sur les connections du bus. Par exemple pour relever l’horloge, on mesure la ligne 25 du bus qui correspond à la patte 43 du PLD. Ici on utilise les connexions des 6 capteurs au bus et au PLD pour placer une carte d’interrupteurs. Cette carte permet de placer des 1 et des 0 sur toutes les lignes du bus. La manipulation consiste a débrancher les capteurs du bus et d’y placer a la place les interrupteurs. C’est avec ces interrupteurs qu’on simulera les Ref MLI. Ici lorsqu’on place une référence sur les interrupteurs de 20 a 24, les deux roues tournent a la même vitesse. Mais il peut avoir une petite différence entre la vitesse de la roue gauche et la vitesse de la roue droite Afin de tester la fonction MLI, on fais varier les références en entré et on vérifie que le signal de sortie est bien celui qu’on avait prévu. Pour cela on mesure son rapport cyclique et sa période.

Schéma du banc de test

Roue gauche
Roue gauche

Avant

Robot (vue de dessus)

Carte

interrupteurs

Roue gauche Avant Robot (vue de dessus) Carte interrupteurs Carte PLD Bus de connexion - 18
Roue gauche Avant Robot (vue de dessus) Carte interrupteurs Carte PLD Bus de connexion - 18
Roue gauche Avant Robot (vue de dessus) Carte interrupteurs Carte PLD Bus de connexion - 18

Carte PLD

Bus de connexion

de dessus) Carte interrupteurs Carte PLD Bus de connexion - 18 - Ce schéma présente le

- 18 -

Ce schéma présente le robot en vue de dessus. On enfonce les deux cartes

dans les slots jusqu'à entendre un

« clac ».

Figure 12 Sur cette figure 12, les cartes PLD (devant) et interrupteurs (derrière) sont branchés

Figure 12

Figure 12 Sur cette figure 12, les cartes PLD (devant) et interrupteurs (derrière) sont branchés sur

Sur cette figure 12, les cartes PLD (devant) et interrupteurs (derrière) sont branchés sur le bus de connexion. On relève les signaux sur la partie encadrée en blanc. Toutes les broches sont numérotées. Les numéros correspondent aux lignes du bus. On mesure les signaux avec la pince cerclée en noir.

Les tests : 01 :

Le premier test consiste à vérifier les deux signaux MLI. On

place une référence à l’entrée et on observe les MLI. Puis on fait varier la référence et on note la variation des MLI.

MLI1A correspond à la broche 15 du bus

MLI2A correspond à la broche 17 du bus

Synchro correspond à la broche 9 du bus

Ce test est réalisé sur calles. Sur le premier oscillogramme, on relève MLI1A avec synchro :

Oscillogramme 1 :

t1 MLI1A : Amplitude (sur Y) 5 v T Synchro : Amplitude (sur Y) 5
t1
MLI1A :
Amplitude
(sur Y) 5 v
T
Synchro :
Amplitude
(sur Y) 5 v

Ordonnée :

5v/div

Abscisse :

50µs/div

*Ces oscillogrammes sont des copies des mesures réelles*

Sur cet oscillogramme, on peut mesurer la période T = 310µs d’où la fréquence du signal est a peut près de 3,2 KHz. La fréquence de synchro est la même que celle de MLI1A. La période théorique est de environ 3 KHz. On a un écart relatif de 6% c’est un écart négligeable. Lors des mesures, il est possible d’avoir quelques imprécisions. T1 = 115µs. On en déduit le rapport cyclique = 0.31. Si on mesurait la valeur moyenne de la tension aux bornes des moteurs, on mesurerait 1/3 de Vbat c'est-à-dire à peu près 4 v. Sur le second oscillogramme, on mesure MLI2A avec synchro :

Oscillogramme 2 :

t1 MLI2A : Amplitude (sur Y) 5 v T Synchro : Amplitude (sur Y) 5
t1
MLI2A :
Amplitude
(sur Y) 5 v
T
Synchro :
Amplitude
(sur Y) 5 v

Ordonnée :

5v/div

Abscisse :

100µs/div

*Ces oscillogrammes sont des copies des mesures réelles*

- 19 -

Ici on peux relever T = 310µS. la fréquence de MLI2A est donc de 3.2 KHz. On obtient la même fréquence que MLI1A. Synchro est donc a la même fréquence que MLI2A. t1 = 180µs. Le rapport cyclique = 0.58 donc on peut en déduire la valeur de la tension aux bornes des moteurs qui est de environ 7 v.

Au cours de ce premier test, on a pu constater que le bloc MLI fournissait bien des signaux avec un rapport cyclique variable. Mais la période elle ne varie pas. Lorsqu’on augmente la ref MLI, on constate que le rapport cyclique augmente aussi. Si on diminue Ref MLI on observe le rapport cyclique diminuer.

Les test : 02 :

Le second test consiste à tracer la courbe de la vitesse en fonction des Ref MLI. Pour cela

il nous faut connaître la vitesse des moteurs. Sur la plate forme, il existe un capteur de vitesse représenté ci-contre. Il est constitué d’un disque

(schéma 1). Les parties noires sont pleines et les patries blanches sont creuse. Les creux sont placés à des espaces réguliers. Mais en réalité il y a plus de partie pleines et plus de parties creuses afin d’augmenter la précision de la mesure.Ce disque est directement fixé a l’axe de sortie du moteur. Un émetteur (schéma 2) envoi a travers le disque un rayon. Et l’émetteur reçoit ce rayon hachuré à cause du disque qui tourne. Et le récepteur envoi le signal logique sur le bus. Plus la fréquence du signal est

élevée, plus le disque tourne vite donc plus le robot avance vite. Le disque possède 30 parties creuses donc 30 pleines. Si il effectue 1 tour par seconde, le rayon est coupé 30 fois. La fréquence du signal de sortie est donc de 30 Hz. Si le disque tourne a 2640tr/min (vitesse nominale des moteurs) alors la fréquence est de 1320 Hz. On relève ce signal sur les broches 11 (vitesse du moteur 1) et 13 (vitesse du moteur 2) du bus. Le schéma du banc de test est le même que celui du test 01. On fait donc varier a l’aide des interrupteurs les Ref MLI et on relève la fréquence du signal des capteurs de vitesse. Ce test est réalisé sur calles. Voici un oscillogramme montrant les deux signaux des vitesses des deux moteurs :

Schéma 1 Schéma 2 Disque vu de coté Emetteur Récepteur Rayon invisible
Schéma 1
Schéma 2
Disque vu
de coté
Emetteur
Récepteur
Rayon invisible

Oscillogramme 3

Signal du capteur vitesse 1 T Signal du capteur vitesse 2
Signal du
capteur
vitesse 1
T
Signal du
capteur
vitesse 2

Ordonnée :

5v/div

Abscisse :

100µs/div

*Ces oscillogrammes sont des copies des mesures réelles*

Pour mesurer la fréquence de ces signaux, on relève leur période. Et ensuite on calcule la fréquence selon la loi :

f = 1

T

Avec

T

la

période

et

f

la

fréquence

- 20 -

Tableau de mesures

Références

Vitesses (tr/min)

Binaire

Décimal

Moteur 1

Moteur 2

00000

00

0.00

0.00

00101

05

4.76

5.55

00110

06

8.33

9.26

00111

07

10.41

11.49

01000

08

13.89

14.49

01100

12

21.95

22.83

10000

16

30.30

32.05

10100

20

37.03

38.76

11000

24

45

47.6

11100

28

53.7

53.7

11111

31

59.6

59.6

Et voici la courbe de la vitesse en fonction des références :

moteur 1 moteur 2 70 60 50 40 30 20 10 0 0 5 6
moteur 1
moteur 2
70
60
50
40
30
20
10
0
0
5
6
7
8
12
16
20
24
28
31
références (dec

vitesse (tr/min)

On obtient ici deux droites. Et on remarque que la vitesse du moteur 1 est généralement légèrement plus faible que celle du moteur droit. Les deux moteurs n’ont pas exactement les mêmes caractéristiques. De plus il y a des frottements dans le réducteur et sur les axes moteurs. Selon la précision des pièces ces frottements ne sont pas forcément égaux. Donc la différence de vitesses entre les deux moteurs peut venir de la. Grâce à cette courbe, on peut régler la vitesse du robot en agissant sur les références. L’objectif du test suivant sera de faire tourner le robot avec des rayons de courbures différentes

Le test : 03 :

L’objet de ce test est de faire tourner le robot avec des rayons de courbures différents. Ce test est fait sur un tapis. Il faut alors choisir deux références différentes. Ici pour que le robot aille toujours a la vitesse maximum, on laisse une référence au max (celle du moteur gauche le 2) et on agit sur l’autre toujours au moyen des interrupteurs. Ici le robot va tourner a droite. La

- 21 -

référence du moteur droit sera toujours inférieur a celle du moteur gauche. Si les deux références sont les mêmes le robot va tout droit. Ici le but sera d’entrer des références Ref MLI1 afin que le robot tourne a droit avec un rayon de courbure de 25 cm puis 35 cm et enfin 50 cm. Mais avant on peut se proposer de calculer les références à entrer en fonction du rayon de courbure. Sur la figure ci-contre, on peut voir le parcours du robot dans un virage. La roue gauche parcours plus de distance que celle de droite. R est le rayon de courbure, est la distance parcourue par le centre de gravité du robot.

On peut déduire de ce schéma la relation suivante :

(R+d/2) = vitesse 2

(R-d/2)

vitesse 1

On connaît d, , R et la vitesse 2. On peut calculer la vitesse 1 en fonction de R. Puis on se reporte au tableau figure 13 Pour mesurer la référence qu’il faut entrer pour avoir un rayon de courbure X, on ajuste la référence jusqu'à ce que le robot tourne avec le bon rayon. Et on rassemble toutes ces valeurs dans un tableau :

(R+d/2) (R-d/2) Roue 2 R O Roue 1 d Robot
(R+d/2)
(R-d/2)
Roue 2
R
O
Roue 1
d
Robot

Tableau de mesures :

Rayon de courbure (cm)

Ref MLI1

Ecart Relatif

Calculé

Mesuré

25

13

17

23%

35

16

19

15%

50

20

23

13%

On remarque que les valeurs calculées ne correspondent pas du tout avec les valeurs mesurées. Les valeurs mesurées sont toutes plus grandes que celles calculés. Ceci est dû aux frottements roues/sols. Ils font ralentir le robot. Il faut donc augmenter les références. La courbe figure 13 ne prenait pas en compte ces frottements. Le test avait été fait sur calles.

La conclusion

Le bloc MLI génère les signaux envoyés au hacher en fonction des références MLI. Grâce à tous ces tests, on peut calculer les références à entrer pour faire évoluer le robot sur la piste. Maintenant que ce bloc est réalisé testé et opérationnel, on peut étudier le bloc amont qui va créer les références envoyées a la fonction MLI. C’est le rôle de la fonction Guidage développée dans le chapitre 4 « le bloc de guidage »

- 22 -

Chapitre

(

Cette fonction est le cœur de l’intelligence du robot à suivre la ligne collée au sol. Le but principal de cette fonction est que le robot suive la ligne au mieux possible et le plus rapidement.

Ce bloc reçoit directement les informations des capteurs. Il doit donc interpréter ces informations et envoyer les Ref MLI au bloc MLI. Sur la figure 13 on peut voir ce bloc dans l’architecture de la programmation :

Partie guidage

Capteurs de ligne Info catpeurs
Capteurs
de ligne
Info
catpeurs

Bloc de

Guidage

Bloc de

gestion de

parcours

MLI

Puissance

Moteurs
Moteurs
de gestion de parcours MLI Puissance Moteurs Ref MLI1 Ref MLI2 Capteurs de priorité a droite

Ref MLI1

Ref MLI2

parcours MLI Puissance Moteurs Ref MLI1 Ref MLI2 Capteurs de priorité a droite et capteur de

Capteurs de

priorité a

droite et

capteur de

fin de

course

Mais avant de faire l’étude de cette fonction, il faut connaître la nature des signaux envoyés par les capteurs de ligne. Il faut donc procéder par l’étude des capteurs.

Le système de détection de la position de la ligne par rapport au robot est constitué de six capteurs de lignes optiques placés à l’avant sous le châssis. Sur la photo ci contre, on peut observer un de ces six capteurs, Ici la tête du capteur est en haut. En réalité il est positionné tête en bas pour capteur la ligne au sol. C’est un capteur OPTOCOUPLEUR, c'est-à-dire de type optique. Sa référence est : OBP704 On a choisit ce capteur car il est performant, simple d’utilisation et petit.

Sa référence est : OBP704 On a choisit ce capteur car il est performant, simple d’utilisation

- 23 -

Figure 14

Les six capteurs encadrés en blanc sont alignés à l’avant du robot sous le châssis

4 6 5 2 3 1
4
6
5
2
3
1

Coté droit

Coté gauche

La figure 14 présentes une photo du robot prise en dessous. Les six capteurs sont fixés sous le châssis. Ils sont fixés affin d’être a peut près a un centimètre du sol. Si ils sont trop hauts au dessus de la ligne, la ligne ne peut être capté.

Principe de fonctionnement

Ce capteur utilise principalement l’optique. Une diode électroluminescente émet un rayon invisible. Ce rayon est reflété sur le sol qui peut être la ligne (cas sur le schéma ci contre). Le signal reflété a une intensité lumineuse qui varie en fonction du matériau que constitue le sol. Par

exemple, sur un carrelage lisse, l’intensité lumineuse sera plus importante que sur de la moquette. Ce signal lumineux est capté par le phototransistor placé au récepteur du capteur. La tension aux bornes du récepteur varie en fonction de l’intensité du signal réfléchit.

varie en fonction de l’intensité du signal réfléchit. Ligne blanche Emetteur Récepteur (LED) (Photo
varie en fonction de l’intensité du signal réfléchit. Ligne blanche Emetteur Récepteur (LED) (Photo
varie en fonction de l’intensité du signal réfléchit. Ligne blanche Emetteur Récepteur (LED) (Photo
varie en fonction de l’intensité du signal réfléchit. Ligne blanche Emetteur Récepteur (LED) (Photo
varie en fonction de l’intensité du signal réfléchit. Ligne blanche Emetteur Récepteur (LED) (Photo
varie en fonction de l’intensité du signal réfléchit. Ligne blanche Emetteur Récepteur (LED) (Photo
Ligne blanche Emetteur Récepteur (LED) (Photo transistor)
Ligne blanche
Emetteur
Récepteur
(LED)
(Photo transistor)

L’émetteur :

L’émetteur est constitué d’une DEL qui émet en permanence un rayon invisible. L’émetteur est alimenté directement à la batterie. Il est donc nécessaire de brancher une résistance en

If
If

série avec la diode pour ne pas la détériorer. La tension aux bornes de la DEL lorsqu’elle est passante (c’est toujours le cas ici) est de 2.0v. La chute de tension dans la résistance est donc de 10 volts. C'est-à-dire la tension batterie moins la tension de la DEL. Le courrant IF traversant la DEL ne doit pas dépasser 40 mA. La résistance doit être supérieur à 250 . Mais au total il y a 6 capteurs donc 6

Vbat

Régulateur de tension 8 volts

Vbat

Vs

émetteurs donc 6 DEL. On pourrait les brancher en série sur la batterie. La somme des tensions des DEL est égale à 12 volts. Mais la tension de la batterie peut varier légèrement quand elle se décharge. Ce qui peut perturber le fonctionnement des DEL si elles sont en série sur la batterie. Pour éviter les variations de Vbat, on interpose un stabilisateur de tension. Il génère une tension de 8 volt continu

- 24 -

2.0

à partir d’une tension plus grande (ici Vbat). Sur la figure 15, on peut voir le schéma de branchement des 6 émetteurs.

Figure 15

If = 40 mA Régulateur de tension 8 volts 20 mA 20 mA Vbat 8
If = 40 mA
Régulateur
de tension 8
volts
20 mA
20 mA
Vbat
8 v
R
R
P

Trois diodes en série ont une tension de 6 v. Il faut donc ajouter une résistance par branche pour ne

pas détériorer les diodes. Ces résistances limitent aussi le courrant a 20 mA par branche. C'est-à-dire 40 mA pour les deux branches. On ajoute un potentiomètre entre la masse et les deux branches pour ajuster les courants dans les branches.

Le récepteur :

Le récepteur est constitué d’un phototransistor qui capte le rayon réfléchit et qui génère une

tension. Cette tension varie en fonction de l’intensité du signal capté. Le récepteur doit aussi être alimenté. Le récepteur génère une tension qui varie. Mais il nous faut en sortie du capteur un

signal logique (égale à 0 ou 5 volts). On ajoute derrière le récepteur un comparateur qui a un certain seuil fait commuter la sortie. De préférence on utilisera un comparateur a hystérésis pour éviter de commuter en permanence si la tension d’entrée est pile sur le seuil de commutation.

Vbat

Schéma 1 P ic ie = 0 Comparateur Rayon a hystérésis réfléchit inverseur Vin Vout
Schéma 1
P
ic
ie = 0
Comparateur
Rayon
a hystérésis
réfléchit
inverseur
Vin
Vout
Mise en forme
Le
schéma
1
représente
le
Vout Schéma 2 Vt - Vt+ Vin
Vout
Schéma 2
Vt -
Vt+
Vin

Seuils de

basculement

montage du récepteur avec la partie de mise en forme. La partie de mise en forme permet de passer du signal analogique Vin au signal logique Vout.

Le potentiomètre P permet de polariser le phototransistor. Si on ne pet pas ce potentiomètre la tension a ses bornes est fixée a Vbat. Le schéma 2 présente un cycle d’hystérésis du comparateur. Lorsque ic est petit (capteur au dessus de la moquette) alors Vin > Vt+ donc Vout est a 0. Et lorsque ic est petit (capteur au dessus de la ligne blanche) alors Vin < Vt- donc Vout est a l’état haut. Et lorsque Vin est entre les deux seuils Vout ne bouge pas. Ce capteur a juste besoin d’être alimenté pour fonctionner. Le signal en sortie est généré en permanence une fois alimentée. On récupère donc 6 signaux logiques. Lorsqu’un capteur détecte la ligne il est a l’état haut. Et lorsqu’il n’est plus au dessus de la ligne il est a l’état bas.

- 25 -

#

L’étude sera faite de la façon suivante : On commence par dessiner le symbole de la fonction puis par regarder ses entrées et sorties. Ensuite on dessine les chronogrammes ou tableaux récapitulant le fonctionnement du bloc. Et enfin on peut faire la description en VHDL de la fonction. Pour cela il faut écrire les algorithmes de la fonction, On peut les représenter sous forme de machine a état ou d’ordinogramme suivant le type de programmation.

L’étude

La figure 16 représente la fonction de guidage avec ses ressources d’entrée et ses ressources de sortie :

Ressources d’entrée :

C[1

6]

: Bus de 6 bits portant l’information des capteurs.

Synchro : Entrée d’horloge de la fonction Signal a 3 KHz.

Ressources de sortie :

Ref MLI1[4

0]

: Bus de 5 bits portant l’information de la vitesse du moteur 1

Ref MLI2[4

0]:

Bus de 5 bits portant l’information de la vitesse du moteur 2

Figure 16 Bloc de Guidage 5 6 Ref MLI1[4 0] C[1 6] 5 Ref MLI2[4
Figure 16
Bloc de Guidage
5
6
Ref MLI1[4
0]
C[1
6]
5
Ref MLI2[4
0]
synchro

Symbole de la fonction :

Voici le symbole de la fonction à réaliser (cf

figure 16).

Quelques infos :

C6 C1
C6
C1

Ligne vue par C3 et C4 en même temps

Ligne vue que par un capteur

Ligne entre deux capteurs

Robot en travers Robot sur un carrefour C6 C6 C1
Robot en travers
Robot sur un carrefour
C6
C6
C1

- 26 -

Ligne vue que par un capteur Ligne entre deux capteurs Robot en travers Robot sur un

C1

L’objet de cette étude est de rechercher une stratégie de détection de la ligne la plus simple et la plus efficace possible. Voici quelques informations utiles à la recherche :

Les capteurs C6, C5, C2 et C1 ne peuvent pas voir la ligne en même temps sauf si le robot est en travers sur la ligne ou si le robot est sur un carrefour. Les capteurs C3 et C4 eux peuvent voir la ligne en même temps.

Solutions a étudié :

Il y a beaucoup de solution pour programmer ce bloc. On peut se contenter d’écrire un programme qui génère les Ref MLI en fonction des états des capteurs. Comme il est présenté dans le tableau ci-dessous. C’est un système purement combinatoire. On ne tien pas compte du temps dans cette programmation. C'est-à-dire que si on a un tel état des capteurs les Ref MLI prendront une valeur et pas une autre.

 

Etat des Capteurs

 

gauche

Droite

C6

C5

C4

C3

C2

C1

Moteur 2

Moteur 1

0

0

1

1

0

0

A fond !

0

0

0

0

0

0

mémorisation

1

0

0

0

0

0

+

++++

0

1

0

0

0

0

++

++++

0

0

1

0

0

0

+++

++++

0

0

0

1

0

0

++++

+++

0

0

0

0

1

0

++++

++

0

0

0

0

0

1

++++

+

Ce tableau décrit le fonctionnement de la fonction. C’est un fonctionnement simple. Ce fonctionnement détermine les vitesses des moteurs uniquement en fonction de l’état des capteurs. Par exemple lorsque les capteurs C3 et C4 sont a l’état haut ici le robot avance a la vitesse max et tout droit. Lorsque un des capteurs de gauche sont actifs alors le robot tourne a gauche. Et lorsque un des capteurs de droit sont actifs, alors le robot tourne a droit. Cette étude ci est simple à réaliser mais les performances à suivre la ligne sont médiocres. Apres un test sur piste, on c’est rendu compte que le robot oscillait de plus en plus fort autour de la ligne et qu’il finissait par la perdre. On a donc décidé d’étudier un autre principe de fonctionnement. Il est aussi possible de tenir compte du temps dans la programmation. C'est-à-dire ici de l’état précédent des capteurs dans le temps. Par exemple si on passe de l’état « aller a gauche » a « tout droit » on ne fera pas la même chose que sin on passait de « tout droit » a « aller a gauche ». A partir du moment ou on tien compte du temps, le nombre de possibilité de programmation augmente considérablement. Et ainsi on augmente aussi la performance à suivre la ligne. Dans ce projet on va choisir cette deuxième méthode.

Recherches de programmation :

Afin de rechercher la programmation « idéale » on a fait des tests avec une programmation purement combinatoire (cf. tableau). Et on a observé le mouvement du robot sur piste ovale :

- 27 -

Figure 17

Sur la figure 17 on peut voir le parcours du robot avec une programmation combinatoire. Dans la phase 1, in part tout droit tout se passe bien. Puis dans la phase 2, il prend le virage légèrement sur l’extérieur. On ne peut pas anticiper les virages. Il faudrait voir le virage avant d’arriver dessus. Ceci n’est pas possible avec ce robot. En fin de virage, le robot arrive légèrement décalé à gauche de la ligne. On arrive a la phase 3. Le capteur C2 étant à l’état haut, le robot va continuer à tourner a droite. Mais ensuite il se retrouve trop à droite de la ligne. Donc il va tourner a droite comme indiqué dans la phase 3. Il va donc osciller autour de la ligne sans s’arrêter. L’objectif de cette étude est de limiter ce phénomène. Il fau arriver a ceci :

Figure 18

de limiter ce phénomène. Il fau arriver a ceci : Figure 18 Phase 1 C6 C1

Phase 1

C6 C1
C6
C1

Phase 2

Il fau arriver a ceci : Figure 18 Phase 1 C6 C1 Phase 2 Phase 3
Phase 3
Phase 3

la figure 18, le robot

parcours la phase 1 et 2 comme précédemment, mais dans la phase trois il anticipe et tourne a gauche pour se remettre sur la ligne droite. Et ainsi il peut repartir a fond sans osciller. (Théorie)

Sur

ainsi il peut repartir a fond sans osciller. (Théorie) Sur Phase 2 Phase 3 Phase 1

Phase 2

peut repartir a fond sans osciller. (Théorie) Sur Phase 2 Phase 3 Phase 1 Modélisation sous
peut repartir a fond sans osciller. (Théorie) Sur Phase 2 Phase 3 Phase 1 Modélisation sous
peut repartir a fond sans osciller. (Théorie) Sur Phase 2 Phase 3 Phase 1 Modélisation sous

Phase 3

Phase 1

Modélisation sous forme de machine a état :

La machine a état permet de décrire un programme séquentiel sous forme de schéma. On peut voir l’évolution du système dans le temps (cf figure 19).

- 28 -

Machine a état

Figure 19 001000 001100 Droite Tout droit Gauche 000100 Droite Gauche 001100 moyen léger 001100
Figure 19
001000
001100 Droite
Tout droit
Gauche
000100
Droite
Gauche
001100
moyen
léger
001100 001100
010000
001100 001100
000010
100000
000001
Anticiper
Anticiper
Gauche
ligne a
Un capteur a
droit
ligne a
000100
droite
Droite
moyen et
001000 gauche
moyen et
serré
serré
Un capteur a
gauche

La figure 19 ci-dessus représente machine a état du le fonctionnement complet de la fonction guidage. Le passage d’un état a un autre se fait sur un coup d’horloge de synchro. En quelque sorte Synchro autorise la fonction a générer des références MLI. Il faut générer des références a chaque fois que les signaux MLS on fait une période. C'est-à-dire a chaque impulsion de Synchro.

A chaque état correspondent des Ref MLI différentes. Ici il y a 9 Ref MLI1 et 9 Ref MLI 2

différents. « Gauche moyen et serré » rassemble deux états et droit « moyen et serré » aussi.

Le passage de « gauche moyen » a gauche serré et inversement se fait comme dans de la logique combinatoire sans tenir compte de l’état précédant.

Fonctionnement de l’anticipation de la ligne droite :

On est dans tout droit tout se passe normalement. Ensuite il y a un virage a droite. Alors on passe dans les états « droit léger » puis dans « droit moyen » et « droit serré » Pendant tout le virage on va commuter entre « droite serré » et « droite moyen » pour bien prendre le virage. Et en sortie de virage on passe de « droite serré » a « droite moyen » puis a « anticiper ligne a droite » Dans cet état les références des roues sont inversés. La roue gauche tourne plus vite que la droite. Et le robot anticipe sa ligne droite en effectuant un petit virage a gauche affin de se retrouver aligné.

Description en VHDL

A partir de cette machine a état, on peut écrire la description en VHDL de la fonction :

Il est ici nécessaire de déclarer l’entité de la fonction. Ce qui correspond a son symbole.

architecture leguidage1 of leguidage is

type typeetat is(tdroit,gaucheL,gaucheS,droitL,droitS,droitM,gaucheM,corD,corG); signal etatcourant : typeetat; begin

- 29 -

p1:process(H)

begin

if(H'event and H='1')then case etatcourant is when corD => REF1<=20; REF2<=18; if(C="001100") then etatcourant <= tdroit; elsif(C="000010") then etatcourant <= droitM; elsif(C="001000") then etatcourant <= gaucheL; elsif(C="000001") then etatcourant <= droitS; end if; when tdroit => REF1<=25;REF2<=25; if(C="010000") then etatcourant <= gaucheM; elsif(C="100000") then etatcourant <= gaucheS; elsif(C="000001") then etatcourant <= droitS; elsif(C="000010") then etatcourant <= droitM; elsif(C="001000") then etatcourant <= gaucheL; elsif(C="000100") then etatcourant <= droitL; end if; when droitM => REF1<=17;REF2<=25; if(C="000001") then etatcourant <= droitS; elsif(C="001100") then etatcourant <= tdroit; elsif(C="001000") then etatcourant <= gaucheL; elsif(C="000100") then etatcourant <= corD; end if; when droitL => REF1<=19;REF2<=25; if(C="000001") then etatcourant <= droitS; elsif(C="001100") then etatcourant <= tdroit; elsif(C="001000") then etatcourant <= gaucheL; elsif(C="000010") then etatcourant <= droitM; end if; when gaucheS => REF1<=25;REF2<=15; if(C="010000") then etatcourant <= gaucheM; elsif(C="001100") then etatcourant <= tdroit; elsif(C="001000") then etatcourant <= corG; elsif(C="000100") then etatcourant <= droitL; end if;

On fait de même pour les capteurs de droite

end case; end if; end process; end leguidage1;

La simulation :

On simule la fonction avant d’effectuer sa programmation dans le composant logique programmable. La figure 20 ci-dessous montre les chronogrammes de test de la fonction guidage.

- 30 -

Figure 2O

Chronogrammes de simulation de Guidage :

Figure 2O Chronogrammes de simulation de Guidage :     Etat « tout   Etat «
 
 
 

Etat

« tout

 

Etat « gauche léger » Le robot tourne légèrement a gauche Ref MLI2 < Ref MLI1

 

Etat « gauche moyen » le robot tourne plus Ref MLI2 diminue encore

 

Sortie de virage le robot passe dans l’état « anticipation » les références s’inversent Ref MLI1<Ref MLI2, le robot effectue une correction a droite

 

Etat « tout droit » une fois réaligné a la ligne le robot va tout droit

droit » le robot va tout droit

les deux Ref

MLI

sont

égales

   

Les tests & simulations sur maquette

Une foie la théorie et les simulations terminées, il faut tester la fonction sur le système réel en commençant par une série de mesures sur calles puis en simulant ensuite sur une piste. Il y a en tout trois tests a réalisés : Un test sur calles ou on fait varier les infos capteurs en remplaçant les capteurs par les interrupteurs (comme pour la fonction MLI). Puis second test sur calles où cette fois ci on simule la fonction avec les capteurs. Et enfin le dernier test : là on place le robot sur une piste ovale et relève sa réaction sur piste. Mais avant de tester la fonction il est nécessaire de l’implanter dans le PLD. Pour ceci on implante le logigramme figure 21 Le schéma du banc de test est le même que pour celui du test du bloc MLI. Dans les tests 02 et 03 on prendra soin d’enlever la carte interrupteurs.

Figure 21

Logigramme implanté dans le PLD :

interrupteurs. Figure 21 Logigramme implanté dans le PLD : Sur ce logigramme, le bloc MLI génère

Sur ce logigramme, le bloc MLI génère à partir des Ref MLI créées dans le bloc guidage les signaux de commande des moteurs. Il est obligatoire de mettre le bloc MLI si on veut faire les tests avec les moteurs. Une fois le PLD programmé on peut procéder aux mesures.

Les test : 01 :

- 31 -

Le premier test consiste a vérifier que les Ref MLI générés en sortie du bloc de gestion sont bien celles qu’on avait définit dans le bloc de guidage pour une configuration de capteurs donnée. Pour faire ceci, on entre sur les capteurs de 19 a 24 (capteurs 1 a 6) les configurations des capteurs (un capteur a l’état haut correspond au un interrupteur a l’état haut). On relève les signaux Ref MLI1 et Ref MLI2 sur les broches 15 et 17 du bus de connexion. On entre une configuration de capteurs sur les interrupteurs qui est C4 à l’état haut et les autres à l’état pas.

Oscillogramme 1 :

Ici en utilisant la courbe de la référence en fonction de la vitesse et en calculant le rapport cyclique de ses signaux, on en déduit la référence générée par la fonction guidage. La référence appliquée au bloc MLI pour le signal MLIIA est en décimal 26. Et celle appliquée pour le signal MLI2A est 20. Ici le robot tourne a gauche le moteur 1 est plus rapide que le 2. Ceci correspond bien à la bonne configuration des capteurs.

Mais on s’aperçoit ici que ce n’est pas les références écrites dans le fichier VHDL. C’est normal ce test a été réalisé avec une autre fonction de guidage fonctionnant avec le même principe. Ces références correspondent exactement à ce fichier.

MLI1A : Amplitude (sur Y) 5 v MLI21 : Amplitude (sur Y) 5 v
MLI1A :
Amplitude
(sur Y) 5 v
MLI21 :
Amplitude
(sur Y) 5 v

*Ces oscillogrammes sont des copies des mesures réelles*

Ordonnée :

5v/div

Abscisse :

100µs/div

Les tests : 02 :

Le but du test 02 est le même que celui du test 01 sauf qu’on utilise pas les interrupteurs. Ici on place un morceau de ligne blanche sous les capteurs de façon à ne pas être dans les configurations Robot en travers ou Robot sur un carrefour. On regarde l’évolution des vitesses des deux roues Puis pour une configuration on relève MLI1A et MLI2A comme précédemment et on déduit les Ref MLI appliqués. La configuration des capteurs pour les relevés de mesures est : capteur C2 a 1 et tout les autres a l’état bas.

Oscillogramme 2 :

MLI1A : Amplitude (sur Y) 5 v MLI2A : Amplitude (sur Y) 5 v
MLI1A :
Amplitude
(sur Y) 5 v
MLI2A :
Amplitude
(sur Y) 5 v

Ordonnée :

5v/div

Abscisse :

100µs/div

*Ces oscillogrammes sont des copies des mesures réelles*

Ici on déduit par les mesures la Ref MLI1A égale a 16 en décimal. Et Ref MLI2A égale a 25. Le robot effectue cette fois ci un virage a droite moyen. Ce qui correspond bien a la configuration de capteurs. De même ces références ne correspondent pas avec le fichier VHDL (cf ci-dessus) car la simulation a été faite avec un autre fichier.

Les tests : 03 :

Celui-ci consiste à tester les performances de la fonction guidage à suivre la ligne sur circuit réel. Il permettra de tester le système d’anticipation embarqué dans la fonction guidage. Ce test permettra aussi d’ajuster les références a appliqués dans les différents états de Guidage. On observe comment se comporte le robot dans les courbes et selon si il tourne trop ou pas on augmente ou baisse la vitesse de la roue qui est a l’intérieur du virage. Sur la figure 22, on peut voir la photo de la piste qui nous a permit de réaliser ce troisième test. Ici le robot est positionné en début de ligne droite et aligné. Ensuite on place allume la partie puissance et la partie commander. Et on démarre en retirant le jack de démarrage. C’est un petit embout enfoncé dans un slot sur le

- 32 -

coté du robot qui désactive les moteurs lorsqu’il est dans le slot. Dés qu’on le retire les moteurs démarrent.

Figure 22

Une fois lancé, le robot suit correctement la ligne blanche jusqu’au virage. En début de virage, il sort s’écarte légèrement vers l’extérieure du circuit. Puis il revient sur la ligne et prend bien le virage. En fin de virage, il oscille deux fois le temps que le système d’anticipation en fin de virage fasse son effet. Puis une fois alignée à la ligne il la suit durant toute la ligne droite de retour. Puis il prend le second virage, oscille encore deux fois avant de se réaligné et repart… On remarque que le système d’anticipation permet d’amortir les oscillations que fait le robot autour de la ligne.

les oscillations que fait le robot autour de la ligne. Conclusion Cette fonction guidage assure le

Conclusion

Cette fonction guidage assure le suivit de la ligne blanche. Elle n’est activée que en demande du bloc de gestion de parcours qui gère tout les blocs. Chaque groupe est libre de programmer sa stratégie de guidage. Ici on a choisit d’éviter d’osciller autour de la ligne afin de gagner du temps sur les robots qui prennent beaucoup de vitesse mais qui sortent dans les virages ou qui se mettent a osciller infiniment. La suite du projet consiste à mettre en place la détection de priorité a droite et le bloc de gestion qui intègre la détection de fin de parcours.

- 33 -

Chapitre

)

#

Selon le règlement de l’épreuve, en cas de risque de collision entre deux robots, la règle est celle de la priorité a droite. En cas de collision entre deux robots, les deux robots recommencent le parcours. Le robot n’ayant pas respecté la priorité à droite devra redémarrer avec un retard supplémentaire de 10 secondes sur le top. L’arrêt final du robot doit être automatique : un arrêt non automatique donne un temps de pénalité de 10 secondes. La chute de la deuxième barre lors de l’arrêt final entraîne elle aussi 10 secondes de pénalité. Afin de ne pas cumuler de pénalités nous avons donc installé deux types de capteurs sur le robot qui nous permettrons de pallier à ces problèmes. Les deux capteurs en question sont un capteur ultrasonore et un contacteur.

*

Le module de télémétrie à ultrasons sera utilisé pour couper les moteurs du robot si il détecte un obstacle a moins de 30 centimètres. Le télémètre utilisé sera le télémètre SRF04

Le télémètre utilisé sera le télémètre SRF04 Caractéristiques techniques : Alimentation : 5V

Caractéristiques techniques :

Alimentation : 5V

Consommation : 30 mA typiques, 50 mA maximum

Fréquence des ultrasons : 40 kHz

Sensibilité : détecte un objet de 3cm de diamètre à plus de 2 mètres de distance

Taille : 43 mm x 20 mm x 17 mm

Le principe employé est celui de la propagation d’une onde sonore dans l’air lors de la réflexion sur un objet sur un objet. Le module émet un train d’onde à une fréquence de 40kHz (Ultrasons) et mesure le temps mis par cette onde pour aller et revenir au module lorsque celle- ci est réfléchie sur un obstacle.

le temps mis par cette onde pour aller et revenir au module lorsque celle- ci est

- 34 -

Le module émet un train d’onde à une fréquence de 40kHz (Ultrasons) et mesure le

Le module émet un train d’onde à une fréquence de 40kHz (Ultrasons) et mesure le temps mis par cette onde pour aller et revenir au module lorsque celle-ci est réfléchie sur un obstacle. La demande de mesure de distance est initiée par l’envoie d’une impulsion (Trigger Input) de largeur minimale 10us (10 périodes d’horloge de notre horloge de base). Il faut prévoir un temps de repos de 36 ms minimum avant de re-déclancher une nouvelle mesure ceci afin d’éviter que des échos parasites non encore parvenus au module ne perturbent la mesure suivante. Un signal Trig sera donc généré toute les 50 ms (36 ms (temps de repos) +10ms (largeur de l’impulsion Trigger Input)=46ms, on arrondira à 50 ms). Cela nous donne une impulsion de 17.4 ms pour une distance de 3m et donc 1.74 m pour les 3 cm qui nous intéressent

de 3m et donc 1.74 m pour les 3 cm qui nous intéressent En retour, le

En retour, le module génère une impulsion sur la sortie Echo Pulse dont la largeur est directement proportionnelle à la distance mesurée : Distance en (cm)=largeur Echo pulse (en

us)/58.

- 35 -

Afin de vérifier cette affirmation, nous avons programmé la carte PLD afin de relever la caractéristique Techo en fonction de la distance .Nous avons obtenu la courbe ci-après :

Mesure de Techo en fonction de la distance

5 4,5 4 3,5 3 2,5 2 1,5 1 0,5 0 0 10 20 30
5
4,5
4
3,5
3
2,5
2
1,5
1
0,5
0
0
10
20
30
40
50
60
70
80
90
Techo(ms)

Distance(cm)

Le programme « capteur ultrasons » doit émettre un signal « danger » provoqué par la détection du robot adverse à plus ou moins 30 à 50 centimètres de celui-ci. Pour programmer ceci, il nous faut le temps écoulé entre le front montant de « trigger » et un front descendant de « Techo », ce que l’on peut obtenir à partir du graphique ci-dessus. Pour une distance « d » égale à 30 centimètres on à un « Techo » égal à 1.6ms. Nous avons utilisé le signal « Synchro » comme horloge, mais cette horloge a une fréquence de 3 kHz donc une période de à peu près 320 us et divise ainsi par 32 la période de H. Pour H on devait compter 5000 coups afin d’avoir 50ms (durée au bout de laquelle un signal « Trig » est généré si rien n’est détecté). Pour « Synchro » on devra compter 5000/32 soit 156 coups afin d’avoir 50 ms. Il nous faudra donc un compteur sur 8 bits pour compter « Synchro ». Pour 50 ms on a 156 coups d’horloge (« Synchro ») donc pour 1.6 ms on aura 5 coups d’horloge.

On peut donc maintenant écrire l’Algorithme de fonctionnement du capteur ultrasons :

Si front montant de Synchro alors Si qt =156 alors qt prend la valeur 0 Si on a un front descendant de écho alors On déclenche un autre compteur Q qui prend la valeur de qt

FinSi

FinSi

FinSi Trigger prend la valeur 1 quand qt =0 sinon Trigger =0 Danger prend la valeur 1 quand Q <5 sinon Danger=0

Programmation en VHDL de capteur ultrasons :

- 36 -

library IEEE; use IEEE.std_logic_1164.all;

entity us is port( H,sync,echo:in std_logic; trig,danger:out std_logic); end us;

architecture us_a of us is signal echomem:std_logic; signal qt:integer range 0 to 255; begin

P1:process(H)

begin

if(H'event and H='1')then echomem<=echo; if(sync='1')then qt<=qt+1; end if; if(qt=156)then trig<='1';qt<=0;danger<='0'; else trig<='0'; end if; if (echo ='0' and echomem='1')then if(qt<=5)then danger <='1'; else danger<='0'; end if; end if; end if; end process p1; end us_a;

Voici la simulation de détecteur ultrasons :

p1; end us_a; Voici la simulation de détecteur ultrasons : Commentaires : On observe sur cette

Commentaires :

On observe sur cette simulation que lorsqu’un signal Techo est détecté, le compteur qt se met à compter et la sortie danger est au niveau logique haut.

+* , #

L’arrêt final du robot doit être automatique : un arrêt non automatique donne un temps de pénalité de 10 secondes. La chute de la deuxième barre lors de l’arrêt final entraîne elle aussi 10 secondes de pénalité. L’arrêt doit être définitif le robot ne devra plus redémarrer après.

- 37 -

Pour répondre à cela, le robot a été munit d’un capteur de contact formé de deux lamelles métalliques émettant un signal lors d’un contact entre elles deux. On peut écrire l’Algorithme de fonctionnement du capteur détection d’obstacles :

Si contact = 0 alors signal prend la valeur 1 Si signal = 1 alors ref_mli1a et ref_ mli2a =0 Il suffit ensuite de traduire ça en vhdl et de le rajouter cela dans la partie gestion parcours (expliquée ci-après).

Programmation en VHDL de détection d’obstacle :

library IEEE; use IEEE.std_logic_1164.all; entity gestionpa is port( capteurs : in std_logic_vector(6 downto 1); DO, H,Danger,MLI1AE,MLI2AE : in std_logic; MLI1A,MLI2A : out std_logic); end gestionpa;

architecture gestionpa1 of gestionpa is type desetats is(dem,suiv,prio,arret); signal etatcourant : desetats; begin p:process(H) begin if(H' event and H='1') then case etatcourant is when dem => if(capteurs/="000000")then etatcourant<=suiv;

end if; when suiv => if(danger='1') then etatcourant <= prio; elsif(DO='0') then etatcourant <=

arret;

end if; when prio => if(danger='0') then etatcourant<=suiv; end if; when arret=> etatcourant <= arret; end case; end if; end process;

with etatcourant select MLI1A<='1' when dem, MLI1AE when suiv, '0' when arret, '0' when prio; with etatcourant select MLI2A<='1' when dem, MLI2AE when suiv, '0' when arret, '0' when prio;

end gestionpa1;

- 38 -

Voici la simulation de détection d’obstacle :

Voici la simulation de détection d’obstacle : Commentaires : On observe bien que lorsque le signal

Commentaires :

On observe bien que lorsque le signal détection d'obstacle est généré, au front d'horloge suivant le robot passe à l'état courant arrêt et n'en ressort plus.

- 39 -

6

, - # $

Dans le règlement de l’épreuve, il est dit que deux départs sont possibles :

! " ! # ! $ "

possibles : ! " ! # ! $ " , - # $ Nous avons choisit

, - # $

Nous avons choisit dans notre stratégie de course que pour un démarrage à l’aveugle, notre robot devra aller tout droit jusqu'à la détection d’une ligne blanche. La gestion du départ à l’aveugle et de l’arrêt final peut se synthétiser sous la forme d’un diagramme d’état.

Diagramme d’état :

Il y a 3 états :

- 40 -

%

&

% & Commentaires : Dans ce diagramme d’état, on observe que pour passer de l’état de

Commentaires :

Dans ce diagramme d’état, on observe que pour passer de l’état de démarrage qui est l’état initial à celui de Suivie de ligne, il faut que le signal que nous renvoient les capteurs soit différent de « 00 000 » autrement dit que les capteurs que les capteurs détectent une ligne blanche. Ensuite on entre dans l’état suivi de ligne qui communique avec un autre état, l’été priorité, en fonction de si il détecte ou non un signal danger. De l’état suivi de ligne on peut passer à l’état Arrêt si un signal détection d’obstacle est signalé.

Voici la programmation VHDL du bloc Gestion Parcours :

library IEEE; use IEEE.std_logic_1164.all; entity gestionpa is port( capteurs : in std_logic_vector(6 downto 1); DO, H,Danger,MLI1AE,MLI2AE : in std_logic; MLI1A,MLI2A : out std_logic); end gestionpa;

architecture gestionpa1 of gestionpa is type desetats is(dem,suiv,prio,arret); signal etatcourant : desetats; begin

- 41 -

p:process(H) begin if(H' event and H='1') then case etatcourant is when dem => if(capteurs/="000000")then etatcourant<=suiv;

end if; when suiv => if(danger='1') then etatcourant <= prio; elsif(DO='0') then etatcourant <=

arret;

end if; when prio => if(danger='0') then etatcourant<=suiv; end if; when arret=> etatcourant <= arret; end case; end if; end process;

with etatcourant select MLI1A<='1' when dem, MLI1AE when suiv, '0' when arret, '0' when prio; with etatcourant select MLI2A<='1' when dem, MLI2AE when suiv, '0' when arret, '0' when prio;

end gestionpa1;

Voici la simulation de gestion parcours :

end gestionpa1; Voici la simulation de gestion parcours : Commentaires : On observe que lorsque l'on

Commentaires :

On observe que lorsque l'on a aucun signal sur les capteurs, le robot reste dans l'état courant démarrage puis, lorsqu'il détecte un signal, il passe dans l'état courant suivant.

- 42 -

Chapitre

.

/

Le but de ce projet était de réaliser la partie programmation du robot filoguidé. Il nous a fallut décrire les différents blocs exécutant chacun une fonction particulière. Ensuite nous avons assemblé ces blocs affin d’arriver a la programmation finale. Cette dernière fut mise en œuvre sur une piste afin de vérifier son bon fonctionnement. Cette programmation permit au robot de suivre la ligne tout au long du parcours jusqu'à son arrivée en respectant le cahier des charges et en un temps record de 16 secondes 20. Ainsi grâce à la réalisation de ce projet nous avons pus mettre en œuvre concrètement des enseignements suivis à l’Iut. Tout en étant guidé mais à la fois libre, ce projet nous a permit de prendre des initiatives, de réfléchir par nous même et d’effectuer un travail se rapprochant plus de celui qui nous sera demandé lors de notre carrière professionnelle. Le fait d’assister à toutes les étapes de la conception et de la réalisation d’un produit fut à la fois plaisant et éducatif.

- 43 -