Ampel mit Ultra­schall­sen­sor schalten

Lese­zeit: 3 Minu­ten

Lösung
Seite als PDF

Die Ampel zeigt zunächst rot. Wenn die Ent­fer­nung klei­ner als 10 cm ist, soll sie nach 1 Sekun­de War­te­zeit erst auf rot/gelb für eine Sekun­de, dann auf grün für drei Sekun­den sprin­gen. Anschlie­ßend folgt wie­der eine Sekun­de gelb und dann wie­der rot.

So sieht es aus:

Ultra­schall­sen­sor

Benö­tig­te Bauteile:

  • Ultra­schall­sen­sor HC-SR04
  • 3 LEDs (rot, gelb, grün)
  • 3 Wider­stän­de 220 Ω
  • Lei­tungs­dräh­te

Damit der Ultra­schall­sen­sor ord­nungs­ge­mäß arbei­ten kann, musst du ihn so ein­ste­cken, dass Sen­der und Emp­fän­ger nach vorn zei­gen, damit das Signal unge­hin­dert gesen­det und emp­fan­gen wer­den kann. Die Lei­tungs­dräh­te wer­den auf der Rück­sei­te eingesteckt.

Baue die Schal­tung auf.

(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Defi­nie­re die benö­tig­ten Varia­blen und lege die pin­Mo­des 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);
}

Ver­wen­de die ➨Funk­ti­onEnt­fer­nung­Mes­sen():

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 ➨Funk­ti­on Ampel­Schal­ten() sorgt dafür, dass die Ampel im fest­ge­leg­ten Rhyth­mus geschal­tet wird (rot/gelb → 1 Sekun­de, grün → 3 Sekun­den, 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();
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 8. Okt 2023 @ 15:45