4.05.2. Лабораторная работа №4.5.2.md


Парктроник

Тема работы

В прошлой работе мы научили Рудирон «петь», генерируя сигналы. Теперь давайте научимся «слушать» мир вокруг нас, используя не свет или температуру, а звук! В этой лабораторной работе мы познакомимся с ультразвуковым дальномером HC-SR04 — устройством, которое измеряет расстояние до объектов с помощью звуковых волн. Мы напишем программу, которая превратит Рудирон в настоящий автомобильный парктроник с цветовой индикацией.

Цель

  • Понять принцип работы и ограничения ультразвукового дальномера HC-SR04.
  • Научиться измерять длительность импульсов с помощью функции pulseIn().
  • Преобразовывать время в расстояние, используя простые физические формулы.
  • Создать полноценное устройство с обратной связью — парктроник.

Оборудование и материалы

  • Отладочная плата Рудирон.
  • Макетная плата.
  • Ультразвуковой дальномер.
  • RGB-светодиод с общим катодом.
  • 3 резистора номиналом 220 Ом.
  • 4 соединительных провода.
  • USB-кабель для подключения Рудирона.
  • Компьютер с Arduino IDE.

Ход работы

  1. Как работает HC-SR04 и его особенности?

    Ультразвуковой дальномер работает по тому же принципу, что и эхолот на корабле или летучая мышь, ориентирующаяся в темноте. 1. Излучение. Рудирон даёт команду, и передатчик (Trig) датчика отправляет короткую пачку ультразвуковых импульсов. 2. Отражение. Звуковая волна летит до препятствия, отражается от него и возвращается назад. 3. Приём. Приёмник (Echo) датчика улавливает отражённый сигнал. 4. Измерение. На выходе Echo появляется цифровой импульс HIGH, длительность которого прямо пропорциональна времени, которое звук летел до препятствия и обратно.

    Рис. 1. Принцип работы HC-SR04

    Важные особенности HC-SR04, которые нужно знать:

    • Угол обзора. Датчик излучает звук не тонким лучом, а конусом с углом примерно 30-60 градусов. Это значит, что он может среагировать не на тот объект, который прямо перед ним, а на ближайший объект внутри этого конуса.
    • Поглощение звука. Ультразвук хорошо отражается от твёрдых и гладких поверхностей (стена, книга, пластик), но очень плохо отражается от мягких и ворсистых материалов (одежда, шторы, ковёр, мягкие игрушки). Они поглощают звук, и датчик может их просто «не услышать».
    • Эффективная дальность. Производитель заявляет дальность до 4 метров, но на практике надёжные измерения получаются в диапазоне от 2 см до ~3 метров. На больших расстояниях точность падает, и могут появляться случайные показания.
  2. Сборка схемы

    • Подключите RGB-светодиод. Красный, зелёный и синий выводы (через резисторы 220 Ом) подключите к ШИМ-пинам 8, 7, 5. Общий катод — к GND.
    • Подключите HC-SR04:
      • Вывод VCC — к пину 5V.
      • Вывод GND — к GND.
      • Вывод Trig (триггер) — к пину 3.
      • Вывод Echo (эхо) — к пину 1.

    Рис. 2. Схема подключения HC-SR04 и RGB-светодиода

  3. Написание и загрузка кода

    • Установите перемычку PRG | RUN в положение PRG.
    • В Arduino IDE введите следующий код:

      // Пины для датчика HC-SR04
      const int trigPin = 3;
      const int echoPin = 1;
      
      // Пины для RGB-светодиода
      const int redPin = 8;
      const int greenPin = 7;
      const int bluePin = 5;
      
      void setup() {
        Serial.begin(9600); // Для отладки
        pinMode(trigPin, OUTPUT);
        pinMode(echoPin, INPUT);
        pinMode(redPin, OUTPUT);
        pinMode(greenPin, OUTPUT);
        pinMode(bluePin, OUTPUT);
      }
      
      // Функция для установки цвета
      void setColor(int r, int g, int b) {
        analogWrite(redPin, r);
        analogWrite(greenPin, g);
        analogWrite(bluePin, b);
      }
      
      void loop() {
        // 1. Отправляем инициирующий импульс на Trig
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
      
        // 2. Измеряем длительность ответного импульса на Echo
        long duration = pulseIn(echoPin, HIGH);
      
        // 3. Рассчитываем расстояние в сантиметрах
        // Скорость звука ~343 м/с или 0.0343 см/мкс.
        // Делим на 2, так как звук проходит путь туда и обратно.
        int distance = duration * 0.0343 / 2;
      
        Serial.print("Расстояние: ");
        Serial.print(distance);
        Serial.println(" см");
      
        // 4. Устанавливаем цвет в зависимости от расстояния
        if (distance > 0 && distance <= 20) {
        setColor(255, 0, 0); // Красный - Опасно!
        } else if (distance > 20 && distance <= 40) {
        setColor(255, 255, 0); // Жёлтый - Внимание!
        } else if (distance > 40 && distance <= 60) {
        setColor(0, 255, 0); // Зелёный - Безопасно
        } else {
        setColor(0, 0, 0); // Выключен - далеко или ошибка
        }
      
        delay(100); // Пауза между измерениями
      }
      
    • Нажмите кнопку «Upload», чтобы загрузить код на плату.
  4. Проверка работы

    • Откройте монитор порта, чтобы видеть точные значения расстояния.
    • Возьмите какой-нибудь твёрдый предмет (например, книгу) и подносите его к датчику.
    • Вы увидите, как RGB-светодиод меняет цвет в зависимости от расстояния: зелёный, жёлтый, красный.
    • Попробуйте направить датчик на мягкую ткань или штору. Скорее всего, он покажет очень большое или нулевое расстояние, даже если ткань находится близко.

Результаты

Вы создали полноценный парктроник! Ваше устройство измеряет расстояние до объекта в реальном времени и предоставляет пользователю интуитивно понятную цветовую индикацию опасности, учитывая при этом физические ограничения датчика.

Анализ результатов

  • pulseIn(echoPin, HIGH). Это сердце нашего дальномера. Функция ждёт, пока на пине Echo появится HIGH, измеряет, как долго он длится, и возвращает это время в микросекундах.
  • int distance = duration * 0.0343 / 2;. Ключевая формула. Мы умножаем время полёта звука на его скорость (0.0343 см/мкс) и делим на 2, потому что звук проходит двойной путь (туда и обратно).
  • if (distance > 0 && ...). Мы добавили проверку distance > 0, чтобы отсечь ошибочные показания, когда датчик не видит препятствия.

Выводы

В этой лабораторной работе вы научились работать с ультразвуковым дальномером HC-SR04. Вы освоили практическое применение функции pulseIn() и научились преобразовывать физические величины (время) в полезную информацию (расстояние). Самое главное, вы поняли, что у любого датчика есть свои ограничения, которые важно учитывать при проектировании проектов.

Вопросы для самопроверки

  1. Как работает ультразвуковой дальномер?
  2. Зачем в формуле расчёта расстояния мы делим время на 2?
  3. Почему датчик HC-SR04 может не «увидеть» мягкий свитер?
  4. Что произойдёт, если поменять местами провода Trig и Echo?
  5. Как изменить код, чтобы при расстоянии менее 10 см светодиод не просто горел красным, а быстро мигал?

Вы научились измерять расстояние с помощью звука! В следующем параграфе мы познакомимся с аппаратными прерываниями — мощным инструментом, который позволяет микроконтроллеру мгновенно реагировать на внешние события.