Описание
Библиотека для получения расстояния до объекта с помощью ультразвуковых датчиков семейства HC-SR04.
Поддерживаемые модели
- Ультразвуковой датчик расстояния HC-SR04 / Документация
- Ультразвуковой датчик расстояния Roborace HC-SR04 / Документация
Подробности
Библиотека отправляет стартовый импульс датчику, а время ответа преобразует в расстояние. Посылка и приём импульсов происходит через аппаратный таймер — Timer2, поэтому выполнение кода скетча не приостанавливается на время ожидания сигнала ответа от датчика, которое может достигать 38 мс.
Посылка и приём импульсов происходит через аппаратный таймер — Timer2.
-
Преимущество:
- Библиотека не ждёт ответа от датчика, который может длиться до 38 мс.
-
Недостатки:
- Совместимость только с платами Arduino с ядром AVR: Uno, Leonardo, Mega, Nano и их аналоги.
- Нельзя использовать ШИМ на контактах:
3и11 - Нельзя подключить более четырёх дальномеров.
- Нельзя работать с библиотеками которые так же используют аппаратный таймер —
Timer2.
Если ограничения данной библиотеки вас не устраивают, воспользуйтесь другими нашими библиотеками:
-
Библиотека
iarduino_HC_SR04: ожидает ответ от датчика в режиме реального времени. -
Библиотека
iarduino_HC_SR04_int: использует внешнее прерывание и не будет ждать ответа от датчика.
Установка
Для старта скачайте и установите библиотеку iarduino_HC_SR04_tmr. Для инсталляции рекомендуем использовать нашу инструкцию по установке библиотек для Arduino.
Использование в коде
Подключение
- Назначение: подключение библиотеки.
- Синтаксис:
#include <iarduino_HC_SR04_tmr.h> -
Примечания:
- Библиотека подключается в самом начале программы.
- Подключение библиотеки обязательное действие, иначе функции работать не будут.
- Примеры:
// Подключаем библиотеку для работы с дальномером HC-SR04
#include <iarduino_HC_SR04_tmr.h>
Конструктор
- Назначение: создание объекта для работы с функциями библиотеки
iarduino_HC_SR04_tmr - Синтаксис:
iarduino_HC_SR04_tmr sensor(uint8_t pinTRIG, uint8_t pinECHO) -
Параметры:
pinTRIG: пин отправки сигнала с дальномера на внешний контроллер.pinECHO: пин приёма сигнала с внешнего контроллера на дальномер.
- Возвращаемое значение: нет
-
Примечания:
- Конструктор вызывается в самом начале программы.
- Вызов конструктор обязателен, иначе функции работать не будут.
- Можно использовать любые пины ввода-вывода.
- Пример:
// Создаём объект sensor для работы с функциями библиотеки iarduino_HC_SR04_tmr
// В параметре конструктора передаём пины TRIG и ECHO
iarduino_HC_SR04_tmr sensor(12, 11);
Функция begin()
- Назначение: инициирует работу с датчиком.
- Синтаксис:
void begin(uint16_t time = 50) - Параметры:
time: период опроса датчика от50до3000мс. Необязательный параметр и по умолчанию равен50мс.- Возвращаемое значение: нет
- Примечания: метод достаточно вызывать один раз в функции
setup(). - Примеры:
// Инициируем работу с датчиком
// Период опроса датчика оставляем по умолчанию 50 мс
sensor.begin();
// Инициируем работу с датчиком
// Период опроса датчика устанавливаем 1000 мс
sensor.begin(1000);
Функция work()
- Назначение: выключает и включает опрос датчика таймером.
- Синтаксис:
void work(bool state) -
Параметры:
-
state:true: включает опрос датчикаfalse: выключает опрос датчика
-
- Возвращаемое значение: нет
-
Примечания:
- По умолчанию опрос датчика включён.
- Если установить несколько дальномеров рядом, звуковая волна отправленная одним датчиком может быть принята другим датчиком, что в итоге может исказить показания. Функция
work()позволяет опрашивать несколько дальномеров поочереди, предотвратив пересечение их звуковых волн.
- Примеры:
// Включаем опрос датчика
sensor.work(true);
// Выключаем опрос датчика
sensor.work(false);
Функция distance()
- Назначение: Возвращает расстояние до препятствия в см.
- Синтаксис:
long distance(int8_t temperature = 23) - Параметры:
temperature: температура окружающей среды от-128до127°C. Необязательный параметр и по умолчанию равен23°C.- Возвращаемое значение: измеренное расстояние до препятствия от
3до400см. - Примечания: функция ждёт ответа от датчика, что может занять до 38 мс.
- Примеры:
// Вычисляем расстояние до объекта
// Температуру окружающей оставляем по умолчанию 23 °C
int sensorDistance = sensor.distance();
// Вычисляем расстояние до объекта
// с указанием температуры окружающей среды 70 °C
int sensorDistance = sensor.distance(70);
Переменная averaging
- Назначение: Усредняет выводимые показания.
- Синтаксис:
averaging - Значение: уровень коэффициента усреднение от
0до1000 0: бех усреднений10: минимальное усреднение100: нормальное усреднение1000: сильное усреднение- Возвращаемое значение: нет
- Примечания: при снятии показаний без усреднений мы можем получать «прыгающие» значения. Например, на дистанции в
200см до препятствия, показания могут колебаться от198до202. Это может быть причиной следующих факторов: геометрия отражающей поверхности, колебания температуры воздуха, колебания питания датчика, посторонние шумы и многое другое. Для устранения помех можно указать коэффициент усреднения: чем выше значение коэффициента, тем плавнее будут меняться данные возвращаемые функциейdistance(). - Примеры:
// Указываем коэффициент усреднения 15
sensor.averaging = 15;