TD 4 — Microcontrôleur
ATmega328 / Arduino Uno
Une version premium, claire et pédagogique du TD, structurée en diapos dynamiques. Les questions courtes sont présentées en format question à gauche / réponse à droite, tandis que les exercices plus détaillés sont séparés en énoncé puis solution.
Sommaire
Exercice 1
Généralités sur Arduino Uno : 8 questions rapides avec réponses immédiates.
Exercice 2
Feux de signalisation avec LEDs : cahier des charges puis programme Arduino.
Exercice 3
Commande d’une LED par bouton poussoir : lecture d’entrée numérique.
Exercice 4
Allumage de LEDs selon la position d’un potentiomètre avec clignotement automatique.
Exercice 5
Détection d’objets avec capteur ultrason HC-SR04 et variation PWM.
Fin de présentation
Résumé des commandes Arduino essentielles à retenir.
Exercice 1 — Généralités sur Arduino Uno
Quelles sont les deux fonctions obligatoires dans tout programme Arduino ?
Les deux fonctions obligatoires sont setup() et loop().
Exercice 1 — Généralités sur Arduino Uno
Quelle instruction permet de définir si une broche est une entrée ou une sortie ?
L’instruction pinMode(pin, mode); permet de définir une broche en entrée (INPUT) ou en sortie (OUTPUT).
Exercice 1 — Généralités sur Arduino Uno
À quoi sert la fonction setup() ? S’exécute-t-elle en boucle ou une seule fois ?
La fonction setup() sert à initialiser le programme : configuration des broches, communication série, etc. Elle s’exécute une seule fois au démarrage.
Exercice 1 — Généralités sur Arduino Uno
Quelle est la différence entre les broches numériques et analogiques d’une carte Arduino ?
Les broches numériques lisent ou écrivent des valeurs binaires HIGH/LOW, alors que les broches analogiques permettent de lire des valeurs variables, typiquement de 0 à 1023.
Exercice 1 — Généralités sur Arduino Uno
Comment allumer une LED sur la broche 13 ?
Il faut d’abord configurer la broche avec pinMode(13, OUTPUT);, puis envoyer digitalWrite(13, HIGH);.
Exercice 1 — Généralités sur Arduino Uno
Quelle broche permet de lire la valeur d’un potentiomètre ?
On utilise une broche analogique, par exemple A0 à A5.
Exercice 1 — Généralités sur Arduino Uno
À quoi servent les broches marquées d’un tilde (~) ?
Elles permettent d’utiliser la fonction analogWrite() afin de générer un signal PWM (pseudo-analogique).
Exercice 1 — Généralités sur Arduino Uno
Sur quel port branche-t-on un bouton poussoir ?
Sur une broche numérique configurée en entrée avec INPUT.
Exercice 1 — Synthèse rapide
Structure minimale
Tout programme Arduino contient setup() pour l’initialisation et loop() pour l’exécution répétitive.
Gestion des broches
On configure les broches avec pinMode(), puis on agit avec digitalWrite() ou on lit avec digitalRead().
Entrées analogiques
Les capteurs comme le potentiomètre sont généralement raccordés sur A0…A5.
PWM
Les broches marquées ~ servent à la commande pseudo-analogique par analogWrite().
Exercice 2 — Feux de signalisation avec LEDs
Le système doit réaliser un feu de signalisation avec deux feux tricolores composés chacun de trois LEDs : rouge, orange et verte.
- Si un feu est vert, l’autre doit être rouge.
- Un délai de 3 secondes doit séparer le feu vert du feu orange.
- Un délai de 1 seconde doit séparer le feu orange du feu rouge.
- Après le rouge, attendre 3 secondes avant le passage au vert de l’autre feu.
- Travail demandé : écrire le programme Arduino, puis simuler le montage sous Proteus ou Tinkercad.
Exercice 2 — Feux de signalisation avec LEDs
// Définition des broches pour le Feu 1
int R1 = 2;
int O1 = 3;
int V1 = 4;
// Définition des broches pour le Feu 2
int R2 = 5;
int O2 = 6;
int V2 = 7;
void setup() {
pinMode(R1, OUTPUT);
pinMode(O1, OUTPUT);
pinMode(V1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(O2, OUTPUT);
pinMode(V2, OUTPUT);
}
void loop() {
// Phase 1 : Feu 1 vert, Feu 2 rouge
digitalWrite(V1, HIGH);
digitalWrite(O1, LOW);
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(O2, LOW);
digitalWrite(V2, LOW);
delay(3000);
// Phase 2 : Feu 1 orange, Feu 2 rouge
digitalWrite(V1, LOW);
digitalWrite(O1, HIGH);
delay(1000);
// Phase 3 : Feu 1 rouge, Feu 2 vert
digitalWrite(O1, LOW);
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(V2, HIGH);
delay(3000);
// Phase 4 : Feu 2 orange, Feu 1 rouge
digitalWrite(V2, LOW);
digitalWrite(O2, HIGH);
delay(1000);
// Fin du cycle
digitalWrite(O2, LOW);
}
Exercice 3 — Contrôle d’une LED par bouton poussoir
Le montage permet à l’Arduino de lire l’état du bouton poussoir SW1.
- La LED est allumée si le bouton est appuyé.
- La LED est éteinte si le bouton est relâché.
- La LED est branchée sur la broche 13.
- Travail demandé : écrire le programme puis simuler le circuit sous Proteus ou Tinkercad.
Exercice 3 — Contrôle d’une LED par bouton poussoir
int bouton = 2; // Broche du bouton poussoir
int led = 13; // Broche de la LED
void setup() {
pinMode(bouton, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
int etat = digitalRead(bouton);
if (etat == HIGH) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
Exercice 4 — Contrôle de LEDs par potentiomètre
Le système commande quatre LEDs à partir de la valeur analogique lue sur un potentiomètre.
- val ≤ 205 : aucune LED allumée
- 205 < val ≤ 410 : 1 LED allumée
- 410 < val ≤ 615 : 2 LEDs allumées
- 615 < val ≤ 820 : 3 LEDs allumées
- val > 820 : 4 LEDs allumées
- Le clignotement est automatique : 1 s allumé / 1 s éteint.
Exercice 4 — Contrôle de LEDs par potentiomètre
// LEDs sur les broches 10, 11, 12 et 13
int L1 = 10;
int L2 = 11;
int L3 = 12;
int L4 = 13;
int pot = A0;
void setup() {
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT);
}
void loop() {
int val = analogRead(pot);
int n = 0;
if (val <= 205) n = 0;
else if (val <= 410) n = 1;
else if (val <= 615) n = 2;
else if (val <= 820) n = 3;
else n = 4;
digitalWrite(L1, n >= 1);
digitalWrite(L2, n >= 2);
digitalWrite(L3, n >= 3);
digitalWrite(L4, n >= 4);
delay(1000);
digitalWrite(L1, LOW);
digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
delay(1000);
}
Exercice 5 — Détection d’objets avec HC-SR04
Le système détecte la présence d’un objet avec un capteur ultrason HC-SR04.
- ECHO sur la broche 8 et TRIG sur la broche 9.
- LED1 sur la broche 2 et LED2 sur la broche 3.
- Mesurer la distance et l’afficher sur le moniteur série.
- Allumer LED1 si d < 100 cm.
- Faire varier l’intensité de LED2 : plus l’objet est proche, plus l’intensité augmente.
Exercice 5 — Détection d’objets avec HC-SR04
// Broches du capteur HC-SR04
int trig = 9;
int echo = 8;
// Broches des LEDs
int LED1 = 2;
int LED2 = 3;
long duree;
int distance;
int pwm;
void setup() {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duree = pulseIn(echo, HIGH);
distance = duree * 0.034 / 2;
Serial.print("La distance est : ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 100) digitalWrite(LED1, HIGH);
else digitalWrite(LED1, LOW);
pwm = map(distance, 0, 200, 255, 0);
pwm = constrain(pwm, 0, 255);
analogWrite(LED2, pwm);
delay(200);
}
Commandes Arduino essentielles
pinMode(pin, mode)
Configurer une broche en entrée ou sortie. Exemple : pinMode(13, OUTPUT);
digitalWrite(pin, HIGH/LOW)
Fixer l’état logique d’une sortie numérique.
analogWrite(pin, val)
Générer un signal PWM entre 0 et 255.
analogRead(pin)
Lire une valeur analogique entre 0 et 1023.
map(x, a, b, c, d)
Transformer une valeur d’un intervalle vers un autre.
constrain(x, a, b)
Limiter une valeur à un intervalle donné.
pulseIn(pin, HIGH)
Mesurer la durée d’une impulsion sur une entrée.
Serial.begin / print / println
Initialiser et utiliser la communication série.
Merci
Cette présentation peut être projetée directement en classe, utilisée comme support de révision, ou enrichie avec des schémas, animations et simulations supplémentaires.