Ультразвуковой датчик расстояния Roborace HC-SR04 поможет мобильным роботам определять расстояния до объектов, объезжать препятствия и строить карту помещения. Дальномер также выступит в роли сенсора уровня воды, детектора движения или триггерам в охранных системах.
 
Общие сведения
Ультразвуковой дальномер измеряет расстояние между датчиком и объектом с помощью эхолокации. Передатчик излучает ультразвуковую волну на частоте, неуловимой человеческим слухом. Достигая препятствие, сигнал отражается и возвращается на эхо-приёмник. Зная время, за которое звук проходит от передатчика до приемника, рассчитывается расстояние до объекта.
 
Элементы платы
 
Ультразвуковой передатчик и приёмник
На модуле расположена пара ультразвуковых преобразователей сигналов.
- Передатчик (Transmitter) AW8T40-16OA00предназначен для передачи ультразвуковых волн в окружающее пространство.
- Приёмник (Receive) AW8R40-16OA00предназначен для приёма отраженных ультразвуковых волн от предметов окружающего мира.
Ультразвуковой передатчик и приемник подключены к электронной обвязки модуля.
Электронная обвязка модуля
Электронная обвязка модуля выполнена на чипе CS100, который объединяет ультразвуковую схему передачи, ультразвуковую схему приёма и схему цифровой обработки. Для работы CS100 необходим кварцевый резонатор 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 | Датчик в режиме приёма звуковой волны. 
 | 0 | 1 | 
 
Рекомендуется выдерживать паузу не менее 50 мс между двумя измерениями, т.к. отражённая волна первого измерения может отразиться от удалённых объектов и стать причиной искажения результатов второго измерения.
Примеры работы с Arduino
Библиотеки
Для поиска расстояния до объекта, необходимо вручную посылать и контролировать время отклика импульса. Но вы можете не задумываться о временных рамках, мы написали целых три библиотеки для упрощения работы с датчиком. Каждая библиотека имеет преимущества и недостатки.
Посылка и приём импульсов происходит программно.
- 
    Преимущества:
    - Совместимость со всеми платами 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.
Что понадобится
Рекомендуем также обратить внимание на дополнительные расширения:
- Trema Shield поможет подключить дальномер к Arduino с помощью соединительных провода «мама-мама».
- ICSP-переходник поможет подключить дальномер к Arduino без проводов вовсе.
Схема устройства
Библиотека iarduino_HC_SR04 позволяет использовать для коммуникации с дальномером любые пины ввода-вывода. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 12 и 11.
// Назначаем пины датчика расстояния constexpr uint8_t PIN_SENSOR_TRIG = 12; constexpr uint8_t PIN_SENSOR_ECHO = 11;
 
Схема устройства с Trema Shield
 
Схема устройства через ICSP-переходник
При коммуникации дальномера через ICSP-переходник, используйте инициализацию пинов ECHO и TRIG приведённую ниже. Все подробности мы описали в отдельной статье по ICSP-переходнику.
// Назначаем пины датчика расстояния constexpr uint8_t PIN_SENSOR_TRIG = PIN_SPI_MISO; constexpr uint8_t PIN_SENSOR_ECHO = PIN_SPI_MOSI;
 
Программная настройка
Программный код
  // Библиотека для работы с дальномером
  #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.
Что понадобится
Рекомендуем также обратить внимание на дополнительные расширения:
- Trema Shield поможет подключить дальномер к Arduino с помощью соединительных провода «мама-мама».
- ICSP-переходник поможет подключить дальномер к Arduino без проводов вовсе.
Схема устройства
Библиотека iarduino_HC_SR04_tmr позволяет использовать для коммуникации с дальномером любые пины ввода-вывода. Для примера повесим контакты датчика расстояния TRIG и ECHO на пины контроллера 12 и 11.
// Назначаем пины датчика расстояния constexpr uint8_t PIN_SENSOR_TRIG = 12; constexpr uint8_t PIN_SENSOR_ECHO = 11;
 
Схема устройства с Trema Shield
 
Схема устройства через ICSP-переходник
При коммуникации дальномера через ICSP-переходник, используйте инициализацию пинов ECHO и TRIG приведённую ниже. Все подробности мы описали в отдельной статье по ICSP-переходнику.
// Назначаем пины датчика расстояния constexpr uint8_t PIN_SENSOR_TRIG = PIN_SPI_MISO; constexpr uint8_t PIN_SENSOR_ECHO = PIN_SPI_MOSI;
 
Программная настройка
Программный код
  // Библиотека для работы с дальномером
  #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;
 
Схема устройства с Trema Shield
 
Программная настройка
Программный код
  // Библиотека для работы с дальномером
  #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);
  }
Результат работы
После прошивки устройства, дальномер будем считывать расстояние до преграды и выводить в консоль.
Габаритный чертёж
 
Комплектация
- 1× Плата-модуль
Характеристики
- Модель: Ультразвуковой дальномер Roborace HC-SR04
- Напряжение питания Vcc: 3,3–5 В
- Напряжение логических уровней: 3,3–5 В
- Аппаратный интерфейс: 4×PLS
- Программный интерфейс: цифровой сигнал
- Диапазон измерений: 2–400 см
- Погрешность: 0,3 см
- Эффективный угол обзора: 15°
- Размеры: 68,5×23,4×20,4 мм
Ресурсы
- Ультразвуковой дальномер Roborace HC-SR04 в магазине
- Библиотека для Arduino «iarduino_HC_SR04»
- Библиотека для Arduino «iarduino_HC_SR04_tmr»
- Библиотека для Arduino «iarduino_HC_SR04_int»
- Datasheet на формулы и уравнения по дальномеру HC-SR04
- Datasheet на ультразвуковой передатчик AW8T40-16OA00 и приёмник AW8R40-16OA00

Обсуждение