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.
Sfida
MedioAggiungi 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 * 10ms, temporizzato conmillis() - 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);
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progetti
3Sensore di parcheggio
Sensore di parcheggio: distanzaSensore di parcheggio: luciSensore di parcheggio: segnali acusticiSensore di parcheggio: displayEsercitati da solo: Playground Arduino