Menu
CoddyTech

Einparkhilfe: Signaltöne

Teil des Abschnitts Projekte der Arduino-Journey von Coddy. Lektion 11 von 24.

Ein Parksensor spricht und zeigt zugleich an: Je näher die Wand, desto schneller piept er, bis er einen gleichbleibenden Ton hält, der Stopp bedeutet. Der Summer ist an Pin 8 angeschlossen.

Der Abstand zwischen den Pieptönen ergibt sich aus der Entfernung: die Entfernung mal 10, in Millisekunden. Bei 70 cm ein Piepton alle 700 ms, bei 20 cm alle 200 ms. Ein millis()-Timer entscheidet, wann der nächste Piepton fällig ist:

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // ein 50 ms langer Piepton
}

Es gibt noch zwei weitere Fälle. Unter 10 cm spiele tone(buzzerPin, 1000) ohne Dauerangabe ab: Der Ton ertönt, bis ihn etwas stoppt. Bei 100 cm oder mehr bleibst du ruhig und rufst noTone(buzzerPin) auf, damit auch ein noch anhaltender Ton von zuvor gestoppt wird.

challenge icon

Aufgabe

Mittel

Füge die Signaltöne hinzu:

  • 100 cm oder mehr: kein Ton (noTone() aufrufen)
  • 10 bis 99 cm: alle cm * 10 ms, zeitgesteuert mit millis(), ein 50-ms-Signalton mit 1000 Hz
  • unter 10 cm: ein gleichmäßiger Ton mit 1000 Hz

Behalte die Lichter und die Ausgabe bei. Drücke Run, bewege das Objekt näher heran und klicke dann auf Check.

Probier es selbst

// Der Abstandssensor
const int trigPin = 9;
const int echoPin = 10;
// Die Warnleuchten
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// Sende einen Ping und gib den Abstand in cm zurück.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Grün bei ausreichend Abstand, Gelb bei geringem Abstand, Rot bei zu geringem Abstand.
void showLights(long cm) {
  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(redPin, LOW);
  if (cm >= 100) {
    digitalWrite(greenPin, HIGH);
  } else if (cm >= 30) {
    digitalWrite(yellowPin, HIGH);
  } else {
    digitalWrite(redPin, HIGH);
  }
}

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long cm = readDistance();
  Serial.println(cm);
  showLights(cm);
  delay(100);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Projekte

Übe selbstständig: Arduino-Playground