⭐⭐⭐ Herausforderung
⏱️ 25 Minuten
Abstandsmesser mit Lichtbalken
Du baust einen Lichtbalken. Er zeigt, wie nah etwas ist. Weit weg: keine Lämpchen. Je näher es kommt, desto mehr Lämpchen leuchten. Erst grün, dann orange und ganz nah rot.
🧰 Was brauchst du?
🗺️ Schaltplan
Folge den Drähten vom Arduino zu jedem Teil. Die Farben der Drähte darfst du selbst wählen.
| Von | Nach |
|---|---|
Arduino UNO · D9 |
Abstandssensor HC-SR04 · Trig |
Arduino UNO · D10 |
Abstandssensor HC-SR04 · Echo |
Arduino UNO · 5V |
Abstandssensor HC-SR04 · Vcc |
Arduino UNO · GND |
Abstandssensor 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 |
🛠️ So baust du es
- Schließe den HC-SR04 an: Trig an Pin 9, Echo an Pin 10, Vcc an 5V und Gnd an GND.
- Schließe den LED-Ring an: DI an Pin 6, 5V an 5V und GND an GND.
💻 Der Code
// Abstandsmesser mit Lichtbalken
// Je näher du kommst, desto mehr Lämpchen leuchten: grün, dann orange, dann rot.
#include <Adafruit_NeoPixel.h>
const int TRIG_PIN = 9; // Trig des HC-SR04 an Pin 9
const int ECHO_PIN = 10; // Echo des HC-SR04 an Pin 10
const int RING_PIN = 6; // DI des LED-Rings an Pin 6
const int ANZAHL_LEDS = 8;
const int MAX_ABSTAND = 80; // Weiter als das (in cm): alle Lämpchen aus
Adafruit_NeoPixel ring(ANZAHL_LEDS, RING_PIN, NEO_GRB + NEO_KHZ800);
long missAbstand() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long zeit = pulseIn(ECHO_PIN, HIGH, 30000);
if (zeit == 0) return 999;
return zeit / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
ring.begin();
ring.setBrightness(40);
ring.show();
}
void loop() {
long abstand = missAbstand();
Serial.print(F("Abstand: "));
Serial.print(abstand);
Serial.println(F(" cm"));
// Wie viele Lämpchen sollen leuchten? Nah = 8, weit weg = 0
int anzahl = map(constrain(abstand, 0, MAX_ABSTAND), 0, MAX_ABSTAND, ANZAHL_LEDS, 0);
for (int i = 0; i < ANZAHL_LEDS; i++) {
if (i < anzahl) {
if (i < 3) ring.setPixelColor(i, ring.Color(0, 255, 0)); // Grün
else if (i < 6) ring.setPixelColor(i, ring.Color(255, 120, 0)); // Orange
else ring.setPixelColor(i, ring.Color(255, 0, 0)); // Rot
} else {
ring.setPixelColor(i, 0); // Aus
}
}
ring.show();
delay(100);
}
🧠 Was macht der Code?
missAbstand()misst den Abstand mit dem HC-SR04.map()rechnet den Abstand in eine Anzahl Lämpchen um: 0 bis 8.- Die ersten 3 Lämpchen sind grün, die nächsten 3 orange und die letzten 2 rot.
🎯 Probier mal …
- Lass alle Lämpchen rot blinken, wenn du näher als 10 cm bist
- Füge den Summer hinzu, der bei Rot piept
- Mach den Messer empfindlicher: alle Lämpchen an bei 40 cm statt bei 80 cm
🚀 Baue dieses Projekt mit Codey: Öffne codey.online/de/starter-kits/uno/projects/distance-light-bar und klicke auf BAU DAS. Dann sind der Code und der Schaltplan sofort bereit.
Codey Online ist ein Produkt von OTRONIC