⭐⭐⭐ Uitdaging
⏱️ 25 minuten
Afstandsmeter met lichtbalk
Je maakt een lichtbalk die laat zien hoe dichtbij iets is. Ver weg: geen lampjes. Hoe dichterbij, hoe meer lampjes er gaan branden. Eerst groen, dan oranje en heel dichtbij rood.
🧰 Wat heb je nodig?
🗺️ Aansluitschema
Volg de draden van de Arduino naar elk onderdeel. De kleuren van de draden mag je zelf kiezen.
| Van | Naar |
|---|---|
Arduino UNO · D9 |
Afstandssensor HC-SR04 · Trig |
Arduino UNO · D10 |
Afstandssensor HC-SR04 · Echo |
Arduino UNO · 5V |
Afstandssensor HC-SR04 · Vcc |
Arduino UNO · GND |
Afstandssensor HC-SR04 · Gnd |
Arduino UNO · D6 |
RGB LED-ring (8 LEDs) · DI |
Arduino UNO · 5V |
RGB LED-ring (8 LEDs) · 5V |
Arduino UNO · GND |
RGB LED-ring (8 LEDs) · GND |
🛠️ Zo bouw je het
- Sluit de HC-SR04 aan: Trig naar pin 9, Echo naar pin 10, Vcc naar 5V en Gnd naar GND.
- Sluit de LED-ring aan: DI naar pin 6, 5V naar 5V en GND naar GND.
💻 De code
// Afstandsmeter met lichtbalk
// Hoe dichterbij je komt, hoe meer lampjes er branden: groen, dan oranje, dan rood.
#include <Adafruit_NeoPixel.h>
const int TRIG_PIN = 9; // Trig van de HC-SR04 op pin 9
const int ECHO_PIN = 10; // Echo van de HC-SR04 op pin 10
const int RING_PIN = 6; // DI van de LED-ring op pin 6
const int AANTAL_LEDS = 8;
const int MAX_AFSTAND = 80; // Verder dan dit (in cm): alle lampjes uit
Adafruit_NeoPixel ring(AANTAL_LEDS, RING_PIN, NEO_GRB + NEO_KHZ800);
long meetAfstand() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long tijd = pulseIn(ECHO_PIN, HIGH, 30000);
if (tijd == 0) return 999;
return tijd / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
ring.begin();
ring.setBrightness(40);
ring.show();
}
void loop() {
long afstand = meetAfstand();
Serial.print(F("Afstand: "));
Serial.print(afstand);
Serial.println(F(" cm"));
// Hoeveel lampjes moeten er branden? Dichtbij = 8, ver weg = 0
int aantal = map(constrain(afstand, 0, MAX_AFSTAND), 0, MAX_AFSTAND, AANTAL_LEDS, 0);
for (int i = 0; i < AANTAL_LEDS; i++) {
if (i < aantal) {
if (i < 3) ring.setPixelColor(i, ring.Color(0, 255, 0)); // Groen
else if (i < 6) ring.setPixelColor(i, ring.Color(255, 120, 0)); // Oranje
else ring.setPixelColor(i, ring.Color(255, 0, 0)); // Rood
} else {
ring.setPixelColor(i, 0); // Uit
}
}
ring.show();
delay(100);
}
🧠 Wat doet de code?
meetAfstand()meet de afstand met de HC-SR04.map()rekent de afstand om naar een aantal lampjes: 0 tot 8.- De eerste 3 lampjes zijn groen, de volgende 3 oranje en de laatste 2 rood.
🎯 Probeer eens…
- Laat alle lampjes rood knipperen als je dichter dan 10 cm bent
- Voeg de zoemer toe die piept bij rood
- Maak de meter gevoeliger: alle lampjes aan bij 40 cm in plaats van 80 cm
🚀 Bouw dit project met Codey: open codey.online/nl/starter-kits/uno/projects/distance-light-bar en klik op MAAK DIT. Dan staan de code en het aansluitschema meteen klaar.
Codey Online is een product van OTRONIC