Ampel mit Ultra­schall­sen­sor schalten

Lese­zeit: 4 Minu­ten
Seite als PDF
Navi­ga­ti­on

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 > 100 Ω
  • 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 Variablen:

// Senden und Empfangen 
# define Senden 8
# define Echo 9

// 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­nungMes­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 ➨Metho­de 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: 5. Apr 2021 @ 18:24