Menu
CoddyTech

Sensore di parcheggio: segnali acustici

Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 11 di 24.

Un sensore di parcheggio parla oltre a mostrare: più il muro è vicino, più velocemente emette dei beep, finché mantiene un tono continuo che significa fermarsi. Il buzzer è sul pin 8.

L'intervallo tra i beep dipende dalla distanza: la distanza moltiplicata per 10, in millisecondi. A 70 cm un beep ogni 700 ms, a 20 cm ogni 200 ms. Un timer millis() decide quando deve arrivare il beep successivo:

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // un bip di 50 ms
}

Ci sono altri due casi. Sotto i 10 cm, riproduci tone(buzzerPin, 1000) senza durata: suona finché qualcosa non lo ferma. A 100 cm o più, resta in silenzio e chiama noTone(buzzerPin) così viene fermato anche un eventuale tono continuo rimasto da prima.

challenge icon

Sfida

Medio

Aggiungi i segnali acustici:

  • 100 cm o più: nessun suono (chiama noTone())
  • Da 10 a 99 cm: un segnale acustico di 50 ms a 1000 Hz ogni cm * 10 ms, temporizzato con millis()
  • Meno di 10 cm: un tono continuo a 1000 Hz

Mantieni le luci e la stampa. Premi Run, avvicina l’oggetto, poi premi Check.

Provalo tu

// Il sensore di distanza
const int trigPin = 9;
const int echoPin = 10;
// Le spie di avvertimento
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// Invia un impulso e restituisce la distanza in cm.
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// Verde quando la distanza è sicura, giallo quando è ridotta, rosso quando è troppo ridotta.
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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Progetti

Esercitati da solo: Playground Arduino