Подключение водонепроницаемого ультразвукового датчика SR04T/SR04M к Arduino


Ультразвуковые датчики в настоящее время находят применение во многих приложениях: обнаружение препятствий, измерение расстояние, мониторинг глубин и многое другое. А такие варианты ультразвуковых датчиков как SR04T и SR04M, помещенные в водонепроницаемый корпус, позволяет им работать в жестких погодных условиях и даже под водой. По функционалу в ряде вещей они также превосходят обычный ультразвуковой датчик HC-SR04.

Внешний вид проекта подключения ультразвукового датчика SR04T/SR04M к Arduino

В данной статье мы рассмотрим подключение водонепроницаемого ультразвукового датчика SR04T/SR04M к плате Arduino для измерения расстояния до препятствия. В статье также достаточно подробно описаны принципы работы данного датчика.

Подключение аналогичного датчика к плате Arduino мы уже рассматривали ранее на нашем сайте, но эта статья является более свежей и значительно более подробной.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Ультразвуковой датчик SR04T/SR04M (купить на AliExpress).

Принципы работы модуля ультразвукового датчика SR04T/SR04M

Распиновка датчика SR04T/SR04M

Распиновка датчика SR04T/SR04M показана на следующем рисунке. Он имеет 6 контактов: RST, 5V, RX, TX, GND и SWIM. Используются из них только 4, контакты SWIM и RST не используются.

Распиновка датчика SR04T/SR04M

Назначение контактов датчика SR04T/SR04M

5V – контакт подачи питания на модуль датчика. Мы будем подавать на него 5V.

RX – триггерный контакт датчика. Чтобы запустить датчик в работу на него необходимо подать импульс длительностью 10 мкс.

TX – выходной контакт датчика. После подачи на триггерный контакт датчика запускающего импульса датчик испускает в пространство ультразвуковую волну и после ее отражения от препятствия формирует на своем выходном контакте импульс, длительность которого равна времени распространения ультразвуковой волны до препятствия и обратно.

GND – контакт общего провода (земли) датчика, используется в качестве второго провода подачи питания на датчик.

SWIM – не используется.

RST – не используется.

Как работает водонепроницаемый ультразвуковой датчик

Ультразвуковые датчики испускают в пространство звуковые волны такой высокой частоты, которую не может услышать человеческое ухо. После этого они ждут когда отраженная от препятствия волна вернется к ним обратно, и принимают ее. На основе времени распространения волны до препятствия и обратно можно, зная скорость звука в воздухе, рассчитать расстояние до препятствия. Фактически, работа ультразвукового датчика очень похожа на работу радара, который обнаруживает и измеряет расстояние до объектов с помощью радиоволн. Принцип работы ультразвукового датчика показан на следующем рисунке.

Принцип работы ультразвукового датчика

Водонепроницаемый ультразвуковой датчик SR04T/SR04M испускает в окружающее пространство ультразвуковую волну частотой 40 кГц. После приема отраженного от препятствия сигнала он усиливается операционным усилителем в составе модуля датчика и затем обрабатывается встроенным микроконтроллером STM8, который и формирует результирующий импульс на выходе датчика (echo pin). Длительность этого импульса равна времени распространения ультразвуковой волны до препятствия и обратно.

Если мы обозначим время распространения ультразвуковой волны до препятствия и обратно как “T”, мы получим следующую формулу для расчета расстояния до препятствия:

Формула для расчета расстояния до препятствия

Компоненты датчика SR04T/SR04M

Компоненты ультразвукового датчика SR04T/SR04M показаны на следующем рисунке.

Компоненты ультразвукового датчика SR04T/SR04M

Микроконтроллер STM8

Это основной микроконтроллер модуля датчика, который производит обработку сигналов и управляет режимами работы датчика. Данный микроконтроллер также формирует частоту 40 кГц, необходимую для работы датчика.

Операционный усилитель LMV324

