Многим читателям хорошо знаком ультразвуковой датчик HC-SR04. Одним из его недостатков является «боязнь» влаги: он не проработает долго даже просто в помещении с повышенной влажностью, не говоря уже о прямом попадании воды. Датчик AJ-SR04M лишён этого изъяна.
AJ-SR04M — это водонепроницаемый ультразвуковой датчик расстояния, предназначенный для использования на улице или в сложных условиях. Он является функциональным аналогом популярного модуля HC-SR04, но конструктивно состоит из выносного герметичного излучателя и отдельной платы управления.
Основные характеристики:
- Диапазон измерения: от 20 см до 450–600 см (примем за 400).
- Слепая зона: 20–25 см (объекты ближе этого расстояния определяются некорректно).
- Рабочее напряжение: 5.5 В (бывают модификации на 3.3 В).
- Потребление тока: менее 8 мА в рабочем режиме; в режиме энергосбережения — до 20 мкА.
- Угол обзора: от 50° до 75° (шире, чем у стандартного HC-SR04).
- Точность: около 0.5 – 1 см с разрешением до 1–2 мм.
Степень защиты датчика: IP67 (пыленепроницаемый, выдерживает кратковременное погружение в воду).
Правда, насчет погружения в воду есть сомнения.
Предполагаю, что полностью герметична только передняя часть излучателя, а задняя должна находиться внутри защищенного корпуса устройства.
Цена модуля выше, чем у HC-SR04, — от 300 рублей.
Режимы работы
Особенностью AJ-SR04M является наличие пяти режимов работы. Они переключаются путем изменения сопротивления на резисторе R19:
- Режим 1: Стандартный (как HC-SR04) — измерение по импульсу на Trig. Установлен по умолчанию.
- Режим 2: Пониженное энергопотребление.
- Режим 3: Автоматическая отправка данных через Serial (UART).
- Режим 4: Запрос данных через Serial (команда 0x55 или 0x01).
- Режим 5: Вывод расстояния в формате ASCII.
Меня привлекает именно первый режим из-за его унификации с HC-SR04. Это позволяет использовать имеющиеся библиотеки и наработки. Удобно отладить проект «на столе» с обычным датчиком, а для полевых испытаний просто подключить AJ-SR04M. Поэтому в остальные режимы я даже не углублялся.
Провел быстрое тестирование с Arduino Nano.
Залил следующий скетч:
#include <NewPing.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
#define ITERATIONS 7 // 7 замеров отсеют любые случайные прыжки
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
// Делаем 7 быстрых замеров и выбираем среднее (медиану)
// convert_cm переводит микросекунды в целые сантиметры
unsigned int distance = sonar.convert_cm(sonar.ping_median(ITERATIONS));
// Выводим только число в монитор порта
Serial.println(distance);
// Ждем 1 секунду до следующего замера
delay(1000);
}
Для работы использовал библиотеку NewPing. Можно обойтись и без неё, но так проще. Тем более она позволяет вычислять медиану из нескольких замеров, отсекая случайные всплески, выходящие за диапазон.
Прям на границе мертвой зоны (20–25 с.), даже немного залез за нее.
Погрешность составила около одного сантиметра. Учитывая, что в метрологии последнюю единицу младшего разряда обычно не берут в расчет, результат можно считать почти идеальным.