Examen 2
Phase de mise en place
- Phase de mise en placePhase actuelle
- Info de tâche L’atelier est en cours de configuration. Veuillez attendre qu’il passe à la phase suivante.
- Phase de remise
- Phase d’évaluation
- Phase de notation des évaluations
- Fermé
On souhaite concevoir un système embarqué permettant de gérer automatiquement les feux de circulation d’un carrefour à l’aide du microcontrôleur PIC18F45K22. Le carrefour est composé de deux routes : route A et route B. Chaque route possède un feu tricolore constitué de trois LEDs : rouge, jaune et verte. Les LEDs sont connectées au PORTD du microcontrôleur. Le fonctionnement du système est le suivant :
- Au démarrage, la route A est au vert et la route B est au rouge pendant 10 secondes.
- Ensuite, la route A passe au jaune pendant 2 secondes.
- Après cela, la route A passe au rouge et la route B passe au vert pendant 10 secondes.
- Puis, la route B passe au jaune pendant 2 secondes.
- Enfin, la route B repasse au rouge et la route A repasse au vert.
Le cycle se répète continuellement.
Dans cet exercice, on impose que le PORTD soit utilisé uniquement pour les sorties (LEDs).
1. Écrire un programme en langage C permettant de gérer automatiquement les feux tricolores du carrefour à l’aide du microcontrôleur PIC18F45K22
Exercice 2 (09pts) :
On souhaite concevoir un système embarqué permettant de commander un robot mobile intelligent à 4 roues à l’aide du microcontrôleur PIC18F45K22. Le robot est destiné à suivre automatiquement une ligne noire tracée au sol.
Le robot mobile est composé d’un microcontrôleur PIC18F45K22 assurant le traitement des informations et la commande du système, ainsi que d’un circuit de puissance L293D permettant de piloter deux moteurs à courant continu. Ces moteurs assurent le déplacement des quatre roues du robot.
Afin d’assurer le suivi automatique de la ligne noire, le robot est équipé de deux capteurs infrarouges placés à l’avant : un capteur gauche (Cap_G) et un capteur droit (Cap_D). Chaque capteur infrarouge possède une entrée constituée d’une diode émettrice infrarouge et une sortie numérique reliée au microcontrôleur. Le rôle de ces capteurs est de détecter la présence ou l’absence de la ligne noire à partir de la réflexion du rayonnement infrarouge sur le sol. Lorsque le capteur détecte la ligne noire, il délivre un état logique 1 à sa sortie permettant au microcontrôleur de déterminer la direction du robot et de corriger sa trajectoire.

Le système comporte également un afficheur LCD 16x2 permettant d’afficher l’état et la direction actuelle du robot (avance, tourne à gauche, tourne à droite ou arrêt). La ligne noire tracée au sol représente la trajectoire que le robot doit suivre automatiquement.
Le principe de fonctionnement du robot est le suivant :
· Lorsque les deux capteurs détectent la ligne noire, le robot avance tout droit et l’afficheur LCD indique : « AVANCE ».
· Lorsque le capteur gauche détecte la ligne noire tandis que le capteur droit ne la détecte pas, le robot tourne vers la gauche afin de se réaligner avec la trajectoire. Le LCD affiche : « TOURNE GAUCHE ».
· Lorsque le capteur droit détecte la ligne noire tandis que le capteur gauche ne la détecte pas, le robot tourne vers la droite. Le LCD affiche : « TOURNE DROITE ».
· Lorsque les deux capteurs ne détectent plus la ligne noire, le robot s’arrête automatiquement et le LCD affiche : « STOP ».
Dans cet exercice, on impose que :
· Le PORTB soit utilisé uniquement pour les entrées (capteurs).
· Le PORTD soit utilisé uniquement pour les commandes des moteurs via le L293D.
· Le PORTC soit utilisé pour l’afficheur LCD.
Les moteurs du robot sont commandés à travers le circuit L293D à l’aide de quatre signaux de commande reliés au PORTD du microcontrôleur. Selon les niveaux logiques appliqués aux entrées du L293D, les moteurs peuvent tourner dans le sens avant, dans le sens inverse ou être arrêtés. Ainsi, le microcontrôleur peut contrôler la direction du déplacement du robot (avance, rotation à gauche, rotation à droite ou arrêt) en fonction des informations fournies par les capteurs infrarouges.
1. À partir du scénario de suivi de ligne, compléter le tableau en indiquant les états logiques (0 ou 1) des entrées et des sorties pour les différentes situations de fonctionnement du robot.
|
Situation |
Cap_G |
Cap_D |
Moteur gauche |
Moteur droit |
Direction robot |
Affichage LCD |
|
Avance |
||||||
|
Tourne à gauche |
||||||
|
Tourne à droite |
||||||
|
Arrêt |
2. À partir du scénario de suivi de ligne, compléter le tableau en indiquant les états logiques (0 ou 1) des entrées et des sorties pour les différentes situations de fonctionnement du robot.
3. Écrire une fonction nommée initialiser_ports permettant de configurer : PORTB en entrée, PORTD en sortie, PORTC pour l’afficheur LCD. void initialiser_ports ();
4. Écrire une fonction nommée lire_capteurs permettant de lire l’état des deux capteurs connectés au PORTB. int lire_capteurs ();
5. Écrire une fonction nommée detecter_direction permettant de déterminer la direction du robot à partir des états des capteurs. La fonction doit retourner : 0 : STOP ; 1 : AVANCE ; 2 : GAUCHE ; 3 : DROITE. int detecter_direction (int etat_capteurs);
6. Écrire une fonction nommée commander_moteurs permettant de piloter les moteurs du robot via le circuit L293D selon la direction demandée.
void commander_moteurs (int direction);
7. Écrire une fonction nommée afficher_direction_LCD permettant d’afficher sur le LCD la direction actuelle du robot : « AVANCE », « TOURNE GAUCHE » , « TOURNE DROITE » , « STOP ».
void afficher_direction_LCD (int direction);
8. Écrire le programme principal main assurant : l’initialisation du système, la lecture continue des capteurs, la détection de la direction, la commande des moteurs, l’affichage de l’état du robot sur le LCD.
|
Vss: Alimentation du circuit integré de commande (+5V). |
OUT1, OUT2 - Broches à raccorder à la charge (le moteur 1) |
|
Vs : Alimentation de puissance des moteurs. |
IN1, IN2 - Broche de commande du pont 1(pour commande le moteur 1). Se raccorde au PIC. |
|
GND : Doit être raccordé à la masse (GND). |
EN1 - permet d'envoyer (ou pas) la tension sur les sorties du moteur 1 via OUT1 & OUT2. |
|
Si EN1 = GND, le pont 1 est déconnecté et le moteur 1 ne fonctionne pas. |
|
