Как подключить ультразвуковой датчик к ардуино

от admin

Ультразвуковой датчик расстояния
HC–SR04

Ультразвуковой датчик расстояния — модуль HC-SR04 использует акустическое излучение для определения расстояния до объекта. Этот бесконтактный датчик обеспечивает высокую точность и стабильность измерений. Диапазон измерений составляет: от 2 см до 400 см. На показания датчика практически не влияют солнечное излучение и электромагнитные шумы. Модуль продается в комплекте с трансмиттером и ресивером.

Технические характеристики HC-SR04:

  • Напряжение питания: +5В – постоянный ток;
  • Сила тока покоя: < 2 мА;
  • Рабочая сила тока: 15 мА;
  • Эффективный рабочий угол: < 15°;
  • Расстояние измерений: от 2 см до 400 см (1 – 13 дюймов) с разрешением 0,3 см;
  • Разрешающая способность: 0.3 см;
  • Угол измерений: 30 градусов;
  • Ширина импульса триггера: 10 микросекунд;
  • Размеры: 45 мм x 20 мм x 15 мм.

Рис. 1 — Внешний вид датчика HC-SR04

  • VCC – +5 В (постоянный ток)
  • Trig (Т): – сигнала входа(Триггер, INPUT)
  • Echo (R) – вывод сигнала выхода (Эхо, OUTPUT)
  • GND – Земля

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

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

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

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

Рис. 2 — Принцип действия ультразвукового дальномера HC-SR04

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

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

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

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

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

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

Примечание: в свободном доступе существует библиотека NewPing, которая облегчает использование HC–SR04.

Вариант 1

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

Рис. 4 — Схема подключения HC-SR04 к Arduino

Скетч №1

Функция pulseIn() возвращает длину сигнала в микросекундах.

Вариант 2

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

Скетч №2

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

Функция getDistance() рассчитывает дистанцию до объекта. Расстояние равно произведению скорости на время:

Скорость звука в воздухе 340 м/сек, время в микросекундах мы знаем (переменная duration ). Чтобы получить время duration в секундах, нужно разделить его на 1 000 000. Так как звук проходит двойное расстояние – до объекта и обратно – нужно ещё разделить результат пополам. Таким образом, расстояние до объекта

S = 34000×duration / 1 000 000 / 2 = 1,7×duration / 100.

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

Вариант 3
(Использование библиотеки NewPing)

В свободном доступе имеется библиотека NewPing, которая облегчает использование HC–SR04.

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

Ниже приведен скетч с использованием библиотеки NewPing.

Скетч №3
Примечания

Если HC-SR04 не считывает сигнал эхо, выходной сигнал никогда не преобразуется в LOW. Датчики Devantec и Parallax обеспечивают время задержки 36 миллисекунд и 28 миллисекунд соответственно. Если вы используете скетч, приведенный выше, программа «зависнет» на 1 секунду. Поэтому желательно указывать параметр задержки.

Датчик HC-SR04 плохо работает при измерении расстояний более 10 футов. Время возврата импульса составляет около 20 миллисекунд, так что рекомендуется в таких случаях выставлять время задержки более 20, напрмер, 25 или 30 миллисекунд.

Вариант 4
(с использованием 1 вывода датчика)

Можно подключить ультразвуковой датчик расстояния HC-SR04 лишь к одному пину Arduino. Для этого необходимо между выводами Trig и Echo установить резистор на 2,2 кОм и подключить к Arduino только вывод Trig. Можно дополнительно подключить конденсатор на 0,1 мкФ к пинам Echo и Trig на датчике.

Рис. 5 — Схема подключения для ультразвукового датчика расстояния HC-SR-04 к Arduino с использованием 1 вывода

Using Ultrasonic Sensor with Arduino

Ultrasonic sensorUltrasonic sensor

Introduction

Sound navigation and ranging, also known as Sonar, uses sound wave to detect objects. The working principle of active sonar is quite simple. A sonar transceiver sends a pulse of sound wave. If the sound wave hits an object, the sound wave is reflected back to the transceiver. By measuring the time required for the pulse to travel to the object and travel back to the transceiver, we can calculate the distance between the object and the transceiver with the speed of sound.

Working principle of sonarWorking principle of sonar

HC-SR04 is an inexpensive ultrasonic sensor. It can measure distance from 2 cm to about 500 cm. Therefore, HC-SR04 is ideal for adding collision avoidance capability to a robot.

In this tutorial, we will connect the HC-SR04 to an Arduino, and use this setup to measure the distance between the sensor and a nearby obstacle.

HC-SR04 with the ArduinoHC-SR04 with the Arduino

Materials and Tools
  • Arduino Uno x 1
  • HC-SR04 Ultrasonic Sensor x 1
  • LED lights of different colors x 3 (for assignment only)
  • 10 ohm resistors x 3 (for assignment only)
  • Jumper wires
HC-SR04 Sensor

The HC-SR04 is an ultrasound transceiver, which means it emits sound wave and detects the reflected wave.

HC-SR04 with the ArduinoHC-SR04 with the Arduino

The HC-SR04 has four pins. VCC and GND are the power pins. The ‘trigger’ pin is for starting the measurement, and the ‘echo’ pin is for outputting the measured result.

To start the measurement, we need to make the sensor emit some sound wave. When a microcontroller like Arduino sets the ‘trigger’ pin to the HIGH state for 10 microseconds, the sensor emits a few pulses of sound wave. Then, the sensor sets the ‘echo’ pin to HIGH until the reflected signal arrives. i.e. We can find out how much time the pulses of sound wave take to travel forward and backward by measuring how long the ‘echo’ pin is at the HIGH state.

Connect the Sensor to the Arduino

The connection is rather straightforward. Other than the power pins, we can connect the trigger pin and the echo pin of the HC-SR04 to any digital I/O pins of the Arduino.

HC-SR04 Arduino
VCC 5V
GND GND
Trigger 7
Echo 8

Connect the HC-SR04 to the ArduinoConnect the HC-SR04 to the Arduino

NOTE: Technically, we can use the same pin for both the trigger pin and the echo pin, as the input mode and the output mode are used at different times.

Measure Distance with the Sensor

Let’s write an Arduino program to read the distance measured by the sensor. Surprisingly, we don’t need to use any extra library to make this work. Using the built-in functions of Arduino to read the signals from the HC-SR04 is actually really easy.

First, we define two integer constants for the pins, as well as two long integer variables for storing the data from the sensor.

Then, we start the serial monitor, and set the pins to appropriate modes in the setup function.

Then, we make measurements repeatedly in the loop function. As mentioned, we need to set the ‘trigger’ pin to HIGH for 10 microseconds so that the sensor can emit a few pulses of sound wave. However, in order to produce a clean HIGH signal, we need to set the ‘trigger’ pin to LOW for 5 microseonds before setting the ‘trigger’ pin to HIGH for 10 microseconds.

Next, we measure how long the ‘echo’ pin is set to HIGH by using the Arduino’s pulseIn function, and store the measured time to the variable travel_time . The measured time is in microseconds.

Then, we need to calculate the distance by using the speed of sound. At 20 degree Celsius, the speed of sound is 343 m/s. Since 1 m is 100 cm, and 1 s is 1,000,000 microseconds, we can calculate the required distance (in cm) as follows:

NOTE: The 1/2 factor is necessary as the time measured by the pulseIn function is the time for the sound wave to travel forward and backward.

We can use this formula to calculate the required distance.

Finally, we print out the final result:

Upload the program to the Arduino, and you should be able to see the distances in the Serial Monitor.

Distance measurement with HC-SR04

If you have any problems, you can check out the sample code, or ask us on our Facebook page.

Conclusion and Assignment

Since an Arduino can control motors and measure distance with the HC-SR04, we can use the data from the HC-SR04 to control a robot. For instance, when the distance measured by the sensor is less than 2 cm, we can turn off the motors. Therefore, ultrasonic ranging with HC-SR04 can be an inexpensive and simple solution for collision avoidance system of robots.

To test this idea, you may complete the following assignment:

When the sensor is 10 cm from an obstacle, only a yellow LED is turned on; when the sensor is 5 cm from an obstacle, only a red LED is turned on; otherwise, only a green LED is turned on.

After completing the assignment, you can check out the sample code, or ask questions on our Facebook page.

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

Ультразвуковой дальномер рассчитан на определение расстояния до объектов в радиусе четырёх метров.

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

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

Модуль подключается четырьмя проводами. Контакты VCC и GND служат для подключения питания, а Trig и Echo — для отправки и приема сигналов дальномера. Подключим их к пинам 10 и 11 соответственно.

Напряжение питания дальномера 5 В. Модуль работает и с платами, напряжение которых 3,3 В — в этом случае подключайте его к пинам группы с P8 по P13. Установите джампер выбора питания V2 на Troyka Shield в положение V2+5V. Пин микроконтроллера, соединённый с пином Echo должен быть толерантен к 5 В. Приведённая схема подходит для подключения дальномера к Iskra JS.

Пример работы

Рассмотрим как работает дальномер.

Зная продолжительность высокого сигнала на пине Echo можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).

Функция pulseIn позволяет узнать длительность импульса в μs . Запишем результат работы этой функции в переменную duration.

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

distance = duration * 340 м/с = duration * 0.034 м/мкс

Преобразуем десятичную дробь в обыкновенную

distance = duration * 1/29 = duration / 29

Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2

distance = duration / 58

Оформим в код всё вышесказанное и выведем результат в Serial Monitor

Работа с библиотекой

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

Arduino и датчик расстояния HC-SR04

HC-SR04 – ультразвуковой датчик расстояния. Характеристики:

  • Питание: 5V
  • Рабочий ток: 15 мА
  • Звуковая частота: 40 кГц
  • Угол измерения: 15 градусов
  • Диапазон измерения: 2 см.. 4 м
  • Точность:

Датчик работает довольно интересно: подаём импульс с продолжительностью 10 мкс на пин Trig, модуль посылает ультразвуковой импульс, он отражается от препятствия и детектируется. Затем с пина Echo возвращается импульс по продолжительности соответствующий времени путешествия звуковой волны. Ардуина этот импульс должна измерить.

Подключение

Подключаем к питанию и любым цифровым пинам:

Библиотеки

С датчиком можно работать без библиотек, стандартными средствами Arduino. Но есть и библиотеки:

    – можно установить по названию HC-SR04 из менеджера библиотек (автор Dirk Sarodnick) – можно установить по названию NewPing из менеджера библиотек

Примеры

Небольшой момент: чтобы датчик не ловил “эхо” от самого себя – его не рекомендуется опрашивать чаще 30 мс!

Для опроса используем встроенные Arduino-функции

Подвигаю рукой перед датчиком:

Отфильтруем данные при помощи простейшего экспоненциального фильтра

Данная библиотека умеет выдавать результат только в целых сантиметрах

Кстати, опрос датчика при помощи pulseIn() , не так плох, как про него пишут на форумах: погрешность измерения составляет всего 0.5 мкс:

что в пересчёте на расстояние даёт точность 0.17 мм! На деле точность получается в два раза выше, так как фактически мы измеряем сигнал два раза (путь до препятствия и обратно). Сам датчик шумит гораздо сильнее, поэтому миллиметровую точность получить абсолютно не проблема. Но есть проблема в другом: выполнение кода блокируется на время измерения, например на трёх метрах это будет 17 мс. Вроде и немного, но для некоторых задач это будет весьма критично.

Ещё один момент: скорость звука зависит от температуры: при +20°С это 343 м/с, а при -20°С – 318 м/с! А ведь это целых 318/343=7%, что на расстоянии в 1 метр даст погрешность 7 сантиметров. Много, гораздо больше возможных погрешностей в измерении. Давайте это исправим.

В диапазоне -50.. 50°С зависимость является линейной и аппроксимируется уравнением V = 0.609 * t + 330.75 :

Таким образом для нахождения более точного расстояния с поправкой на температуру достаточно делить время импульса не на 58, а на.. кстати, откуда берётся 58? Для прохождения 1 м звуку понадобится 1 / 343 = 0.0029 с, или 2.915 мс. Мы получаем время туда и обратно, поэтому умножаем ещё на 2. В и для сантиметров – ещё на 10, и получаем 58.3. Гораздо понятнее было бы умножать время импульса на скорость звука и делить пополам.

Таким образом для расчёта расстояния в миллиметрах с учётом температуры в °С получим формулу:

Настолько высокая точность нам не нужна, поэтому можно избавиться от float , чтобы код весил меньше (третье уравнение). Погрешность составит не более 1 мм на 1 метр. И финальный пример тогда (подставим в первую программу):

Читать:
Фары tyc или depo что лучше

Похожие публикации