⭐⭐⭐ Défi
⏱️ 25 minutes
Télémètre avec barre lumineuse
Tu fabriques une barre lumineuse qui montre à quelle distance se trouve un objet. Loin : aucune lampe. Plus c’est proche, plus il y a de lampes qui s’allument. D’abord vert, puis orange, et tout près rouge.
🧰 De quoi as-tu besoin ?
🗺️ Schéma de branchement
Suis les fils de l’Arduino vers chaque pièce. Tu peux choisir toi-même les couleurs des fils.
| De | Vers |
|---|---|
Arduino UNO · D9 |
Capteur de distance HC-SR04 · Trig |
Arduino UNO · D10 |
Capteur de distance HC-SR04 · Echo |
Arduino UNO · 5V |
Capteur de distance HC-SR04 · Vcc |
Arduino UNO · GND |
Capteur de distance HC-SR04 · Gnd |
Arduino UNO · D6 |
Anneau LED RGB (8 LEDs) · DI |
Arduino UNO · 5V |
Anneau LED RGB (8 LEDs) · 5V |
Arduino UNO · GND |
Anneau LED RGB (8 LEDs) · GND |
🛠️ Voici comment le construire
- Branche le HC-SR04 : Trig vers la pin 9, Echo vers la pin 10, Vcc vers 5V et Gnd vers GND.
- Branche l’anneau LED : DI vers la pin 6, 5V vers 5V et GND vers GND.
💻 Le code
// Télémètre avec barre lumineuse
// Plus tu t'approches, plus il y a de lampes allumées : vert, puis orange, puis rouge.
#include <Adafruit_NeoPixel.h>
const int TRIG_PIN = 9; // Trig du HC-SR04 sur la pin 9
const int ECHO_PIN = 10; // Echo du HC-SR04 sur la pin 10
const int RING_PIN = 6; // DI de l'anneau LED sur la pin 6
const int NB_LEDS = 8;
const int DISTANCE_MAX = 80; // Plus loin que ça (en cm) : toutes les lampes éteintes
Adafruit_NeoPixel anneau(NB_LEDS, RING_PIN, NEO_GRB + NEO_KHZ800);
long mesurerDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duree = pulseIn(ECHO_PIN, HIGH, 30000);
if (duree == 0) return 999;
return duree / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
anneau.begin();
anneau.setBrightness(40);
anneau.show();
}
void loop() {
long distance = mesurerDistance();
Serial.print(F("Distance: "));
Serial.print(distance);
Serial.println(F(" cm"));
// Combien de lampes doivent s'allumer ? Près = 8, loin = 0
int nombre = map(constrain(distance, 0, DISTANCE_MAX), 0, DISTANCE_MAX, NB_LEDS, 0);
for (int i = 0; i < NB_LEDS; i++) {
if (i < nombre) {
if (i < 3) anneau.setPixelColor(i, anneau.Color(0, 255, 0)); // Vert
else if (i < 6) anneau.setPixelColor(i, anneau.Color(255, 120, 0)); // Orange
else anneau.setPixelColor(i, anneau.Color(255, 0, 0)); // Rouge
} else {
anneau.setPixelColor(i, 0); // Éteint
}
}
anneau.show();
delay(100);
}
🧠 Que fait le code ?
mesurerDistance()mesure la distance avec le HC-SR04.map()transforme la distance en nombre de lampes : 0 à 8.- Les 3 premières lampes sont vertes, les 3 suivantes orange et les 2 dernières rouges.
🎯 Essaie un peu…
- Fais clignoter toutes les lampes en rouge si tu es à moins de 10 cm
- Ajoute le buzzer qui bippe quand c’est rouge
- Rends le mètre plus sensible : toutes les lampes allumées à 40 cm au lieu de 80 cm
🚀 Construis ce projet avec Codey : ouvre codey.online/fr/starter-kits/uno/projects/distance-light-bar et clique sur FAIS ÇA. Alors le code et le schéma de branchement sont tout de suite prêts.
Codey Online est un produit de OTRONIC