КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Ультразвуковой дальномер HC-SR04: руководство по использованию

Ультразвуковой датчик расстояния HC-SR04 поможет мобильным роботам определять расстояния до объектов, объезжать препятствия и строить карту помещения. Дальномер также выступит в роли сенсора уровня воды, детектора движения или триггерам в охранных системах.

Sensor Proximity HC-SR04 Info 1

Общие сведения

Ультразвуковой дальномер измеряет расстояние между датчиком и объектом с помощью эхолокации. Передатчик излучает ультразвуковую волну на частоте, неуловимой человеческим слухом. Достигая препятствие, сигнал отражается и возвращается на эхо-приёмник. Зная время, за которое звук проходит от передатчика до приемника, рассчитывается расстояние до объекта.

Sensor Proximity HC-SR04 Info 2

Элементы платы

Sensor Proximity HC-SR04 Annotation

Ультразвуковой передатчик и приёмник

На модуле расположена пара ультразвуковых преобразователей сигналов.

  • Передатчик (Transmitter) AW8T40-16OA00 предназначен для передачи ультразвуковых волн в окружающее пространство.
  • Приёмник (Receive) AW8R40-16OA00 предназначен для приёма отраженных ультразвуковых волн от предметов окружающего мира.

Ультразвуковой передатчик и приемник подключены к электронной обвязки модуля.

Электронная обвязка модуля

Электронная обвязка модуля выполнена на трёх чипах MAX232, LM324 и EM78P153S. На плате также распаян кварцевый резонатор на 8 МГц и обвязка из конденсаторов и резисторов.

Контакты подключения

Датчик расстояния подключается к управляющей электронике через группу из четырёх контактов.

Контакт Функция Подключение
GND Земля Подключите к земле микроконтроллера.
ECHO Контакт приёма сигнала Подключите к пину ввода-вывода микроконтроллера.
TRIG Контакт отправки сигнала Подключите к пину ввода-вывода микроконтроллера.
VCC Питание Подключите к питанию микроконтроллера.

Подробности работы

Давайте ещё раз более детально рассмотрим принцип работы ультразвукового дальномера.

Фаза Действие Линия TRIG Линия ECHO
0 Датчик в режиме ожидания. 0 0
1 Подайте стартовый импульс с внешнего контроллера на линию TRIG длительностью 10 мкс. 1 0
2 Датчик в режиме посылки звуковой волны. Через 250 мск датчик сгенерирует восемь импульсов на ультразвуковой передатчик (Transmitter). 0 0
3 Датчик в режиме приёма звуковой волны. По спаду последнего из восьми сгенерированных импульсов на передатчик, датчик устанавливает высокий уровень на линии ECHO и входит в режим приёма получения отраженной волны на ультразвуковой приёмник (Receive). 0 1
4 Датчик в режиме приёма звуковой волны.
  • Если отражённая волна пришла на приёмник (Receive): после получения последнего импульса волны, датчик переходит в режим ожидания и устанавливает низкий уровень на линии ECHO. Время наличия высокого уровня на линии ECHO равно времени прохождения ультразвуковой волны от датчика до препятствия и обратно.
  • Если в течении 38 мс датчик не принял отраженную волну: датчик переходит в режим ожидания и устанавливает высокий уровень на линии ECHO.
0 1
Sensor Proximity HC-SR04 Info 2

Рекомендуется выдерживать паузу не менее 50 мс между двумя измерениями, т.к. отражённая волна первого измерения может отразиться от удалённых объектов и стать причиной искажения результатов второго измерения.

Но вы можете не задумываться о временных рамках, мы написали различные библиотеки для упрощения работы с датчиком.
А для фанатов физики, мы подготовили подробный Datasheet с уравнениями и формулами.

Примеры работы с Arduino

Библиотеки

Для поиска расстояния до объекта, необходимо вручную посылать и контролировать время отклика импульса. Но вы можете не задумываться о временных рамках, мы написали целых три библиотеки для упрощения работы с датчиком. Каждая библиотека имеет преимущества и недостатки.

