Menu
CoddyTech

Czujnik parkowania: sygnały dźwiękowe

Część sekcji Projekty ścieżki Arduino w Coddy. Lekcja 11 z 24.

Czujnik parkowania nie tylko pokazuje, ale też informuje dźwiękiem: im bliżej ściany, tym szybciej pika, aż wydaje jeden ciągły dźwięk oznaczający „stop”. Brzęczyk jest podłączony do pinu 8.

Odstęp między piknięciami zależy od odległości: odległość pomnożona przez 10, w milisekundach. Przy 70 cm piknięcie co 700 ms, przy 20 cm co 200 ms. Timer millis() ustala, kiedy ma nastąpić następne piknięcie:

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // sygnał dźwiękowy trwający 50 ms
}

Są jeszcze dwa przypadki. Przy odległości poniżej 10 cm odtwórz tone(buzzerPin, 1000) bez określania czasu trwania: dźwięk będzie trwał, dopóki coś go nie zatrzyma. Przy odległości 100 cm lub większej zachowaj ciszę i wywołaj noTone(buzzerPin), aby zatrzymać również ciągły dźwięk pozostały z poprzedniego przypadku.

challenge icon

Wyzwanie

Średni

Dodaj sygnały dźwiękowe:

  • 100 cm lub więcej: brak dźwięku (wywołaj noTone())
  • od 10 do 99 cm: sygnał dźwiękowy o częstotliwości 1000 Hz i czasie trwania 50 ms co cm * 10 ms, odmierzanym za pomocą millis()
  • poniżej 10 cm: ciągły sygnał o częstotliwości 1000 Hz

Zachowaj światła i wyświetlanie. Naciśnij Run, przesuń obiekt bliżej, a następnie naciśnij Check.

Spróbuj swoich sił

// Czujnik odległości
const int trigPin = 9;
const int echoPin = 10;
// Światła ostrzegawcze
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// Wyślij impuls i zwróć odległość w cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Zielone, gdy droga wolna; żółte, gdy blisko; czerwone, gdy zbyt blisko.
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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Projekty

Poćwicz samodzielnie: Edytor online Arduino