Парковочный датчик: звуковые сигналы
Часть раздела Проекты путешествия по Arduino на Coddy. Урок 11 из 24.
Парковочный датчик не только показывает, но и подаёт звуковой сигнал: чем ближе стена, тем чаще он пищит, пока не переходит на непрерывный тон, означающий «стоп». Зуммер подключён к выводу 8.
Интервал между сигналами зависит от расстояния: расстояние, умноженное на 10, в миллисекундах. На расстоянии 70 см сигнал звучит каждые 700 мс, на расстоянии 20 см — каждые 200 мс. Таймер millis() определяет, когда должен прозвучать следующий сигнал:
if (millis() - lastBeep >= cm * 10) {
lastBeep = millis();
tone(buzzerPin, 1000, 50); // звуковой сигнал длительностью 50 мс
}Есть ещё два случая. Если расстояние меньше 10 см, воспроизводите tone(buzzerPin, 1000) без указания длительности: сигнал будет звучать, пока что-нибудь его не остановит. При расстоянии 100 см или больше не подавайте сигнал и вызовите noTone(buzzerPin), чтобы также остановить непрерывный тон, оставшийся с предыдущего случая.
Задание
СреднеДобавь звуковые сигналы:
- 100 см или больше: без звука (вызови
noTone()) - от 10 до 99 см: сигнал длительностью 50 ms с частотой 1000 Hz каждые
cm * 10ms, рассчитанный с помощьюmillis() - меньше 10 см: непрерывный сигнал частотой 1000 Hz
Оставь световые сигналы и вывод на печать. Нажми Run, придвинь объект ближе, затем нажми Check.
Попробуйте сами
// Датчик расстояния
const int trigPin = 9;
const int echoPin = 10;
// Предупреждающие световые индикаторы
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// Отправить импульс и вернуть расстояние в cm.
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// Зелёный, когда путь свободен, жёлтый, когда близко, красный, когда слишком близко.
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);
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проекты
3Парковочный датчик
Парковочный датчик: расстояниеПарковочный датчик: световые сигналыПарковочный датчик: звуковые сигналыПарковочный датчик: дисплейПотренируйтесь самостоятельно: Песочница Arduino