Библиотека iarduino_HC_SR04

Посылка и приём импульсов происходит программно.

  • Преимущества:
    • Совместимость со всеми платами Arduino.
    • Дальномер можно подключать к любым выводам Arduino.
  • Недостатки:
    • Библиотека ждёт ответа от датчика, который может длиться до 38 мс.

Библиотека iarduino_HC_SR04_tmr

Посылка и приём импульсов происходит через аппаратный таймер — Timer2.

  • Преимущество:
    • Библиотека не ждёт ответа от датчика, который может длиться до 38 мс.
  • Недостатки:
    • Совместимость только с платами Arduino с ядром AVR: Uno, Leonardo, Mega, Nano и их аналоги.
    • Нельзя использовать ШИМ на контактах: 3 и 11
    • Нельзя подключить более четырёх дальномеров.
    • Нельзя работать с библиотеками которые так же используют аппаратный таймер — Timer2.

Библиотека iarduino_HC_SR04_int

Посылка и приём импульсов происходит через аппаратные прерывания.

  • Преимущество:
    • Библиотека не ждёт ответа от датчика, который может длиться до 38 мс.
  • Недостатки:
    • Совместимость только с платами Arduino, которые поддерживают прерывания.
    • Контакт ECHO нужно подключать только к тем выводам Arduino, которые поддерживают внешние прерывания. Контакт TRIG можно подключать к любому выводу Arduino.
    • Количество подключаемых датчиков ограничено количеством выводов с прерыванием.
На каждой плате распиновка и количество прерываний отличается между собой. Для справки читайте официальную документацию от производителя.

Рассмотрим по одному примеру для каждой библиотеки.

Пример работы с iarduino_HC_SR04

Библиотека iarduino_HC_SR04 позволяет использовать любые платы Arduino. Для примера возьмём контроллер Arduino Uno.

Что понадобится

Рекомендуем также обратить внимание на дополнительные расширения:

Схема устройства

Библиотека iarduino_HC_SR04 позволяет использовать для коммуникации с дальномером любые пины ввода-вывода. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 12 и 11.

  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = 12;
  constexpr uint8_t PIN_SENSOR_ECHO = 11;
Sensor Proximity HC-SR04 Wiring 1.1

Схема устройства с Trema Shield

Sensor Proximity HC-SR04 Wiring 1.2

Схема устройства через ICSP-переходник

При коммуникации дальномера через ICSP-переходник, используйте инициализацию пинов ECHO и TRIG приведённую ниже. Все подробности мы описали в отдельной статье по ICSP-переходнику.

  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = PIN_SPI_MISO;
  constexpr uint8_t PIN_SENSOR_ECHO = PIN_SPI_MOSI;
Sensor Proximity HC-SR04 Wiring 1.3

Программная настройка

Программный код

  // Библиотека для работы с дальномером
  #include <iarduino_HC_SR04.h>
  
  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = 12;
  constexpr uint8_t PIN_SENSOR_ECHO = 11;
  
  // Создаем объект для работы с дальномером
  // и передаем в него пины TRIG и ECHO
  iarduino_HC_SR04 sensor(PIN_SENSOR_TRIG, PIN_SENSOR_ECHO);
  
  void setup(){
    // Открываем Serial-порт
    Serial.begin(9600);
  }
  
  void loop(){
    // Вычисляем расстояние до объекта
    int sensorDistance = sensor.distance();
    // Выводим расстояние в Serial-порт
    Serial.print(sensorDistance);
    Serial.println(" cm"); 
    // Ждём 100 мс
    delay(100);
  }

Результат работы

После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.

Пример работы с iarduino_HC_SR04_tmr

Библиотека iarduino_HC_SR04_tmr позволяет использовать только Arduino с ядром AVR. Для примера возьмём контроллер Arduino Uno.

Что понадобится

Рекомендуем также обратить внимание на дополнительные расширения:

Схема устройства

