Workshop supplémentaire Arduino

Exercice 1 – Faire clignoter le feu rouge (LED unique)

Consigne

Programme la carte pour que la LED s’allume et s’éteigne alternativement toutes les secondes, en boucle.

Matériel attendu (dans Tinkercad)

Connexions dans Tinkercad


Code corrigé

int ledRouge = 13;

void setup() {
  pinMode(ledRouge, OUTPUT);
}

void loop() {
  digitalWrite(ledRouge, HIGH);
  delay(1000);
  digitalWrite(ledRouge, LOW);
  delay(1000);
}

Exercice 2 – Construire un vrai feu tricolore

Consigne

Crée un programme qui simule un feu de circulation simple :

Matériel attendu (dans Tinkercad)

Connexions dans Tinkercad


Code corrigé

int ledRouge = 13;
int ledOrange = 12;
int ledVerte = 11;

void setup() {
  pinMode(ledRouge, OUTPUT);
  pinMode(ledOrange, OUTPUT);
  pinMode(ledVerte, OUTPUT);
}

void loop() {
  digitalWrite(ledVerte, HIGH);
  delay(3000);
  digitalWrite(ledVerte, LOW);

  digitalWrite(ledOrange, HIGH);
  delay(1000);
  digitalWrite(ledOrange, LOW);

  digitalWrite(ledRouge, HIGH);
  delay(3000);
  digitalWrite(ledRouge, LOW);
}

Exercice 3 – Ajouter un bouton piéton

Consigne

Modifie le programme du feu tricolore pour qu’un appui sur le bouton déclenche immédiatement la séquence normale des feux (vert → orange → rouge), quel que soit le moment. Par défaut, le feu reste au vert tant que le bouton n’est pas pressé.

Matériel attendu (dans Tinkercad)

Connexions dans Tinkercad

Ainsi, lorsque le bouton est relâché, la broche lit LOW ; lorsqu’il est appuyé, elle lit HIGH.


Code corrigé

int ledRouge = 13;
int ledOrange = 12;
int ledVerte = 11;
int bouton = 2;

void setup() {
  pinMode(ledRouge, OUTPUT);
  pinMode(ledOrange, OUTPUT);
  pinMode(ledVerte, OUTPUT);
  pinMode(bouton, INPUT);
}

void loop() {
  int etatBouton = digitalRead(bouton);

  // Feu vert
  digitalWrite(ledVerte, HIGH);
  int duree = (etatBouton == HIGH) ? 1000 : 3000;
  delay(duree);
  digitalWrite(ledVerte, LOW);

  // Feu orange
  digitalWrite(ledOrange, HIGH);
  delay(1000);
  digitalWrite(ledOrange, LOW);

  // Feu rouge
  digitalWrite(ledRouge, HIGH);
  delay(3000);
  digitalWrite(ledRouge, LOW);
}

Exercice 4 – Feu piéton + traversée sécurisée

Consigne

Complète le programme pour que :

Matériel attendu (dans Tinkercad)

Connexions dans Tinkercad

Code corrigé

int ledRouge = 13;
int ledOrange = 12;
int ledVerte = 11;
int ledPietonRouge = 10;
int ledPietonVerte = 9;
int bouton = 2;

void setup() {
  pinMode(ledRouge, OUTPUT);
  pinMode(ledOrange, OUTPUT);
  pinMode(ledVerte, OUTPUT);
  pinMode(ledPietonRouge, OUTPUT);
  pinMode(ledPietonVerte, OUTPUT);
  pinMode(bouton, INPUT);
}

void loop() {
  int etatBouton = digitalRead(bouton);

  // Feu voiture vert + piéton rouge
  digitalWrite(ledVerte, HIGH);
  digitalWrite(ledPietonRouge, HIGH);
  delay((etatBouton == HIGH) ? 1000 : 3000);
  digitalWrite(ledVerte, LOW);

  // Orange voiture
  digitalWrite(ledOrange, HIGH);
  delay(1000);
  digitalWrite(ledOrange, LOW);

  // Rouge voiture + feu piéton vert
  digitalWrite(ledRouge, HIGH);
  digitalWrite(ledPietonRouge, LOW);
  digitalWrite(ledPietonVerte, HIGH);
  delay(3000);

  // Retour à l'état initial
  digitalWrite(ledPietonVerte, LOW);
  digitalWrite(ledPietonRouge, HIGH);
  digitalWrite(ledRouge, LOW);
}

Exercice 5 – Amélioration avec variateur de luminosité

Consigne

Modifie le programme du feu tricolore pour ajouter une veilleuse qui s’allume progressivement quand le feu passe au rouge, puis s’éteint lorsque la séquence redémarre au vert. L’effet doit être fluide et continu.

Matériel attendu (dans Tinkercad)

Connexions dans Tinkercad


Code corrigé

int ledVeilleuse = 6;  // Broche PWM
int ledRouge = 13;
int ledOrange = 12;
int ledVerte = 11;

void setup() {
  pinMode(ledVeilleuse, OUTPUT);
  pinMode(ledRouge, OUTPUT);
  pinMode(ledOrange, OUTPUT);
  pinMode(ledVerte, OUTPUT);
}

void loop() {
  // Feu vert
  digitalWrite(ledVerte, HIGH);
  analogWrite(ledVeilleuse, 0);
  delay(3000);
  digitalWrite(ledVerte, LOW);

  // Feu orange
  digitalWrite(ledOrange, HIGH);
  delay(1000);
  digitalWrite(ledOrange, LOW);

  // Feu rouge + veilleuse progressive
  digitalWrite(ledRouge, HIGH);
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledVeilleuse, i);
    delay(5);
  }
  delay(3000);

  // Retour à l'état initial
  digitalWrite(ledRouge, LOW);
  analogWrite(ledVeilleuse, 0);
}