Die Ampel zeigt zunächst rot. Wenn die Entfernung kleiner als 10 cm ist, soll sie nach 1 Sekunde Wartezeit erst auf rot/gelb für eine Sekunde, dann auf grün für drei Sekunden springen. Anschließend folgt wieder eine Sekunde gelb und dann wieder rot.
So sieht es aus:
Benötigte Bauteile:
- Ultraschallsensor HC-SR04
- 3 LEDs (rot, gelb, grün)
- 3 Widerstände 220 Ω
- Leitungsdrähte
Damit der Ultraschallsensor ordnungsgemäß arbeiten kann, musst du ihn so einstecken, dass Sender und Empfänger nach vorn zeigen, damit das Signal ungehindert gesendet und empfangen werden kann. Die Leitungsdrähte werden auf der Rückseite eingesteckt.
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Definiere die benötigten Variablen und lege die pinModes fest:
// Senden und Empfangen
#define SENDEN 9
#define ECHO 8
// Ampel
#define ROT 5
#define GELB 6
#define GRUEN 7
long Zeit = 0;
long Entfernung = 0;
void setup()
{
pinMode(SENDEN, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(ROT, OUTPUT);
pinMode(GELB, OUTPUT);
pinMode(GRUEN, OUTPUT);
}
Verwende die ⇒Funktion ⇒EntfernungMessen():
int EntfernungMessen()
{
long Entfernung = 0;
// Sender kurz ausschalten um Störungen des Signal zu vermeiden
digitalWrite(SENDEN, LOW);
delay(5);
// Signal senden
digitalWrite(SENDEN, HIGH);
delayMicroseconds(10);
digitalWrite(SENDEN, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
long Zeit = pulseIn(ECHO, HIGH);
// Entfernung in cm berechnen
Entfernung = (Zeit / 2) * 0.03432;
return Entfernung;
}
Die ⇒Funktion AmpelSchalten() sorgt dafür, dass die Ampel im festgelegten Rhythmus geschaltet wird (rot/gelb - 1 Sekunde, grün - 3 Sekunden, gelb - 1 Sekunde).
void AmpelSchalten()
{
delay(1000);
digitalWrite(GELB, HIGH);
delay(1000);
digitalWrite(GELB, LOW);
digitalWrite(ROT, LOW);
digitalWrite(GRUEN, HIGH);
delay(3000);
digitalWrite(GRUEN, LOW);
digitalWrite(GELB, HIGH);
delay(1000);
digitalWrite(GELB, LOW);
digitalWrite(ROT, HIGH);
}
Der loop-Teil:
void loop()
{
digitalWrite(ROT, HIGH);
// Funktion aufrufen
Entfernung = EntfernungMessen();
// Ampel schalten
if (Entfernung < 10)
{
AmpelSchalten();
}
}
Verwandte Anleitungen:
Letzte Aktualisierung: