Уз датчик расстояния. Как подключить ультразвуковой дальномер HC-SR04 к Arduino

  • макетная плата (breadboard);
  • персональный компьютер со средой разработки Arduino IDE.
  • 1 Принцип действия ультразвукового дальномера HC-SR04

    Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.

    Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности логической единицы на ножке ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.

    Диапазон измерения расстояния дальномера HC-SR04 - до 4 метров с разрешением 0,3 см. Угол наблюдения - 30°, эффективный угол - 15°. Ток потребления в режиме ожидания 2 мА, при работе - 15 мА.

    2 Схема подключения датчика расстояния

    Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, мы подключим к 11 и 12.



    3 Получение дистанции до объекта с датчика HC-SR04

    Теперь напишем скетч, определяющий расстояние до препятствия и выводящий его в последовательный порт. Сначала задаём номера выводов TRIG и ECHO - это 12 и 11 пины. Затем объявляем триггер как выход, а эхо - как вход. Инициализируем последовательный порт на скорости 9600 бод. В каждом повторении цикла loop() считываем дистанцию и выводим в порт.

    Const int trigPin = 12; const int echoPin = 11; void setup() { pinMode(trigPin, OUTPUT); // триггер - выходной пин pinMode(echoPin, INPUT); // эхо - входной digitalWrite(trigPin, LOW); Serial.begin(9600); // инициализация послед. порта } void loop() { long distance = getDistance(); // получаем дистанцию с датчика Serial.println(distance); // выводим в последовательный порт delay(100); } // Определение дистанции до объекта в см long getDistance() { long distacne_cm = getEchoTiming() * 1.7 * 0.01; return distacne_cm; } // Определение времени задержки long getEchoTiming() { digitalWrite(trigPin, HIGH); // генерируем 10 мкс импульс запуска delayMicroseconds(10); digitalWrite(trigPin, LOW); // определение на пине echoPin длительности уровня HIGH, мкс: long duration = pulseIn(echoPin, HIGH); return duration; }

    Функция getEchoTiming() генерирует импульс запуска. Она как раз создаёт тот 10-микросекундный импульс, который является триггером для начала излучения дальномером звукового пакета в пространство. Далее она запоминает время от начала передачи звуковой волны до прихода эха.

    Функция getDistance() рассчитывает дистанцию до объекта. Из школьного курса физики мы помним, что расстояние равно скорость умножить на время: S = V×t Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duration ). Чтобы получить время duration в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние - до объекта и обратно - нужно ещё разделить результат пополам. Вот и получается, что расстояние до объекта S = 34000 см/сек × duration / 1 000 000 сек / 2 = 1,7 см/сек / 100, что мы и написали в скетче.

    Операцию умножения микроконтроллер выполняет быстрее, чем операцию деления, поэтому :100 я заменил на эквивалентное ×0,01 .

    4 Библиотека для работы с эхолокатором HC-SR04

    Также для работы с ультразвуковым дальномером написано множество библиотек. Например, вот эта библиотека Ultrasonic . Установка библиотеки происходит стандартно: скачать, разархивировать в директорию /libraries/ , которая находится в папке с Arduino IDE. После этого библиотекой можно пользоваться.

    Установив библиотеку, напишем новый скетч.

    #include // подключаем библиотеку Ultrasonic ultrasonic(12, 11); // Trig - 12, Echo - 11 void setup() { Serial.begin(9600); // инициализация послед. порта } void loop() { float dist_cm = ultrasonic.Ranging(CM); // дистанция в см Serial.println(dist_cm); // выводим дистанцию в порт delay(100); }

    Результат его работы тот же - в мониторе последовательного порта выводится дистанция до объекта в сантиметрах.

    Если в скетче написать float dist_cm = ultrasonic.Ranging(INC); - дистанция будет отображаться в дюймах.

    5 Выводы по работе с сонаром HC-SR04

    Итак, мы с вами подключили к Arduino ультразвуковой дальномер HC-SR04 и получили с него данные двумя разными способами: с использованием специальной библиотеки и без.

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

    Приобрести ультразвуковой дальномер по хорошей цене можно

    Ультразвуковые датчики расстояния Ардуино очень востребованы в робототехнических проектах из-за своей относительной простоты, достаточной точности и доступности. Они могут быть использованы как приборы, помогающие объезжать препятствия, получать размеры предметов, моделировать карту помещения и сигнализировать о приближении или удалении объектов. Одним из распространенных вариантов такого устройства является датчик расстояния, в конструкцию которого входит ультразвуковой дальномер HC SR04. В этой статье мы познакомимся с принципом действия датчика расстояния, рассмотрим несколько вариантов подключения к платам Arduino, схему взаимодействия и примеры скетчей.

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

    Внимание! Так как в основу принципа действия положен ультразвук, то такой датчик не подходит для определения расстояния до звукопоглощающих объектов. Оптимальными для измерения являются предметы с ровной гладкой поверхностью.

    Описание датчика HC SR04

    Датчик расстояния Ардуино является прибором бесконтактного типа, и обеспечивает высокоточное измерение и стабильность. Диапазон дальности его измерения составляет от 2 до 400 см. На его работу не оказывает существенного воздействия электромагнитные излучения и солнечная энергия. В комплект модуля с HC SR04 arduino также входят ресивер и трансмиттер.

    Ультразвуковой дальномер HC SR04 имеет такие технические параметры:

    • Питающее напряжение 5В;
    • Рабочий параметр силы т ока – 15 мА;
    • Сила тока в пассивном состоянии < 2 мА;
    • Обзорный угол – 15°;
    • Сенсорное разрешение – 0,3 см;
    • Измерительный угол – 30°;
    • Ширина импульса – 10 -6 с.

    Датчик оснащен четырьмя выводами (стандарт 2, 54 мм):

    • Контакт питания положительного типа – +5В;
    • Trig (Т) – выход сигнала входа;
    • Echo (R) – вывод сигнала выхода;
    • GND – вывод «Земля».

    Где купить модуль SR04 для Ардуино

    Датчик расстояния – достаточно распространенный компонент и его без труда можно найти в интернет-магазинах. Самые дешевые варианты (от 40-60 рублей за штуку), традиционно на всем известном сайте.

    Модуль датчика расстояния HC-SR04 для Ардуино Еще один вариант ультразвукового сенсора HC-SR04 у надежного поставщика
    Датчики расстояния SR05 Ultrasonic HC-SR05 (улучшенные характеристики) Модуль HC-SR05 HY-SRF05 для UNO R3 MEGA2560 DUE от надежного поставщика

    Схема взаимодействия с Arduino

    Для получения данных, необходимо выполнить такую последовательность действий:

    • Подать на выход Trig импульс длительностью 10 микросек;
    • В ультразвуковом дальномере hc sr04 подключенном к arduino произойдет преобразование сигнала в 8 импульсов с частотой 40 кГц, которые через излучатель будут посланы вперед;
    • Когда импульсы дойдут до препятствия, они отразятся от него и будут приняты приемником R, что обеспечит наличие входного сигнала на выходе Echo;
    • На стороне контроллера полученный сигнал при помощи формул следует перевести в расстояние.

    При делении ширины импульса на 58.2, получим данные в сантиметрах, при делении на 148 – в дюймах.

    Подключение HC SR04 к Arduino

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

    Контакт земли подключаем к выводу GND на плате Arduino, выход питания соединяем с 5V. Выходы Trig и Echo подсоединяем к arduino на цифровые пины. Вариант подключения с помощью макетной платы:

    Библиотека для работы с HC SR04

    Для облегчения работы с датчиком расстояния HC SR04 на arduino можно использовать библиотеку NewPing. Она не имеет проблем с пинговыми доступами и добавляет некоторые новые функции.

    К особенностям библиотеки можно отнести:

    • Возможность работы с различными ультразвуковыми датчиками;
    • Может работать с датчиком расстояния всего через один пин;
    • Отсутствие отставания на 1 секунду при отсутствии пинга эха;
    • Для простой коррекции ошибок есть встроенный цифровой фильтр;
    • Максимально точный расчет расстояния.

    Скачать бибилотеку NewPing можно

    Точность измерения расстояния датчиком HC SR04

    Точность датчика зависит от нескольких факторов:

    • температуры и влажности воздуха;
    • расстояния до объекта;
    • расположения относительно датчика (согласно диаграммы излучения);
    • качества исполнения элементов модуля датчика.

    В основу принципа действия любого ультразвукового датчика заложено явление отражения акустических волн, распространяющихся в воздухе. Но как известно из курса физики, скорость распространения звука в воздухе зависит от свойств этого самого воздуха (в первую очередь от температуры). Датчик же, испуская волны и замеряя время до их возврата, не догадывается, в какой именно среде они будут распространяться и берет для расчетов некоторую среднюю величину. В реальных условиях из-за фактора температуры воздуха HC-SR04 может ошибаться от 1 до 3-5 см.

    Фактор расстояния до объекта важен, т.к. растет вероятность отражения от соседних предметов, к тому же и сам сигнал затухает с расстоянием.

    Также для повышения точности надо правильно направить датчик: сделать так, чтобы предмет был в рамках конуса диаграммы направленности. Проще говоря, “глазки” HC-SR04 должны смотреть прямо на предмет.

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

    • усредняются значения (несколько раз замеряем, убираем всплески, потом находим среднее);
    • с помощью датчиков (например, ) определяется температура и вносятся поправочные коэффициенты;
    • датчик устанавливается на серводвигатель, с помощью которого мы “поворачиваем голову”, перемещая диаграмму направленности влево или вправо.

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

    Давайте рассмотрим пример простого проекта с платой Arduino Uno и датчиком расстояния HC SR04. В скетче мы будем получать значение расстояния до предметов и выводить их в монитор порта в среде Arduino IDE. Вы сможете легко изменить скетч и схему подключения, чтобы датчик сигнализировал о приближении или отдалении предмета.

    Подключение датчика к ардуино

    При написании скетча использовалась следующий вариант распиновки подключения датчика:

    • VCC: +5V
    • Trig – 12 пин
    • Echo – 11 пин
    • Земля (GND) – Земля (GND)

    Пример скетча

    Начнем работу с датчиком сразу с относительного сложного варианта – без использования внешних библиотек.

    В данном скетче мы выполняем такую последовательность действий:

    • Коротким импульсом (2-5 микросекунды) переводим датчик расстояния в режим эхолокации, при котором в окружающее пространство высылаются ультразвуковые волны с частотой 40 КГц.
    • Ждем, пока датчик проанализирует отраженные сигналы и по задержке определит расстояние.
    • Получаем значение расстояния. Для этого ждем, пока HC SR04 выдаст на входе ECHO импульс, пропорциональный расстоянию. Мы определяем длительность импульса с помощью функции pulseIn, которая вернет нам время, прошедшее до изменения уровня сигнала (в нашем случае, до появления обратного фронта импульса).
    • Получив время, мы переводим его в расстояние в сантиметрах путем деления значения на константу (для датчика SR04 это 29.1 для сигнала «туда», столько же для сигнала «обратно», что в сумме даст 58.2).

    Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса – LOW. Так как у некоторых датчиков время задержки варьируется в зависимости от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).

    Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.

    #define PIN_TRIG 12 #define PIN_ECHO 11 long duration, cm; void setup() { // Инициализируем взаимодействие по последовательному порту Serial.begin (9600); //Определяем вводы и выводы pinMode(PIN_TRIG, OUTPUT); pinMode(PIN_ECHO, INPUT); } void loop() { // Сначала генерируем короткий импульс длительностью 2-5 микросекунд. digitalWrite(PIN_TRIG, LOW); delayMicroseconds(5); digitalWrite(PIN_TRIG, HIGH); // Выставив высокий уровень сигнала, ждем около 10 микросекунд. В этот момент датчик будет посылать сигналы с частотой 40 КГц. delayMicroseconds(10); digitalWrite(PIN_TRIG, LOW); // Время задержки акустического сигнала на эхолокаторе. duration = pulseIn(PIN_ECHO, HIGH); // Теперь осталось преобразовать время в расстояние cm = (duration / 2) / 29.1; Serial.print("Расстояние до объекта: "); Serial.print(cm); Serial.println(" см."); // Задержка между измерениями для корректной работы скеча delay(250); }

    Скетч с использованием библиотеки NewPing

    Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать – создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().

    #include #define PIN_TRIG 12 #define PIN_ECHO 11 #define MAX_DISTANCE 200 // Константа для определения максимального расстояния, которое мы будем считать корректным. // Создаем объект, методами которого будем затем пользоваться для получения расстояния. // В качестве параметров передаем номера пинов, к которым подключены выходы ECHO и TRIG датчика NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCE); void setup() { // Инициализируем взаимодействие по последовательному порту на скорости 9600 Serial.begin(9600); } void loop() { // Стартовая задержка, необходимая для корректной работы. delay(50); // Получаем значение от датчика расстояния и сохраняем его в переменную unsigned int distance = sonar.ping_cm(); // Печатаем расстояние в мониторе порта Serial.print(distance); Serial.println("см"); }

    Пример подключения ультразвукового дальномера HC SR04 с одним пином

    Подключение HC-SR04 к Arduino может быть выполнено посредством использования одного пина. Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.

    #include #define PIN_PING 12 // Пин с Arduino соединен с пинами trigger и echo на датчике расстояния #define MAX_DISTANCE 200 // Максимальное расстояние, которое мы способны контролировать (400-500см). NewPing sonar(PIN_PING, PIN_PING, MAX_DISTANCE); // Регулировка пинов и максимального расстояния void setup() { Serial.begin(9600); // Открывается протокол с данными и частотой передачи 115200 бит/сек. } void loop() { delay(50); // Задержка в 50 мс между генерируемыми волнами. 29 мс – минимально допустимое значение unsigned int distanceSm = sonar.ping(); // Создание сигнала, получение параметра его продолжительности в мкс (uS). Serial.print("Ping: "); Serial.print(distanceSm / US_ROUNDTRIP_CM); // Пересчет параметра времени в величину расстояния и вывод результата (0 соответствует выходу за допустимый предел) Serial.println("cm"); }

    Краткие выводы

    Ультразвуковые датчики расстояния достаточно универсальны и точны, что позволяет их использовать для большинства любительских проектов. В статье рассмотрен крайне популярный датчик HC SR04, который легко подключается к плате ардуино (для этого следует сразу предусмотреть два свободных пина, но есть вариант подключения и с одним пином). Для работы с датчиком существуют несколько бесплатных библиотек (в статье рассмотрена лишь одна из них, NewPing), но можно обойтись и без них – алгоритм взаимодействия с внутренним контроллером датчика достаточно прост, мы показали его в этой статье.

    Исходя из собственного опыта, можно утверждать, что датчик HC-SR04 показывает точность в пределах одного сантиметра на расстояниях от 10 см до 2 м. На более коротких и дальних дистанциях возможно появление сильных помех, что сильно зависит от окружающих предметов и способа использования. Но в большинстве случаев HC-SR04 отлично справлялся со своей работой.

    Является ультразвуковым датчиком расстояния - дальномером. Принцип работы датчика очень похож на работу сенсоров летучих мышей или дельфинов. Датчик излучает пакет звуковых импульсов на ультразвуковой частоте. Отраженные от препятствий звуковые волны возвращаются обратно к датчику. Микрофон датчика улавливает первый пришедший импульс. По времени прохождения импульса можно вычислить расстояние до препятствия. Ультразвук не слышен человеческим ухом, по этому датчик не производит никаких слышимых шумов. Исходя из принципа работы можно определить основные особенности измерения расстояния таким датчиком. Во первых, датчик измеряет расстояние в определенном секторе пространства перед собой, равный 15 градусам, и любой предмет, помещенный в этот сектор, способен отразить звуковую волну. Если предмет достаточно маленький, то мощности отраженной волны может не хватить для определения расстояния до такого предмета, и он становится «не видим» для датчика. Некоторые поверхности, если они расположены под углом к датчику, отражают звуковые волны в сторону, как зеркало. В этом случае датчик так же может давать ложные данные.

    Датчик HC-SR04 имеет два контакта для подключения к микроконтроллеру: TRIG и ECHO. Для начала процесса измерения необходимо на вход TRIG подать сигнал высокого уровня длительностью 10 мкс. Датчик излучит в пространство серию ультразвуковых импульсов. После приема отраженного сигнала, датчик формирует на выводе ECHO импульс высокого уровня, длительность которого пропорционально расстоянию до преграды (150мкс-25мс). После одного цикла работы датчика, волны продолжают распространяться по помещению и отражаться. Если в этот момент снова активизировать измерение, вполне вероятно, что сенсор датчика зафиксирует отраженные волны от предыдущей серии импульсов и результат измерения будет не верным.


    Для пересчета в длины импульса в расстояние используется формула:
    S=F/58,
    где:
    S - дистанция в сантиметрах,
    F - длительность импульса ECHO в микросекундах.

    На рисунке приведен один из возможных вариантов подключения дальномера HC-SR04 к Ардуино. Контакт TRIG дальномера подключен к Pin 9, контакт ECHO к Pin 8. Дальномер запитан от напряжения питания 5 вольт, взятое с платы Arduino.

    Для работы с дальномером HC-SR04 c Arduino удобно использовать функцию pulseIn. При помощи этой функции меряется длительность импульса на контакте ECHO. Ниже приведен пример программы для Arduino, которая опрашивает дальномер HC-SR04 и передает измеренное значение в сантиметрах в последовательный порт. Данные из последовательного порта считываем монитором, входящим в комплект программы IDE Arduino.

    #define Trig 9
    #define Echo 8

    Void setup()
    {
    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);
    Serial.begin(9600);
    }

    Void loop()
    {
    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig, LOW);
    unsigned int impulse=pulseIn(Echo, HIGH);
    unsigned int distance=impulse/58;
    Serial.println(distance);
    delay(1000);

    Самодельное охранное оборудование

    В. ГУСЬКОВ, В. СВИРИДОВ, г. Самара
    Радио, 2002 год, № 8

    Работа многих систем охранной сигнализации основана на очень простом принципе: в охраняемом помещении в неурочное время не должно быть никакого движения. Чтобы обнаружить его, помещение "заполняют" излучением - чаще всего радио- или акустическим. Многократно отразившись от стен и находящихся в помещении предметов, лучи достигают приемника. Любое изменение обстановки вызовет модуляцию принятого сигнала, что и зафиксирует датчик.
    Акустические (ультразвуковые) датчики такого типа имеют довольно существенное преимущество над использующими радиоволны - ничего не излучая в "эфир", они не требуют оформления разрешений на установку и эксплуатацию. Читателям предлагается описание одного из подобных датчиков, сравнительно простого и достаточно чувствительного для охраны помещения площадью до 20 м 2 .

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

    Основные технические характеристики

    Частота звука, кГц...............10
    Излучаемая акустическая
    мощность, мВт, не более........5
    Напряжение питания (постоянное), В................10...16
    Потребляемая мощность
    в дежурном режиме, мВт......120
    Габариты, мм............150x50x30

    Выходная цепь - "сухие" контакты реле, кроме того, о срабатывании сигнализирует зажигание светодиода.

    Схема прибора

    Для увеличения кликните по изображению (откроется в новом окне)

    К входу усилителя на ОУ DA1.1 и DA1.2 подключен пьезоэлектрический микрофон ВМ1, к выходу - пьезоэлектрический звукоизлучатель BF1. В результате усилитель охвачен акустической обратной связью через контролируемый газовый объем, за счет которой в системе возникают автоколебания. Их частота зависит от АЧХ и ФЧХ элементов (в первую очередь микрофона и излучателя) и от акустических свойств охраняемого помещения. Амплитуду колебаний поддерживает постоянной система АРУ из детектора на диодах VD2, VD3 и усилителя на одном из элементов микросхемы DA2 К176ЛП1. Регулирующими элементами АРУ служат имеющиеся в той же микросхеме отдельные полевые транзисторы, участки сток-исток которых включены в цепи местной обратной связи каскадов на ОУ DA1.1 и DA1.2.

    Если в чувствительной зоне датчика движется какой-либо объект (нарушитель), изменяется затухание и задержка отраженных от него акустических волн, что приводит к изменению амплитуды генерируемых датчиком колебаний. Цепями R7C10 и R6C1C6 заданы частотные характеристики контура АРУ, необходимые для устойчивой работы датчика в различных условиях при эффективном слежении за изменениями амплитуды сигнала.

    Переменная составляющая напряжения на выходе усилителя АРУ, вызванная движением, поступает на вход компаратора DA1.3. Порог срабатывания устанавливают подстроечным резистором R8. К выходу компаратора через буферный усилитель из двух соединенных параллельно элементов микросхемы DD1 подключен светодиод HL1, вспышками свидетельствующий о движении в охраняемом помещении.

    Кроме того, сигнал с выходов элементов DD1.1 и DD1.2 запускает одновибратор на элементах DD1.3 и DD1.4, импульсы которого открывают ключ на транзисторе VT2, заставляя сработать реле К1. Одновибратор генерирует импульсы лишь при условии, что на входе 13 элемента DD1.4 - высокий логический уровень. Благодаря цепи R14C16 этот уровень будет достигнут лишь через некоторое время после включения питания, давая датчику возможность войти в установившийся режим, не подавая сигналов тревоги.

    Если тревожные импульсы повторяются слишком часто, конденсатор С16 разряжается через резистор R16 и диод VD5, что блокирует запуск одновибрато-ра и предотвращает лишние срабатывания реле К1. Таким образом достигается значительная экономия ресурса реле и потребляемой мощности.

    Стабилизатор напряжения питания построен по несколько необычной схеме с регулирующим транзистором VT1 в минусовой цепи, что позволило уменьшить число деталей в приборе. Диод VD1 защищает от неправильной полярности подключения к источнику питания.

    Внешний вид датчика показан на рис. 2.

    Он собран на печатной плате, помещенной в корпус из изоляционного материала, например, полистирола. На верхней крышке корпуса установлены микрофон ВМ1 и излучатель BF1, акустически изолированные от корпуса и друг от друга с помощью поролоновых шайб толщиной 3 мм. Чем больше расстояние между излучателем и микрофоном, тем выше чувствительность датчика. В авторской конструкции оно составило 100 мм. В той же крышке предусмотрено отверстие для светодиода HL1.

    В качестве BF1 и ВМ1 применены одинаковые пьезопреобразователи ВУТА-1, выпускаемые предприятием «Альфа-Оптим» (г. Волгоград). Замена их на более высокочастотные и чувствительные желательна, однако это потребует некоторых доработок датчика, изменяющих частотные характеристики контура автогенерации.

    В датчике установлены оксидные конденсаторы К50-35, керамические К10-17, резисторы МЛТ-0,125, реле РЭС55А (паспорт РС4.569.600-01). Транзисторы КТ361Б можно заменить на КТ361Г, КТ361Е и другие маломощные кремниевые структуры р-п-р.

    При регулировке чувствительности датчика (подстроечным резистором R8) иногда приходится для достижения нужного результата поменять местами выводы 12 и 13 элемента DA1.3.

    ЛИТЕРАТУРА
    1. Вилл В. Ультразвуковой автосторож. - Радио, 1996, № 1, с. 52-54.
    2. Волков А. УЗ датчик охранной сигнализации. - Радио, 1996, № 5, с. 54-56.
    3. Койнов А. Ультразвуковое охранное устройство. - Радио, 1998, № 7, с. 42.
    4. Гуськов В., Гуськова М. Способ для определения изменения состояния объема, заполненного упругой средой, и устройства (варианты) для его осуществления. - Патент РФ № 2104494 МКИ 6G 01D1/18, заявлено 26 января 1995 г., опубликовано 10 февраля 1998 г.

    Входное напряжение 5 В постоянного тока, подаётся на выводы Vcc и GND датчика.

    Подробнее о датчике:

    Если подать положительный импульс на вход датчика TRIG длительностью 10 мкс, то датчик отправит звуковую волну (8 импульсов на частоте 40 кГц - ультразвук) и установит уровень логической «1» на выходе ECHO. Звуковая волна отразится от препятствия и вернётся на приёмник датчика, после чего он сбросит уровень на выходе ECHO в логический «0» (то же самое датчик сделает, если звуковая волна не вернётся в течении 38 мс.) В результате время наличия логической «1» на выходе ECHO равно времени прохождения ультразвуковой волны от датчика до препятствия и обратно. Зная скорость распространения звуковой волны в воздухе и время наличия логической «1» на выводе ECHO, можно рассчитать расстояние до препятствия.


    Расстояние вычисляется умножением скорости на время (в данном случае скорости распространения звуковой волны V , на время ожидания эха Echo ). Но так звуковая волна проходит расстояние от датчика до объекта и обратно, а нам нужно только до объекта, то результат делим на 2:

    L = V * Echo / 2

    • L – расстояние (м);
    • V – скорость звука в воздухе (м/с);
    • Echo – время ожидания эха (с).

    Скорость звука в воздухе , в отличии от скорости света, величина не постоянная и сильно зависит от температуры:

    V 2 = γ R T / M

    • V – скорость звука в воздухе (м/с)
    • γ – показатель адиабаты воздуха (ед.) = 7/5
    • R – универсальная газовая постоянная (Дж/моль*K) = 8,3144598(48)
    • T ° К) = t°C + 273,15
    • M – молекулярная масса воздуха (г/моль) = 28,98

    Подставив в формулу известные значения γ , R , M , получим:

    V ≈ 20,042 √T

    Осталось объединить формулы вычисления V и L , и перевести L из м в см, Echo из с в мкс, T из °К в °C, получим:

    L ≈ Echo √(t+273,15) / 1000

    • L – расстояние (см)
    • Echo – время ожидания эха (мкс)
    • t – температура воздуха (°C)

    iarduino_HC_SR04 и iarduino_HC_SR04_int , синтаксис обеих библиотек одинаков. Они сами рассчитывают все значения и возвращают только расстояние в см. Температура по умолчанию установлена в 23°C, но её можно указывать. Работа с библиотеками и их функции описаны ниже.

    Для работы с датчиком, нами разработаны две библиотеки iarduino_HC_SR04 и iarduino_HC_SR04_int , синтаксис обеих библиотек одинаков.

    • Преимуществом библиотеки iarduino_HC_SR04 является то, что датчики можно подключать к любым выводам Arduino , а недостаток заключается в том, что библиотека ждёт ответа от датчика, который может длиться до 38 мс.
    • Преимуществом библиотеки iarduino_HC_SR04_int является то, что она не ждёт ответа от датчиков (не приостанавливает выполнение скетча), но выводы ECHO датчиков нужно подключать только к тем выводам Arduino , которые используют внешние прерывания.

    Подробнее про установку библиотеки читайте в нашей .

    Примеры:

    Определение расстояния с использованием библиотеки iarduino_HC_SR04:

    #include // Подключаем библиотеку iarduino_HC_SR04 sensor(2,3); // Объявляем объект sensor, указывая номера arduino подключенные к выводам TRIG и ECHO датчика // Можно использовать любые выводы Arduino void setup(){ Serial.begin(9600); // Инициализация передачи данных в монитор последовательного порта } void loop(){ delay(500); // Задержка 0,5 сек Serial.println(sensor.distance()); // Вывод расстояния (см) при температуре воздуха, около +23 °C Serial.println(sensor.distance(-20)); // Вывод расстояния (см) при температуре воздуха, около -20 °C Serial.println("=================="); }

    Определение расстояния с использованием библиотеки iarduino_HC_SR04_int:

    #include // Подключаем библиотеку iarduino_HC_SR04_int sensor(2,3); // Объявляем объект sensor, указывая номера arduino подключенные к выводам TRIG и ECHO датчика // (вывод ECHO нужно подключить к выводу Arduino использующему внешнее прерывание) void setup(){ Serial.begin(9600); // Инициализация передачи данных в монитор последовательного порта } void loop(){ delay(500); // Задержка 0,5 сек Serial.println(sensor.distance()); // Вывод расстояния (см) при температуре воздуха, около +23 °C Serial.println(sensor.distance(-20)); // Вывод расстояния (см) при температуре воздуха, около -20 °C Serial.println("=================="); }

    Результат работы обоих примеров:


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

    Просмотров