Микросхема операционного усилителя LMV324 содержит 4 ступени усилителя, присутствующие на плате, которые каскадом соединены друг с другом для обработки отраженного от препятствия сигнала (Echo Signal). Эти 4 ступени усиления необходимы в связи с тем, что отраженный от препятствия сигнал часто бывает очень низкого уровня.

Cердечник трансформатора (Transformer Core)

Используется для преобразования прямоугольной волны 40 кГц к уровню напряжения, с которым работает модуль ультразвукового датчика. Может настраиваться пользователем для повышения точности считываемых значений.

Коннектор для подключения ультразвукового модуля (Ultrasonic Unit Connector)

Двухпиновый разъем (коннектор), который используется для подключения модуля к ультразвуковому блоку.

Джампер R27

Помещая в этот джампер различные значения резисторов мы можем управлять режимом работы ультразвукового модуля.

Наиболее часто задаваемые вопросы про ультразвуковой датчик

Где используется водонепроницаемый ультразвуковой датчик?
Данный датчик применяется для решения следующих задач:
1. В качестве устройства измерения расстояния по горизонтали.
2. Для предупреждения о подводных препятствиях.
3. Для управления трафиком (даже в условиях жестких погодных условий).
4. Измерения уровня жидкости в цистернах.

Какое рабочее напряжение у модуля датчика SR04T/SR04M?
Модули SR04T и SR04M имеют рабочее напряжение 5 Вольт.

Какое минимальное и максимальное расстояние способен измерять модуль ультразвукового датчика?
Минимальное измеряемое расстояние для водонепроницаемого ультразвукового датчика составляет 2,5 см, а максимальное – 4,5 метра.

С каким максимальным разрешением может работать ультразвуковой датчик?
Максимальное разрешение, которое может обеспечить ультразвуковой датчик, равно 0,5 см.

Схема датчика

Схема водонепроницаемого ультразвукового датчика SR04T/SR04M представлена на следующем рисунке.

Схема водонепроницаемого ультразвукового датчика SR04T/SR04MРежимы работы модуля ультразвукового датчика SR04T/SR04M

Модуль ультразвукового датчика SR04T/SR04M может работать в 5 различных режимах, переключать которые можно с помощью джампера R27 на печатной плате модуля.

Местоположение джампера R27 на печатной плате модуля SR04T/SR04M

Режим 1: Standard Trigger Mode (R27 открыт) (стандартный режим)

Режим 1 (Standard Trigger Mode) для датчика SR04T/SR04M

В этом режиме модуль работает как и другие широко распространенные модули SR04, в котором для запуска модуля в работу необходим импульс длительностью 10 мкс. Ток в режиме ожидания в данном случае <2.5mA, а рабочий ток – 30mA.

Режим 2: Low Power Trigger Mode (R27 переключен на резистор 300kΩ) (режим с пониженной мощностью)

Режим 2 (Low Power Trigger Mode) для датчика SR04T/SR04M

Данный режим похож на выше рассмотренный режим 1 (Standard Trigger Mode), отличие состоит лишь в том, что запускающий импульс (Trigger pulse) должен быть длительностью не менее 1 мс. В этом режиме значительно снижено потребление электроэнергии – <40uA в режиме ожидания.

Режим 3: Serial Port Automatic Mode (R27 переключен на резистор 120kΩ) (режим автоматической работы)

Режим 3 (Serial Port Automatic Mode) для датчика SR04T/SR04M

В этом режиме данные передаются в виде последовательных пакетов, запускающие импульсы в этом режиме не оказывают никакого влияния на работу модуля. Модуль автоматически испускает серию ультразвуковых импульсов с интервалом (периодом) 120 мс и передает данные на свой выходной контакт ECHO в форме последовательных пакетов. Средний потребляемый в этом режиме модулем ток составляет 5mA.

Режим 4: Serial Low Power Mode (R27 переключен на резистор 47kΩ) (последовательный режим с низкой потребляемой мощностью)

