Ультразвуковой датчик расстояния HC-SR04 поможет мобильным роботам определять расстояния до объектов, объезжать препятствия и строить карту помещения. Дальномер также выступит в роли сенсора уровня воды, детектора движения или триггерам в охранных системах.
Общие сведения
Ультразвуковой дальномер измеряет расстояние между датчиком и объектом с помощью эхолокации. Передатчик излучает ультразвуковую волну на частоте, неуловимой человеческим слухом. Достигая препятствие, сигнал отражается и возвращается на эхо-приёмник. Зная время, за которое звук проходит от передатчика до приемника, рассчитывается расстояние до объекта.
Элементы платы
Ультразвуковой передатчик и приёмник
На модуле расположена пара ультразвуковых преобразователей сигналов.
- Передатчик (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 |
Датчик в режиме приёма звуковой волны.
|
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× Плата-модуль
Характеристики
- Модель: Ультразвуковой дальномер HC-SR04
- Напряжение питания Vcc: 3,3–5 В
- Напряжение логических уровней: 3,3–5 В
- Аппаратный интерфейс: 4×PLS
- Программный интерфейс: цифровой сигнал
- Диапазон измерений: 2–400 см
- Погрешность: 0,3 см
- Эффективный угол обзора: 15°
Ресурсы
- Ультразвуковой дальномер HC-SR04 в магазине
- Библиотека для Arduino «iarduino_HC_SR04»
- Библиотека для Arduino «iarduino_HC_SR04_tmr»
- Библиотека для Arduino «iarduino_HC_SR04_int»
- Datasheet на формулы и уравнения по дальномеру HC-SR04
- Datasheet на ультразвуковой передатчик AW8T40-16OA00 и приёмник AW8R40-16OA00

Обсуждение