СИСТЕМА ПАРКОВКИ 🚗
БАЗОВАЯ РЕАЛИЗАЦИЯ
Логика работы:
3 УЗ-датчика постоянно измеряют расстояния:
- Левый: левая сторона автомобиля
- Правый: правая сторона
- Задний: задний бампер
Система анализирует КРИТИЧЕСКОЕ расстояние:
Зеленый (>50см) - безопасно
Желтый (20-50см) - внимание
Красный (<20см) - опасно!
Зуммер: частота писка увеличивается при приближении
Компоненты:
- ✅ УЗ-датчики HC-SR04 - 3 шт
- ✅ Светодиоды: зеленый, желтый, красный
- ✅ Зуммер (пищалка)
- ✅ Резисторы 220 Ом - 3 шт
- ✅ Arduino Uno + макетка + провода
- ✅ Дополнительно: переключатель режимов
Схема подключения:
УЗ-датчик ЛЕВЫЙ:
VCC → 5V, GND → GND, Trig → 2, Echo → 3
УЗ-датчик ПРАВЫЙ:
VCC → 5V, GND → GND, Trig → 4, Echo → 5
УЗ-датчик ЗАДНИЙ:
VCC → 5V, GND → GND, Trig → 6, Echo → 7
Светодиоды:
Зеленый → 8 → резистор → GND
Желтый → 9 → резистор → GND
Красный → 10 → резистор → GND
Зуммер:
+ → 11, - → GND
ЛОГИКА РАБОТЫ 🔄
Псевдокод для обсуждения:
// ИНИЦИАЛИЗАЦИЯ:
пороги: БЕЗОПАСНО = 50, ВНИМАНИЕ = 20, ОПАСНО = 10
// ОСНОВНОЙ ЦИКЛ:
измеряем_расстояния_со_всех_датчиков()
находим_минимальное_расстояние()
определяем_уровень_опасности(минимальное_расстояние)
включаем_соответствующий_светодиод()
управляем_зуммером(минимальное_расстояние)
выводим_информацию_в_serial(опционально)
ДЕТАЛЬНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМОВ ⚡
Координация множества датчиков:
// Чтобы датчики не мешали друг другу
void measureAllSensors() {
leftDistance = getDistance(LEFT_TRIG, LEFT_ECHO);
delay(30); // пауза между измерениями
rightDistance = getDistance(RIGHT_TRIG, RIGHT_ECHO);
delay(30);
backDistance = getDistance(BACK_TRIG, BACK_ECHO);
delay(30);
}
// Функция измерения для одного датчика
long getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2; // преобразуем в см
}
Система принятия решений:
int determineDangerLevel() {
int minDist = min(leftDistance, min(rightDistance, backDistance));
if (minDist > SAFE_DISTANCE) {
return SAFE;
} else if (minDist > WARNING_DISTANCE) {
return WARNING;
} else {
return DANGER;
}
}
Прогрессивное управление зуммером:
void controlBuzzer(int dangerLevel, int minDistance) {
switch(dangerLevel) {
case SAFE:
noTone(BUZZER_PIN);
break;
case WARNING:
// Медленное пищание
if (millis() - lastBeep > 500) {
tone(BUZZER_PIN, 1000, 100);
lastBeep = millis();
}
break;
case DANGER:
// Быстрое пищание, частота зависит от расстояния
int beepInterval = map(minDistance, 5, 20, 50, 200);
if (millis() - lastBeep > beepInterval) {
tone(BUZZER_PIN, 1500, 50);
lastBeep = millis();
}
break;
}
}
УСЛОЖНЕНИЯ И ВАРИАЦИИ 🎛️
1. Режим “Боковая парковка”:
// Особый режим для параллельной парковки
void sideParkingMode() {
// Левый и правый датчики более важны
int sideMin = min(leftDistance, rightDistance);
int dangerLevel = determineDangerLevel(sideMin);
// Задний датчик используется только для общего контроля
if (backDistance < 10) {
dangerLevel = max(dangerLevel, DANGER);
}
}
2. Визуализация на дисплее:
// Добавляем LCD для детальной информации
void displayParkingInfo() {
lcd.clear();
lcd.print("L:");
lcd.print(leftDistance);
lcd.print(" R:");
lcd.print(rightDistance);
lcd.setCursor(0, 1);
lcd.print("B:");
lcd.print(backDistance);
lcd.print(" Min:");
lcd.print(minDistance);
}
3. “Умный” анализ траектории:
// Анализ не только текущих расстояний, но и трендов
void analyzeMovement() {
// Если расстояния УМЕНЬШАЮТСЯ - движение к препятствию
if (currentMin < previousMin) {
dangerLevel = increaseDanger(dangerLevel);
}
// Если расстояния УВЕЛИЧИВАЮТСЯ - движение от препятствий
else if (currentMin > previousMin) {
dangerLevel = decreaseDanger(dangerLevel);
}
previousMin = currentMin;
}
ОЛИМПИАДНАЯ СВЯЗЬ 🏆
СВЯЗЬ С РЕАЛЬНЫМИ ОЛИМПИАДНЫМИ ЗАДАНИЯМИ:
// Аналогично системе контроля стаканов из 7-8 классов:
"Устройство должно различать уровень жидкости в стакане"
→ А здесь: "Система должна различать уровни приближения"
// Аналогично многокнопочным системам из 10-11 классов:
"Обработка множественных входных сигналов и сложная логика реакций"
Критерии успеха в олимпиадах:
- ✅ Стабильная работа всех датчиков - нет конфликтов измерений
- ✅ Корректная логика принятия решений - адекватная реакция на ситуацию
- ✅ Прогрессивная эскалация - плавное усиление предупреждений
- ✅ Обработка edge cases - что делать при неисправности датчика?
Типичные олимпиадные ошибки:
- ❌ Конфликт измерений - датчики мешают друг другу
- ❌ Нереактивная система - медленная обработка изменений
- ❌ Бинарное мышление - только “есть/нет” вместо градаций
- ❌ Отсутствие диагностики - не видно, какой датчик работает
МЕТОДИЧЕСКИЕ СОВЕТЫ 👨🏫
Поэтапная реализация:
// ЭТАП 1: Один датчик + один светодиод
distance = getDistance(trigPin, echoPin);
if (distance < 20) digitalWrite(LED_PIN, HIGH);
// ЭТАП 2: Три датчика + приоритизация
minDistance = min(left, min(right, back));
dangerLevel = getDangerLevel(minDistance);
// ЭТАП 3: Прогрессивная индикация
setLeds(dangerLevel);
controlBuzzer(dangerLevel, minDistance);
// ЭТАП 4: Диагностика и надежность
if (sensorFailed()) {
enableBackupMode();
showErrorIndicator();
}
Визуализация для понимания:
🚗 Система парковки:
Датчики: [ЛЕВОЙ: 35см] [ПРАВЫЙ: 15см] [ЗАДНИЙ: 80см]
Анализ: Минимальное = 15см (правый)
Реакция: 🟡 Желтый свет + 🎵 Средняя частота писка
Логика:
>50см: 🟢 Безопасно (тихо)
20-50см: 🟡 Внимание (редкие писки)
<20см: 🔴 Опасно! (частые писки)
Практические упражнения:
Упражнение 1: “Калибровка чувствительности”
- Найти оптимальные пороги для разных сценариев парковки
- Поэкспериментировать с разными интервалами писка зуммера
- Настроить систему под конкретные условия использования
Упражнение 2: “Диагностика системы”
- Создать режим тестирования датчиков
- Визуализировать работу каждого датчика отдельно
- Реализовать систему оповещения о неисправностях
Упражнение 3: “Адаптивные алгоритмы”
- Сделать систему обучаемой - запоминание типичных сценариев
- Реализовать “ночной режим” с уменьшенной громкостью
- Добавить “режим гаража” с особыми настройками
Диагностика проблем:
- Датчики показывают некорректные значения → проверьте питание и заземление
- Зуммер не работает → убедитесь, что используете tone() вместо digitalWrite()
- Светодиоды мерцают → оптимизируйте временные интервалы измерений
- Система “зависает” → добавьте watchdog таймер
Критерии оценки проекта:
- 4 балла - стабильная работа всех трех датчиков
- +2 балла - корректная прогрессивная система предупреждений
- +2 балла - надежная работа с обработкой ошибок
- +2 балла - дополнительные режимы и диагностика
РЕАЛЬНОЕ ПРИМЕНЕНИЕ 🏭
Где это используется:
- Автомобильные парковочные системы - серийно устанавливаются в машины
- Складская техника - предотвращение столкновений погрузчиков
- Робототехника - навигация и избегание препятствий
- Промышленная автоматика - контроль безопасных расстояний
Профессиональные аналоги:
- Системы мониторинга слепых зон в автомобилях
- Датчики приближения в лифтах и автоматических дверях
- Системы предотвращения столкновений в дронах
- Контроль габаритов в промышленных роботах