Режим 4 (Serial Low Power Mode) для датчика SR04T/SR04M

Этот режим является комбинацией стандартного режима (режим 1) и автоматического последовательного режима (режим 3). В этом режиме мы сначала подаем пакет последовательных данных на контакт TRIGGER датчика. Этот пакет данных ((0X01) запускает модуль в работу и модуль излучает серию ультразвуковых импульсов, после чего пользователю передается выходной сигнал на контакт ECHO в форме последовательных импульсов. После этого модуль переходит в режим пониженного энергопотребления, в котором потребляет ток 20uA.

Режим 5: Computer Printing Mode (R27 замкнут накоротко)

Режим 5 (Computer Printing Mode) для датчика SR04T/SR04M

Данный режим похож на режим 4. В нем также последовательная команда (0X01) подается на модуль на контакт TRIG, после чего модуль испускает в окружающее пространство серию ультразвуковых импульсов. В этом режиме модуль автоматически рассчитывает расстояние в миллиметрах и передает закодированный в ASCII-коде пакет на свой выходной контакт ECHO. Это позволяет непосредственно использовать модуль с любым последовательным терминалом.

В данном проекте мы будем использовать режим, в котором модуль находится по умолчанию – это режим 1 (Mode 1).

Временные диаграммы работы модуля

Чтобы получить от ультразвукового датчика данные, мы сначала должны подать запускающий импульс длительностью 10 мкс на его контакт Trigger. При получении данного импульса датчик излучает в окружающее пространство 8 импульсов с частотой 40 кГц.

Временные диаграммы работы модуля датчика SR04T/SR04M

После этого датчик принимает отраженный от препятствия сигнал, обрабатывает его и формирует на своем контакте Echo импульс, длительность которого в точности равна времени распространения ультразвукового сигнала до датчика и обратно.

Мы с помощью платы Arduino считываем длительность этого импульса и на его основании, зная скорость звука в воздухе, рассчитываем расстояние до препятствия.

Схема проекта

Схема подключения водонепроницаемого датчика SR04T/SR04M к плате Arduino представлена на следующем рисунке.

Схема подключения водонепроницаемого датчика SR04T/SR04M к плате ArduinoМежду платой Arduino и датчиком необходимо сделать следующие соединения:

Соединения между платой Arduino и ультразвуковым датчиком

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Как следует из выше изложенного, нам в программе необходимо будет подавать импульс длительностью 10 мкс на контакт TRIGGER датчика и после этого измерять длительность импульса на его контакте ECHO. Для реализации этого функционала мы будем использовать библиотеку “NewPing”, которую можно установить выполнив следующую последовательность действий:

1. Откройте меню инструментов (Tools Menu) в Arduino IDE и выберите в ней менеджер библиотек (library manager).

Запуск менеджера библиотек в Arduino IDE

2. В открывшемся менеджере библиотек выполните поиск библиотеки “NewPing” и после того как менеджер вам ее найдет, установите ее последнюю версию.

Установка библиотеки “NewPing” с помощью менеджера библиотек

Использование библиотеки NewPing

Вначале в программе зададим контакты платы Arduino, которые будем использовать, а также объявим необходимые переменные. Дополнительно создадим объект для работы с ультразвуковым датчиком класса NewPing.

Функция Setup

В функции Void Setup() мы инициализируем последовательный порт для работы на скорости 57600 бод.

Функция Loop

1. Основную и самую важную часть операций нашей программы мы будем выполнять именно в этой функции.

2. Мы будем использовать функцию “sonar.ping_median()” чтобы получить 5 значений расстояния и потом вычислить их среднее значение – это позволит нам улучшить стабильность получаемых результатов.

3. Чтобы преобразовать полученное от датчика значение времени в значение расстояния нам нужно умножить его на 0.0343 (скорость звука в см/мкс) и затем взять половину полученного значения (поскольку датчик нам передал время распространения ультразвукового сигнала до препятствия и обратно).

4. Это значение мы будем сохранять во временной переменной “Tempval1”. Используемое значение мы будем хранить в переменной “Tempval2”.

5. При обновлении значений если разница между Tempval1 и Tempval2 будет существенна (>60 OR <-60) мы будем использовать меньший вес для нового считанного значения с датчика при расчете значения для переменной Tempval2.

6. Если разница между значениями мала мы будем рассчитывать Tempval2 при помощи добавления 40% нового значения с датчика (Tempval1) с 60% старого значения (Tempval2).

7. Все рассмотренные выше операции призваны сгладить флуктуации значений, которые могут возникнуть при работе датчика вследствие шумов различного происхождения.

8. В конце мы присваиваем значение переменной вещественного типа Tempval2 переменной целого типа Finalval, которую выводим в окно монитора последовательной связи с помощью команды Serial.print.

Пример вывода значений нашей программы в окно монитора последовательной связи показан на следующем рисунке.

Пример вывода значений нашей программы в окно монитора последовательной связи

Пример работы нашего проекта показан в следующем видео.

Если датчик работает как то странно и выдает некорректные показания попробуйте отрегулировать трансформатор, находящийся в левом верхнем углу модуля датчика как показано на следующем рисунке.

Регулировка трансформатора в левом верхнем углу модуля ультразвукового датчика

Исходный код программы (скетча)

Все необходимые файлы для проекта можно скачать по следующей ссылке.

Источник статьи

(Проголосуй первым!)
Загрузка...
2 496 просмотров

Комментарии

Подключение водонепроницаемого ультразвукового датчика SR04T/SR04M к Arduino — 12 комментариев

  1. Здравствуйте! Спасибо большое за статью, отличная отправная точка для работы с датчиком. У меня возник вопрос, может чего-то не понимаю, почему на видео датчик показывает расстояние порядка 60 см, хотя на глаз по масштабам датчика и кисти расстояние составляет порядка 20 см?

    • Добрый день. Честно говоря, не знаю, видео ведь склеено из двух частей и нет же никаких гарантий что эти 2 части записывались одновременно

    • Должен показывать, он же для этого и создан. Может быть, вам попался неисправный экземпляр датчика?

      • В воду отпускаешь перестает воздух показывает раньше и в воде и воздухе показывал

        • Ну может слегка бракованный экземпляр датчика вам попался или уронили вы его где-нибудь случайно, повредили

            • Да, это совсем тоска. Может с чем то другим тогда в схеме проблема. К другой плате попробовать подсоединить. Удаленно мне так сложно вам что то конкретное подсказать, к сожалению

            • А вы во всех режимах его работу пробовали? У него же целых 5 режимов работы. Если в моей статье информации по ним вам не хватает, то вот здесь они подробно описаны - dronebotworkshop.com/waterproof-ultrasonic/. Также есть еще одна англоязычная статья хорошая на эту тему - makerguides.com/jsn-sr04t-arduino-tutorial/, вдруг программа из нее вам больше понравится. Ну а здесь - arduino.ru/forum/apparatnye-voprosy/dalnomer-aj-sr04m-ukroshchenie-stroptivogo, уже на русском можете прочитать про "мучения" одного из энтузиастов с этим датчиком

  2. А почему бы не обойтись одной платой Ардуино и датчиком, без платы со вторым процессором СТМ?
    Ведь любой Ардуино-процессор, наверное, и 40 кГц может выдать, и сигнал принять, и вычисления сделать.
    Зачем это усложнение?

    • Так плата с микроконтроллером STM находится в составе модуля датчика, без нее данный датчик не выпускают. Не будете же вы готовый модуль разбирать чтобы выпаять из нее данную плату.
      И, я думаю, решение о том, чтобы выпускать этот модуль именно с платой с микроконтроллером STM было принято не просто так потому что все подобные ультразвуковые датчики, которые я знаю, выпускаются точно также с этой платой

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *