Ультразвуковой датчик расстояния 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
Обсуждение