Библиотека iarduino_HC_SR04_tmr позволяет использовать для коммуникации с дальномером любые пины ввода-вывода. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 12 и 11.

  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = 12;
  constexpr uint8_t PIN_SENSOR_ECHO = 11;
Sensor Proximity HC-SR04 Wiring 2.1

Схема устройства с Trema Shield

Sensor Proximity HC-SR04 Wiring 2.2

Схема устройства через ICSP-переходник

При коммуникации дальномера через ICSP-переходник, используйте инициализацию пинов ECHO и TRIG приведённую ниже. Все подробности мы описали в отдельной статье по ICSP-переходнику.

  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = PIN_SPI_MISO;
  constexpr uint8_t PIN_SENSOR_ECHO = PIN_SPI_MOSI;
Sensor Proximity HC-SR04 Wiring 2.3

Программная настройка

Программный код

  // Библиотека для работы с дальномером
  #include <iarduino_HC_SR04_tmr.h>
  
  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = 12;
  constexpr uint8_t PIN_SENSOR_ECHO = 11;
  
  // Создаем объект для работы с дальномером
  // и передаем в него пины TRIG и ECHO
  iarduino_HC_SR04_tmr sensor(PIN_SENSOR_TRIG, PIN_SENSOR_ECHO);
  
  void setup(){
    // Открываем Serial-порт
    Serial.begin(9600);
    // Инициируем работу с датчиком
    sensor.begin();
  }
  
  void loop(){
    // Вычисляем расстояние до объекта
    int sensorDistance = sensor.distance();
    // Выводим расстояние в Serial-порт
    Serial.print(sensorDistance);
    Serial.println(" cm"); 
    // Ждём 100 мс
    delay(100);
  }

Результат работы

После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.

Пример работы с iarduino_HC_SR04_int

Библиотека iarduino_HC_SR04_int позволяет использовать платы Arduino с поддержкой внешних прерываний. Для примера возьмём контроллер Arduino Uno.

Что понадобится

Рекомендуем также обратить внимание на дополнительную плату расширения Trema Shield, которая поможет подключить дальномер к Arduino с помощью соединительных провода «мама-мама».

Схема устройства

Библиотека iarduino_HC_SR04_int позволяет на пин TRIG вешать любой контакт ввода-вывода, а на пин ECHO требует контакт с поддержкой внешнего прерывания. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 3 и 2.

  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = 3;
  constexpr uint8_t PIN_SENSOR_ECHO = 2;
Sensor Proximity HC-SR04 Wiring 3.1

Схема устройства с Trema Shield

Sensor Proximity HC-SR04 Wiring 3.2

Программная настройка

Программный код

  // Библиотека для работы с дальномером
  #include <iarduino_HC_SR04_int.h>
  
  // Назначаем пины датчика расстояния
  constexpr uint8_t PIN_SENSOR_TRIG = 3;
  constexpr uint8_t PIN_SENSOR_ECHO = 2;
  
  // Создаем объект для работы с дальномером
  // и передаем в него пины TRIG и ECHO
  iarduino_HC_SR04_int sensor(PIN_SENSOR_TRIG, PIN_SENSOR_ECHO);
  
  void setup(){
    // Открываем Serial-порт
    Serial.begin(9600);
  }
  
  void loop(){
    // Вычисляем расстояние до объекта
    int sensorDistance = sensor.distance();
    // Выводим расстояние в Serial-порт
    Serial.print(sensorDistance);
    Serial.println(" cm"); 
    // Ждём 100 мс
    delay(100);
  }

Результат работы

После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.

Габаритный чертёж

Sensor Proximity HC-SR04 Dimensions

Комплектация

  • 1× Плата-модуль

Характеристики

  • Модель: Ультразвуковой дальномер HC-SR04
  • Напряжение питания Vcc: 3,3–5 В
  • Напряжение логических уровней: 3,3–5 В
  • Аппаратный интерфейс: 4×PLS
  • Программный интерфейс: цифровой сигнал
  • Диапазон измерений: 2–400 см
  • Погрешность: 0,3 см
  • Эффективный угол обзора: 15°

Ресурсы




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями